我可以在 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