在 job.<spec>.script 中使用 anchors/references 的方法

Way to use anchors/references in job.<spec>.script for DRYness

我对使用 gitlab-ci 还很陌生,因此,我 运行 遇到以下问题 ci-lint 因为我使用了 anchors/references:


image: docker:latest

services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_HOST: tcp://localhost:2375

.install_thing1: &install_thing1
  - do things
  - to install
  - thing1

.install_thing2: &install_thing2
  - do things to
  - install thing2

.setup_thing1: &setup_things1
  variables:
    VAR: var
    FOO: bar
  script:
    - all
    - the
    - things

before_script:
...

stages:
  - deploy-test
  - deploy-stage
  - deploy-prod

test:
  stage: deploy-test
  variables:
    RUN_ENV: "test"
...
  only:
    - tags
    - branches
  script:
    - *install_thing1
    - *install_thing2
    - *setup_thing1
    - other stuff
...

test:
  stage: deploy-stage
  variables:
    RUN_ENV: "stage"
...
  only:
    - master
  script:
    - *install_thing1
    - *install_thing2
    - *setup_thing1
    - other stuff

当我尝试检查 gitlab-ci.yml 时,出现以下错误:

Status: syntax is incorrect 
Error: jobs:test:script config should be a string or an array of strings

错误只是因为 script 片段需要一个数组,我相信我有。使用 <<: *anchor pragma 也会导致错误。

那么,如何在不必在每个块中重复代码的情况下完成我在这里尝试做的事情?

你可以修复它,甚至让它更干,看看 the Auto DevOps template Gitlab created

它可以解决您的问题,甚至可以进一步改进您的 CI 文件,只需在脚本块中有一个类似于他们的 auto_devops job, include it in a before_script and then you can combine and call multiple functions 的模板作业。

锚点只能给你有限的灵活性。

(这个概念使我有可能拥有一个 CI 文件用于 20 多个项目和一个集中的功能文件 wget 并加载到我的 before_script。)