GitLab CI:避免每个作业重复 skip-ci

GitLab CI: avoid duplication of skip-ci for each job

目前,我在每个作业中复制有关 skip-ci 的信息,就像这样

job1:
  except:
    variables:
      - $CI_COMMIT_MESSAGE =~ /skip-ci/
    ...
job2:
  except:
    variables:
      - $CI_COMMIT_MESSAGE =~ /skip-ci/
    ...
job3:
  except:
    variables:
      - $CI_COMMIT_MESSAGE =~ /skip-ci/
    ...

有没有什么办法可以只写一次就适用于所有的工作?

在 GitLab 中有两种方法可以做到这一点:

工作继承

这是推荐的方法,因为它比 YAML 锚点更具可读性,并且您可以根据需要从多个作业进行扩展。在以下示例中,作业名称前面的句点导致 GitLab 隐藏作业,因此模板作业不会自行执行。

.skip-ci:
  except:
    variables:
      - $CI_COMMIT_MESSAGE =~ /skip-ci/

job1:
  extends: .skip-ci
    ...
job2:
  extends: .skip-ci
    ...
job3:
  extends: .skip-ci
    ...

YAML 锚点

为了完整起见,我已经包含了这种方法,但通常使用 extends.

几乎总是更好
.skip-ci: &skip-ci
  except:
    variables:
      - $CI_COMMIT_MESSAGE =~ /skip-ci/

job1:
  <<: *skip-ci
    ...
job2:
  <<: *skip-ci
    ...
job3:
  <<: *skip-ci
    ...

如果你不完全依赖 skip-ci,Gitlab 已经包含了这个逻辑: 根据 to the docs.

,当提交消息包含 [skip ci][ci skip] 时,将跳过管道