我可以在 Gitlab CI 变量块中使用变量扩展吗?
Can I use variable expansion in Gitlab CI variables block?
我的 git 提交标签的格式是 @org/service@v1.0.0
。在 Gitlab CI 中,这可以通过预定义变量 $CI_COMMIT_TAG
访问。是否可以仅提取版本号 - 在这种情况下为 v1.0.0
- 并通过 variables
块将其提供给作业?
像这样:
variables:
TAG: $(echo $CI_COMMIT_TAG | sed "s/.*@//")
遗憾的是,上面的方法不起作用,TAG 变量在连续作业中不存在。
另外,请注意我不能在before_script
中定义TAG,因为它来自外部文件通过include
指令。
您不能在 variables:
声明中调用 sed
或其他 utilities/shell 功能。
Also, please not that I'm not able to define TAG in the before_script as it comes from external file via include directive.
您始终可以覆盖作业的特定元素,即使它们来自 include:
included_job:
before_script:
- echo "overridden before_script"
- export TAG="$(echo $CI_COMMIT_TAG | sed "s/.*@//")"
# ...
另一种选择是通过artifacts:reports:dotenv
传递变量。接收此工件的所有作业都将在作业的 dotenv 文件中创建变量。
create-tag:
stage: .pre
script:
- TAG="$(echo $CI_COMMIT_TAG | sed "s/.*@//")"
- echo "TAG=${TAG}" > variables.env
artifacts:
reports:
dotenv: variables.env
我的 git 提交标签的格式是 @org/service@v1.0.0
。在 Gitlab CI 中,这可以通过预定义变量 $CI_COMMIT_TAG
访问。是否可以仅提取版本号 - 在这种情况下为 v1.0.0
- 并通过 variables
块将其提供给作业?
像这样:
variables:
TAG: $(echo $CI_COMMIT_TAG | sed "s/.*@//")
遗憾的是,上面的方法不起作用,TAG 变量在连续作业中不存在。
另外,请注意我不能在before_script
中定义TAG,因为它来自外部文件通过include
指令。
您不能在 variables:
声明中调用 sed
或其他 utilities/shell 功能。
Also, please not that I'm not able to define TAG in the before_script as it comes from external file via include directive.
您始终可以覆盖作业的特定元素,即使它们来自 include:
included_job:
before_script:
- echo "overridden before_script"
- export TAG="$(echo $CI_COMMIT_TAG | sed "s/.*@//")"
# ...
另一种选择是通过artifacts:reports:dotenv
传递变量。接收此工件的所有作业都将在作业的 dotenv 文件中创建变量。
create-tag:
stage: .pre
script:
- TAG="$(echo $CI_COMMIT_TAG | sed "s/.*@//")"
- echo "TAG=${TAG}" > variables.env
artifacts:
reports:
dotenv: variables.env