为什么嵌套参数扩展在 GitLab CI/CD 中不能正常工作?

Why doesn't nested parameter expansion work correctly in GitLab CI/CD?

使用 bash 转轮,是否有任何原因导致以下变量扩展不起作用?

variables:
  GIT_BRANCH: "${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME:-${CI_COMMIT_BRANCH:-$CI_DEFAULT_BRANCH}}"

job1:
  script:
    - echo $GIT_BRANCH

作业输出 }

我使用的是 GitLab 企业版 14.1.8-ee。

这些扩展是由 GitLab CI 完成的,而不是由 bash 完成的,因此它们可能无法像 bash 那样稳健地处理嵌套扩展。

他们可能认为变量名是下一个 } 之前的所有内容,所以 CI_MERGE_REQUEST_SOURCE_BRANCH_NAME:-${CI_COMMIT_BRANCH:-$CI_DEFAULT_BRANCH 没有右大括号。这可以解释为什么尘埃落定后会有剩余 }

Gitlab 变量无法执行 bash 操作,您在这里尝试。

Gitlab 懂了${VARIABLE_NAME}

你的情况

${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME:-${CI_COMMIT_BRANCH:-$CI_DEFAULT_BRANCH}}

Gitlab 试图找到变量 CI_MERGE_REQUEST_SOURCE_BRANCH_NAME:-${CI_COMMIT_BRANCH:-$CI_DEFAULT_BRANCH}

但是这个变量不存在,所以只输出}

如其他答案所述,此语法不会扩展您的预期。作为解决方法,您可以使用 rules:variables: 来获得相同的效果。

my_job:
  rules:
    - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME'
      variables:
        GIT_BRANCH: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
    - if: '$CI_COMMIT_BRANCH'
      variables:
        GIT_BRANCH: $CI_COMMIT_BRANCH
    - when: on_success
  variables:
    GIT_BRANCH: $CI_DEFAULT_BRANCH

您也可以考虑使用 export 在作业脚本中直接设置变量。然后 bash 变量扩展将按预期工作。