转载备份
影子 DOM(Shadow DOM)
你的 docker stop,它优雅吗? - 无糖拿铁,谢谢
清理Docker的container,image与volume · 零壹軒·笔记
Create a PyPI Mirror Site with devpi-server – SRE
优雅的终止 docker 容器 | iTimothy
Odoo 14 开发者指南第二十一章 性能优化 | Alan Hou 的个人博客
Odoo 14 开发者指南第八章 高级服务端开发技巧 | Alan Hou 的个人博客
kafka 系列:设置日志数据保存过期时间(含某个 topic)、日志策略_NIO4444-CSDN 博客_kafka 配置数据过期时间
Chromium 历史版本离线安装包 - 下载方法
怎样将 props 传递给 {this.props.children} | WebFuse
HappyBaseDoc
用户指南 — HappyBase 1.2.0 文档
安装指南 — HappyBase 1.2.0 文档
API 参考 — HappyBase 1.2.0 文档
PostgreSQL 时间转换
JS 中创建给定长度的数组
GSAP 入门 - 学习中心 - 绿袜
操作系统复习 | Happy Coding
如何理解 ip 路由和操作 linux 的路由表 - CodeAntenna
Elasticsearch 7.11 tokenizer, analyzer and filter 以及 IK 分词配置同义词、远程拓展词库 – Brave new world
podman 容器内访问 host 主机的端口 - 知识库 - BSMI KB 基础标准矿产工业
吐血总结!100 道经典 Python 面试题集锦上(附答案)
中共党史简表(1919 年 - 1949 年)
Dockerfile 详解_万 wu 皆可爱的博客 - CSDN 博客_dockerfile
为你的 Python 应用选择一个最好的 Docker 映像 | 亚马逊 AWS 官方博客
Ubuntu Server 支持中文
docker push | Docker Documentation
docker 创建本地仓库详解 (push/pull)_乱红飞的博客 - CSDN 博客_docker push 本地仓库
基于 Ubuntu 20.04 安装 Kubernetes 1.18
PostgreSQL 集群篇——PostgreSQL 的配置文件解析_51CTO 博客_postGresql
【PostgreSQL】——主从流复制_Teingi 的博客 - CSDN 博客_postgresql 主从复制
PostgreSQL: Documentation: 14: 27.4. Hot Standby
postgresql 主从复制、主从切换_偷懒的小陈的博客 - CSDN 博客_postgresql 主从
Postgres 用户、角色与权限 :: 68hub — 技术博客
中国共产党第二十次全国代表大会在京开幕 一图速览二十大报告
配置 docker 通过代理服务器拉取镜像
IPVS no destination available - Kubernetes 实践指南
Python 风格规范 — Google 开源项目风格指南
互动测试!党的二十大报告 100 题
自定义 ESlint 规则
Java 读取 OpenSSL 生成的秘钥, 进行 RSA 加解密 | 数字魔法
CSS(一)chrome 浏览器表单自动填充默认样式 - autofil_半个 GIS 半个前端的博客 - CSDN 博客
Nginx 多级代理下的真实 IP 透传 - CodeAntenna
Jenkins 环境变量
人民币金额大写规范 - 内蒙古农业大学财务处
[转]nginx 开启 websocket - 浅忆博客
ceph 创建使用 rbd
《三》配置 ceph 存储池 pool - Buxl's blog
基于 K8S 搭建 Ceph 分部署存储 – 唐玥璨 | 博客
序言 · Kubernetes 中文指南——云原生应用架构实战手册
服务器配置 - Redis 安装配置 | 灰帽子 - 任令仓的技术博客
Ubuntu 配置 sudo 命令不需要输入密码_ubuntu sudo 免密_一路向前 - 执着的博客 - CSDN 博客
修改 Docker 数据目录位置,包含镜像位置 - 腾讯云开发者社区 - 腾讯云
微服务架构实践(API Gateway)
微服务网关:从对比到选型,由理论到实践 | Java 程序员进阶之路
聊聊微服务网关
微服务网关:从对比到选型,由理论到实践
odoo 实现表分区 partition
使用 keepalived 搭建高可用服务 - 简书
业务网关的落地实践_文化 & 方法_Qunar 技术沙龙_InfoQ 精选文章
部署 Kubernetes PostgreSQL 实例 | domac 的菜园子
一套包含完整前后端的系统如何在 K8S 中部署?_k8s 前端_木讷大叔爱运维的博客 - CSDN 博客
前端安全系列(二):如何防止 CSRF 攻击? - 美团技术团队
traefik 自定义中间件 | coolcao 的小站
CSRF 原理和实战利用 - FreeBuf 网络安全行业门户
安全运维 - 如何在 Kubernetes 中使用注释对 ingress-nginx 及后端应用进行安全加固配置实践_唯一极客知识分享的技术博客_51CTO 博客
Kubernetes 进阶使用之 Helm,Kustomize
各种加密算法比较
Docker 的三种网络代理配置 · 零壹軒 · 笔记
本文档使用 MrDoc 发布
-
+
home page
Jenkins 环境变量
> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [www.mafeifan.com](https://www.mafeifan.com/DevOps/Jenkins/Jenkins2-%E5%AD%A6%E4%B9%A0%E7%B3%BB%E5%88%976----%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%85%A8%E5%B1%80%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F) 环境变量可以被看作是 pipeline 与 Jenkins 交互的媒介。 比如,可以在 pipeline 中通过 BUILD_ NUMBER 变量知道构建任务的当前构建次数。环境变量可以分为 Jenkins 内置变量和自定义变量。 [#](#jenkins内置变量) Jenkins 内置变量 ------------------------------ 在 pipeline 执行时,Jenkins 通过一个名为 env 的全局变量,将 Jenkins 内置环境变量暴露出来。其使用方法有多种,示例如下: ``` pipeline { agent any stages { stage('debug-列出当前流水线的所有环境变量) { setps { sh "printenv | sort" } } stage('Example') { steps { echo "Running ${env.BUILDNUMBER} on ${env.JENKINS_URL}" # 方法1 echo "Running $env.BUILDNUMBER on $env.JENKINS_URL" # 方法2 echo "Running ${BUILDNUMBER} on ${JENKINS_URL}" # 方法3 简写版本不推荐,难排查 } } } } ``` 默认 env 的属性可以直接在 pipeline 中引用。所以以上方法都是合法的。但是不推荐方法三,因为出现变量冲突时,非常难查问题。 那么,env 变量都有哪些可用属性呢? 通过访问`<Jenkins master的地址>/pipeline-syntax/globals#env`来获取完整列表。 在列表中,当一个变量被声明为 "For a multibranch project" 时,代表只有多分支项目才会有此变量。 ![](/media/202211/2022-11-29_092053_7946790.7901800788344163.png) 下面我们简单介绍几个在实际工作中经常用到的变量: * BUILD_ NUMBER:构建号,累加的数字。在打包时,它可作为制品名称的一部分,比如 server-2.jar。 * BRANCH_ NAME:多分支 pipeline 项目支持。当需要根据不同的分支做不同的事情时就会用到,比如通过代码将 release 分支发布到生产环境中、master 分支发布到测试环境中。 * BUILD_ URL:当前构建的页面 URL。如果构建失败,则需要将失败的构建链接放在邮件通知中,这个链接就可以是 BUILD _URL。 * GIT BRANCH:通过 git 拉取的源码构建的项目才会有此变量。 在使用`env变量`时,需要注意不同类型的项目,`env变量`所包含的属性及其值是不一样的。 比如普通 pipeline 任务中的 GIT BRANCH 变量的值为`origin/master`,而在多分支 pipeline 任务中 GIT BRANCH 变量的值为 master。 所以,在 pipeline 中根据分支进行不同行为的逻辑处理时,需要留意。 [#](#自定义变量) 自定义变量 ----------------- 1. pipeline 提供的 environment 指令中定义 ``` pipeline { agent any environment { // 覆盖默认的PATH变量值 PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin" name='jack' } stages { stage("test env") { steps { sh "printenv" #调试,打印所有env变量 echo "${name}" # jack echo "${env.name}" # jack } } } } ``` ``` pipeline { agent any environment { FOO = "bar" } stages { stage("Env Variables") { environment { NAME = "Alan" } steps { echo "FOO = ${env.FOO}" echo "NAME = ${env.NAME}" script { env.TEST_VARIABLE = "some test value" } echo "TEST_VARIABLE = ${env.TEST_VARIABLE}" withEnv(["ANOTHER_ENV_VAR=here is some value"]) { echo "ANOTHER_ENV_VAR = ${env.ANOTHER_ENV_VAR}" } } } } } ``` [#](#覆盖环境变量) 覆盖环境变量 ------------------- Jenkins Pipeline 支持覆盖环境变量。您需要注意一些规则。 * 使用`withEnv(["env=value]) { }`语句块可以覆盖任何环境变量。 * 使用`environment {}`语句块设置的变量不能使用命令式`env.VAR = "value"`赋值覆盖。 * 命令式`env.VAR = "value"`分配只能覆盖使用命令式创建的环境变量。 这是一个示例性的 Jenkinsfile,显示了所有三种不同的用例。 ``` pipeline { agent any environment { FOO = "bar" NAME = "Joe" } stages { stage("Env Variables") { environment { NAME = "Alan" // overrides pipeline level NAME env variable BUILD_NUMBER = "2" // overrides the default BUILD_NUMBER } steps { echo "FOO = ${env.FOO}" // prints "FOO = bar" echo "NAME = ${env.NAME}" // prints "NAME = Alan" echo "BUILD_NUMBER = ${env.BUILD_NUMBER}" // prints "BUILD_NUMBER = 2" script { env.SOMETHING = "1" // creates env.SOMETHING variable } } } stage("Override Variables") { steps { script { env.FOO = "IT DOES NOT WORK!" // it can't override env.FOO declared at the pipeline (or stage) level env.SOMETHING = "2" // it can override env variable created imperatively } echo "FOO = ${env.FOO}" // prints "FOO = bar" echo "SOMETHING = ${env.SOMETHING}" // prints "SOMETHING = 2" withEnv(["FOO=foobar"]) { // it can override any env variable echo "FOO = ${env.FOO}" // prints "FOO = foobar" } withEnv(["BUILD_NUMBER=1"]) { echo "BUILD_NUMBER = ${env.BUILD_NUMBER}" // prints "BUILD_NUMBER = 1" } } } } } ``` environment 指令可以用在 pipeline 中定义,作用域就是整个 pipeline,当定义在 stage 阶段,只在当前 stage 有效。 [#](#环境变量的互相引用) 环境变量的互相引用 ------------------------- ``` environment { __server_name = 'email-server' __version = "${BUILD_NUMBER}" __artifact_name = "${__server_name}-${__version}.jar" } ``` [#](#将布尔值存储在环境变量中) 将布尔值存储在环境变量中 ------------------------------- 关于使用环境变量,存在一种普遍的误解。存储为环境变量的每个值都将转换为 String。 当您存储布尔 false 值时,它将转换为 "false"。如果要在布尔表达式中正确使用该值,则需要调用`"false".toBoolean()method`。 ``` pipeline { agent any environment { IS_BOOLEAN = false } stages { stage("Env Variables") { steps { script { if (env.IS_BOOLEAN) { echo "You can see this message, because \"false\" String evaluates to Boolean.TRUE value" } if (env.IS_BOOLEAN.toBoolean() == false) { echo "You can see this message, because \"false\".toBoolean() returns Boolean.FALSE value" } } } } } } ``` [#](#使用sh捕获环境变量) 使用 sh 捕获环境变量 ----------------------------- 您还可以将 shell 命令的输出捕获为环境变量。 请记住,需要使用`sh(script: 'cmd', returnStdout:true)`格式来强制 sh 步骤返回输出,以便可以捕获它并将其存储在变量中。 ``` pipeline { agent any environment { LS = "${sh(script:'ls -lah', returnStdout: true)}" } stages { stage("Env Variables") { steps { echo "LS = ${env.LS}" } } } } ``` >TIP > 1. 在调试 pipeline 时,可以再开始阶段加一句 `sh 'printenv'` 将所有 env 变量打印出来。 > 2. 自定义变量时,为避免命名冲突,可根据项目或公司加上统一前缀,如`__server_name`,__就是前> 缀。 [#](#自定义全局环境变量) 自定义全局环境变量 ------------------------- 定义全局环境变量可以跨 pipeline 使用 进入 Jenkins -- Manage Jenkins -- 找到 Global properties -- 勾选 Environment variables ![](/media/202211/2022-11-29_092039_5063390.14201901501973135.png) 自定义全局环境变量会被加入 env 属性列表中,所以使用时可以直接用`${env.g_name}`引用。 [#](#脚本式pipeline) 脚本式 pipeline ------------------------- 上面的例子都是定义式 pipeline,下面的例子是脚本式 ``` node { /* .. snip .. */ withEnv(["PATH+MAVEN=${tool 'M3'}/bin"]) { sh 'mvn -B verify' } } ```
幻翼
Nov. 29, 2022, 9:42 a.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
share
link
type
password
Update password