如果文件没有更改并且该作业的最后一个管道成功,则跳过 gitlab 管道作业

时间:2021-05-17 01:51:52

标签: gitlab continuous-integration gitlab-ci continuous-delivery

我有一个以这种方式配置的 Gitlab 管道:构建 >> 测试 >> 发布

我想要实现的是:

跳过测试如果:

  1. 同一分支的测试作业在同一分支运行的最后一个管道中成功并且;
  2. 某些文件没有变化

在以下情况下也总是运行测试:

  1. 同一分支的测试作业在同一分支运行的最后一个管道中失败或;
  2. 这是它第一次在同一个分支上运行(没有以前的管道),或者;
  3. 某些文件有变化(与上面相同的文件)

这可能吗?如果是,如何?

1 个答案:

答案 0 :(得分:0)

如果您不介意使用其他工具,我们通过 Reliza Hub 为任何 CI/CD 支持此功能(免责声明:我正在开发该工具)。

本质上,您将添加一些 yaml,如下所示(这是来自正在构建舵图的演示项目之一的工作示例):

         - # get latest completed release to see if there are diffs in helm chart
         - do_helm_release="true"
         - last_commit=$(docker run --rm relizaio/reliza-cli getlatestrelease -i $RELIZA_API_ID -k $RELIZA_API_KEY --branch $CI_COMMIT_REF_NAME| jq -r ".sourceCodeEntryDetails.commit")
         - if [ ! -z "$last_commit" ]; then changes=$(git log $last_commit..$CI_COMMIT_SHA helm/ | wc -l); if [ $changes -eq 0 ]; then do_helm_release="false"; fi; fi
         - echo "do helm release = $do_helm_release"
         - if [ "true" == "$do_helm_release" ]; then ...

稍后在您的 yaml 中,您将向 Reliza Hub 提交发布详细信息。这是一个基本示例 - https://github.com/relizaio/reliza-hub-integrations/blob/master/GitLab/standard-docker-registry/.gitlab-ci.yml

Reliza Hub 会自动丢弃任何失败的发布,因此您只会与成功的发布进行 Git 比较。

如果您想要构建但跳过测试,您可以利用批准逻辑,其中自动化流程设置某些批准,然后您仅获得具有某些所需批准的构建以进行比较。请参阅此处了解更多详情 - https://worklifenotes.com/2020/04/09/approvals-for-any-ci-cd-in-reliza-hub-demo-video/

Reliza Hub 的社区支持 - https://discord.gg/UTxjBf9juQ