环境变量是实现流水线过程定制化的一种常见方法,可以在流水线的任何阶段使用。本文介绍流水线环境变量,包括内置变量、自定义变量、通用变量组,以及如何在流水线中使用变量。
环境变量来源
内置变量
云效流水线提供流水线基本信息、代码源相关内置变量,帮助定制化流程,可按需直接使用。
功能模块 | 环境变量名 | 说明 |
基本信息 | PIPELINE_ID | 流水线 ID |
BUILD_NUMBER | 流水线的运行编号,从1开始,按自然数自增 | |
PIPELINE_NAME | 流水线名称,如:前端项目发布 | |
BUILD_REMARK | 流水线运行备注 | |
BUILD_EXECUTOR | 流水线触发人,如:张三 | |
BUILD_MESSAGE | 流水线触发信息,如:张三·页面手动触发 | |
PROJECT_DIR | 运行命令的工作目录,如:/root/workspace/1084-abc_docker-08191_b0wE | |
DATETIME | 当前时间,如:2017-06-22-23-26-33 | |
TIMESTAMP | 当前时间戳,如:1581581273232 | |
代码源(单个) | CI_SOURCE_NAME | 代码源名称 |
CI_COMMIT_REF_NAME | 代码源的分支名或者 Tag 名(根据用户运行时选择),如:master or V1.0 | |
CI_COMMIT_TITLE | 最后一次提交的提交信息 | |
CI_COMMIT_SHA | 最后一次提交的代码版本的 commit ID:如2bfb63d779e3648c91950f82d374a25784cdabaf | |
CI_COMMIT_ID | 最后一次提交的代码版本的 8 位 commit ID(Git场景) 最后一次提交的代码版本的 Revision(SVN场景) | |
代码源 (多个) | CI_SOURCE_NAME_n | 第n个代码源名称 |
CI_COMMIT_REF_NAME_n | 第n个代码源的分支名或者 Tag 名(根据用户运行时选择),如:master or V1.0 | |
CI_COMMIT_TITLE_n | 第n个代码源的最后一次提交的提交信息 | |
CI_COMMIT_SHA_n | 第n个代码源的最后一次提交的代码版本的 commit ID:如2bfb63d779e3648c91950f82d374a25784cdabaf | |
CI_COMMIT_ID_n | 第n个代码源的最后一次提交的代码版本的 8 位 commit ID | |
制品源 | CI_SOURCE_NAME | 制品源名称 |
CI_SOURCE_URL | 制品源地址,如:https://packages.aliyun.com/generic/flow_generic_repo/artifacts?artifactName=Artifacts_2778530&version=2024-01-05-16-28-23 | |
CI_VERSION_NAME | 制品源的版本号名(根据用户运行时选择),如:2024-01-05-16-28-23 |
当流水线配置了多个代码源或制品源时,不同代码源或制品源信息可以通过变量名+数字后缀(第n个代码源)获取。下图环境变量依次为:第1个源,Git类型代码源环境变量;第2个源,制品源环境变量;第3个源,SVN类型代码源环境变量。
自定义变量
除了流水线内置变量外,云效Flow还支持用户自定义流水线变量,用于满足更多定制化场景。流水线内自定义变量生效范围仅限本流水线。选中流水线,点击编辑,点击变量和缓存。云效Flow支持字符串和枚举两种类型变量。
字符变量
在流水线变量和缓存 > 字符变量处,单击 新建变量,打开新建变量弹窗。
输入变量名称和默认值,可以设置私密模式和运行时设置。
变量名称:注意环境变量名称不可使用横杠符号 - 。
私密模式:控制变量是否对外公开。当变量设置为私密模式后,将无法查看变量的值,相应的执行日志中也不会显示。通常适用于用户名,密码等私密信息场景。
运行时设置:控制变量值是否需要在流水线运行时设置。当变量设置为运行时设置后,流水线运行时需要设置变量的值。通常适用于需要动态配置流水线参数值场景。
可以添加更多变量,也可以删除变量。
单击添加后,需要保存流水线才可以将变量保存至流水线。保存完毕后即可按场景 使用环境变量。
运行选择变量
在流水线变量和缓存 > 运行选择变量处,单击 新建变量,打开新建变量弹窗。
输入变量名称和选项。
单击添加选项可以为变量取值添加多个选项。
选项打开默认值则该选项为该变量的默认取值。
单击添加后,需要保存流水线才可以将变量保存至流水线。保存完毕后即可按场景 使用环境变量。
在流水线点击运行时需要选择变量取值。
通用变量组
通用变量组是组织统一管控的通用环境变量,用组织统一管理。流水线可以关联通用变量组使用。
在流水线变量和缓存 > 通用变量组处,单击 关联变量组,下拉选择变量组,单击 确定 即可关联变量组到本流水线。
在流水线通用变量组处可以查看流水线关联的通用变量组,可以查看变量组详情,可以解除变量组关联。保存完毕后即可按场景 使用环境变量。
使用环境变量
上述变量定义好后,可在流水线任意需要使用环境变量的地方通过${XXX}
引用变量。变量生效逻辑如下:
变量优先级:步骤输出变量 > 流水线运行时输入变量 > 流水线变量 > 通用变量组。
同一流水线关联多个通用变量组,变量组中变量名称重复的,以后关联的变量组取值为准。
以下举几个典型的使用环境变量场景,如执行命令、主机部署、镜像构建参数、配置文件参数、环境变量传递等使用环境变量场景。
执行命令使用变量
将配置文件a.conf
中的 key 的参数值,从123
更改为变量名称为abc
的环境变量值。
主机部署使用变量
可以在部署脚本中直接通过${XXX}
引用环境变量控制主机部署逻辑。运行流水线后,在主机部署步骤的日志中查看。
镜像构建参数使用变量
镜像构建时如需使用流水线环境变量作为构建参数,则可按照以下方式进行配置。
在镜像构建步骤中使用默认构建环境,在构建参数中添加自定义参数,通过
${XXX}
形式将环境变量赋值给构建参数。构建参数会以--build-arg
的形式传递到build命令的参数中。
在 Dockerfile 中,通过
ARG argName
引用变量。
配置文件参数使用变量
如果您的配置文件中某个参数,需要通过环境变量进行修改,例如:代码库配置文件a.conf
中有参数username
,希望用流水线的环境变量进行替换,则可按照以下方式进行配置。
修改配置文件
a.conf
中内容username = ${abc}
。将
abc
的参数值配置在流水线的环境变量中,默认值设置为my_name_is_hanmeimei
。在流水线中添加任务,在工具中找到并添加替换文件中的环境变量 步骤,填写配置文件的源文件路径。目标文件路径非必填(如果填写了目标文件路径,则会生成一个新的配置文件;不填写则直接修改原文件)。
查看修改效果如下:
a.conf
中的username
被修改为b.conf
中的my_name_is_hanmeimei
。注意:因为 Flow 流水线同一个任务才会共享工作区,因此修改配置文件变量步骤需要和您后续使用配置文件的步骤放在该流水线的同一个任务中。
环境变量传递
在流水线配置页定义的环境变量为预置的固定环境变量,在流水线实际运行过程中,会出现以流水线运行时的输出定义的环境变量,并将其传递给后续的步骤或任务中使用的场景。对应场景有以下两种:
任务内环境变量传递:步骤一生成自定义环境变量 -> 步骤二使用。
任务间环境变量传递:任务一生成环境变量 -> 任务二使用。
值得注意的是,在使用不同构建环境时需要使用不同的语法。
默认环境
任务内环境变量传递
这种场景主要是单个任务节点内的环境变量共享,比如步骤一生成变量USER_abc=123,步骤二通过 ${USER_abc} 引用。
您可以在前序步骤中通过echo 'USER_abc=123' > .env
将环境变量输出到.env
中完成环境变量注入。注意:在.env文件中的环境变量需要以USER_开头。
任务间环境变量传递
这种场景主要是流水线内多个任务节点之间的环境变量共享,比如任务一生成变量 USER_abc=123,任务二通过 ${USER_abc} 引用。
您可以在任务一的步骤中通过将环境变量输出到
.env
中完成环境变量注入。在任务一中添加步骤-选择工具中的“设置变量”,将环境变量设置为流水线级别的环境变量。
在任务二中通过 ${USER_abc} 使用该环境变量。
指定容器环境或默认VM环境
任务内环境变量传递
这种场景主要是单个任务节点内的环境变量共享,比如步骤一生成变量 yaojia_Test=myParam,步骤二通过 ${yaojia_Test} 引用。
您可以在前序步骤中通过echo "yaojia_Test=myParam" >> "$FLOW_ENV"
将环境变量输出到$FLOW_ENV
中完成环境变量注入。
任务间环境变量传递
这种场景主要是流水线内多个任务节点的环境变量共享,比如任务一生成变量 yaojia_Test=myParam,任务二通过 ${yaojia_Test} 引用。
您可以在任务一的步骤中通过将环境变量输出到
$FLOW_ENV
中完成环境变量注入。在任务一中添加步骤-选择工具中的“批量设置变量”,将环境变量设置为流水线级别的环境变量。
在任务二中通过 ${yaojia_Test} 使用该环境变量。