【问题标题】:Gitlab CI conditionally override a template variable based on which files were changes in a MRGitlab CI 根据 MR 中更改的文件有条件地覆盖模板变量
【发布时间】:2022-07-15 06:14:16
【问题描述】:

我的模板如下所示:

/templates/.copy-echo.yml:

workflow:
  rules:
    - if: '$CI_COMMIT_REF_NAME == "master"'

variables:
  FILE_PATH: /test_conf_1.txt
  DESTINATION_HOST: somehost

stages:
  - copy
  - echo

copy step 1/2:
  rules:
    - changes:
        - ${FILE_PATH}
  stage: copy
  script: |
    echo "Add copy here!"

copy step 2/2:
  rules:
    - changes:
        - ${FILE_PATH}
  stage: echo
  script: |
    printenv
    echo ${DESTINATION_HOST}

现在在我的.gitlab-ci.yml

include: '/templates/copy-echo.yml'

variables:
  FILE_PATH: /test_conf_1.txt
  DESTINATION_HOST: somehost2

现在我想要的是有条件地为 DESTINATION_HOST 变量分配一个值,具体取决于合并请求中更改了哪个文件。

例如如果合并请求对文件test_conf_2.txt 进行了更新,则DESTINATION_HOST 的值应为somehost2,如果合并请求对文件test_conf_3.txt 进行了更新,则DESTINATION_HOST 的值应为somehost3

有可能实现吗?

【问题讨论】:

    标签: gitlab-ci


    【解决方案1】:

    您可以使用rules:variableshttps://docs.gitlab.com/ee/ci/yaml/#rulesvariables
    示例:

    my job:
      script: printenv
      rules:
        - if: $CI_PIPELINE_SOURCE == "merge_request_event"
          changes:
            - test_conf_2.txt
          variables:
            DESTINATION_HOST: "somehost2"
        - if: $CI_PIPELINE_SOURCE == "merge_request_event"
          changes:
            - test_conf_3.txt
          variables:
            DESTINATION_HOST: "somehost3"
    

    但是如果你手动启动管道它不起作用:

    您应该使用规则:仅使用分支管道或合并进行更改 请求管道。您可以使用规则:使用其他管道进行更改 类型,但规则:当没有变化时,变化总是评估为真 Git 推送事件。标记管道、预定管道、手动管道、 等等没有与之关联的 Git 推送事件。一个规则: 如果没有,则始终将更改作业添加到这些管道中 将作业限制为分支或合并请求管道。

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 2017-09-25
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 2018-06-07
      • 1970-01-01
      相关资源
      最近更新 更多