首页 > 解决方案 > 通过 API 创建标签或发布时如何防止触发 CI/CD

问题描述

我已经通过 GitLab CI/CD 启用了自动发布生成。我正在使用这样的东西:

curl --header "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" \
     --data "{ \
       \"name\": \"$GV_SEMVER\", \
       \"tag_name\": \"$GV_SEMVER\", \
       \"ref\": \"$CI_COMMIT_SHA\", \
       \"assets\": { \"links\": [ \
         {\"name\": \"File\", \"url\": \"https://download.example.com/package-$SEMVER.zip\", \"filepath\": \"/package.zip\", \"link_type\": \"other\"}
       ] } }" \
     --request POST "$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases"

GITLAB_ACCESS_TOKEN正确注入,它会创建一个标签并生成发布。虽然这很好,但是标签的创建再次触发了新的管道。

我还尝试使用以下方法(它没有在 API 请求期间指定提交 SHA):

git tag $GV_SEMVER
git push --push-option=ci.skip --tags http://root:$GITLAB_ACCESS_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:$CI_COMMIT_BRANCH
curl --header "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" \
     --data "{ \
       \"name\": \"$GV_SEMVER\", \
       \"tag_name\": \"$GV_SEMVER\", \
       \"assets\": { \"links\": [ \
         {\"name\": \"File\", \"url\": \"https://download.example.com/package-$SEMVER.zip\", \"filepath\": \"/package.zip\", \"link_type\": \"other\"}
       ] } }" \
     --request POST "$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases"

git push新标签推送到 GIT,该ci.skip选项会阻止新的 CI 构建。但是当我有一个更长的管道时,那么有些人可能已经推送了数据并且git push失败了。我宁愿使用 API,但我需要一种方法来禁用 CI 构建。

标签: gitlabgitlab-cigitlab-api

解决方案


将以下工作流添加到.gitlab-ci.yml创建标签时禁用 CI/CD:

workflow:
  rules:
    - if: $CI_COMMIT_TAG
      when: never
    - when: always

这将在设置 CI_COMMIT_TAG 时有效地禁用 CI/CD(通常是在由于创建标签而触发构建时)。


推荐阅读