构建镜像并推送时镜像的版本号可以使用 ${CI_COMMIT_REF_NAME}
获取当前分支名称或 Tag 版本号,取决于如何触发流水线。使用 Tag 触发流水线,可以取到 Tag 版本号,但这个版本号前面通常带 v
(如 v1.0.2
),而 Docker 镜像版本号通常不带 v
。
云效流水线环境变量:https://help.aliyun.com/zh/yunxiao/user-guide/environment-variables
去除 Tag 版本号的前缀 v
echo "Tag version: ${CI_COMMIT_REF_NAME#v}"
TAG_NO_PREFIX=${CI_COMMIT_REF_NAME#v}
echo "Tag without prefix: ${TAG_NO_PREFIX}"
获取 pom.xml 版本号
如果想获取 pom.xml 里的 version 版本号。可以使用命令,通过执行 mvn 获取 pom.xml 里面的 version:
export VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
echo "pom.xml 版本号: $VERSION"
流水线环境变量传递
上述方式获取的环境变量值并不能给下一步骤使用,更不能给下一任务使用。也就是存在任务内和任务间共享变量的问题。
注意:在云效流水线里,不同的构建环境,设置环境变量的语法不同。分为 默认环境
指定容器环境和默认VM环境
,通常使用的是 指定容器环境
。
指定容器环境和默认VM环境
任务内共享:
echo "yaojia_Test=myParam" >> "$FLOW_ENV"
# 将获取到的 pom.xml 版本号放到环境变量
echo "VERSION=${VERSION}" >> "$FLOW_ENV"
任务间共享。完成上述环境变量注入后,添加步骤 > 工具 > 批量设置变量
,将环境变量设置为流水线级别。
默认环境
默认环境的语法为 echo 'USER_abc=123' > .env
。注意:在 .env 文件中的环境变量需要以 USER_
开头。其它和 指定容器环境和默认VM环境
的一样。
echo 'USER_abc=123' > .env
# 将获取到的 pom.xml 版本号放到环境变量
echo "VERSION=${VERSION}" > .env