gitlab - 通过 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 构建。
解决方案
将以下工作流添加到.gitlab-ci.yml
创建标签时禁用 CI/CD:
workflow:
rules:
- if: $CI_COMMIT_TAG
when: never
- when: always
这将在设置 CI_COMMIT_TAG 时有效地禁用 CI/CD(通常是在由于创建标签而触发构建时)。
推荐阅读
- javascript - 从 Ext.tree.Panel 中获取选定的条目
- c++ - tao_idl -Gstl 不映射 std::string
- google-cloud-platform - 对于参考和参考信息,谷歌的基本技术有哪些?
- css - 根据道具长度反应样式宽度
- javascript - 从静态方法中创建实例
- java - 克服非常长的 JSON 字符串?
- vue.js - 在鼠标移动时更新的 Vue.js 组件之间共享状态
- javascript - 如何在javascript中精确地时间对齐鼠标事件和录音事件?
- webpack - 如何将有效的 webpack 构建配置打印到控制台?
- javascript - Websockets - 多种消息类型