推送新分支GitLab

6l7fqoea  于 2023-06-28  发布在  Git
关注(0)|答案(1)|浏览(111)

我有这样的GitlabCI。

STAGE:
  stage: deploy
  image:
    name: bitnami/kubectl:1.26
    entrypoint: [""]
  script:
     ...
  rules:
    - changes:
      - .gitlab-ci.yml
    when: never
    - if: $CI_COMMIT_REF_NAME =~ /^release\/\d+\.\d+\.\d+$/

这个任务是针对像release/x.y. z这样的分支的。问题是当我第一次推送分支时,CI不会被触发。正如我从GitLab日志中看到的,它将分支的最后一次提交与空提交(0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000但如果它是在分支第一次被推时触发的话就好了。这种情况下的最佳做法是什么?
我希望在第一次按下分支时触发CI。

aemubtdh

aemubtdh1#

尝试将when: always添加到规则中:

STAGE:
  stage: deploy
  image:
    name: bitnami/kubectl:1.26
    entrypoint: [""]
  script:
    ...
  rules:
    - changes:
      - .gitlab-ci.yml
      when: never
    - if: '$CI_COMMIT_REF_NAME =~ /^release\/\d+\.\d+\.\d+$/'
      when: always

实际上,当它比较最后一次提交和空提交时,CI文件是新的,并且发生了“更改”条件,它将 * 不 * 寻找第二个条件。
第一条规则中的changes子句可能确实导致了这个问题。当您推送一个新分支时,.gitlab-ci.yml文件在该分支的上下文中被认为是新的,并且when: never的第一个规则优先。
所以:

  • 我们将显式地包括对空提交SHA的检查,以确保该规则在第一次推送时不会阻止CI。
  • 我们将对分支模式使用单个规则,而不涉及changes子句。
STAGE:
  stage: deploy
  image:
    name: bitnami/kubectl:1.26
    entrypoint: [""]
  script:
    ...
  rules:
    - if: '$CI_COMMIT_REF_NAME =~ /^release\/\d+\.\d+\.\d+$/ || ($CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000" && $CI_COMMIT_REF_NAME =~ /^release\/\d+\.\d+\.\d+$/)'
      when: always

此配置使用一个规则来确保为匹配release/x.y.z模式的分支触发管道。
它还包括对空提交SHA的显式检查,并结合分支模式检查。
这应满足以下两种情况:新分支的第一次推送和随后的推送。

相关问题