如何在 .gitlab-ci.yml 中重用作业

Vap*_*olf 7 gitlab gitlab-ci

我目前在我的 CI 文件中有两个几乎相同的工作。

第一个用于从任何git 分支手动编译发布版本。

deploy_internal:
  stage: deploy
  script: ....<deploy code>
  when: manual
Run Code Online (Sandbox Code Playgroud)

第二个是由调度程序用来从开发分支发布每日构建。

scheduled_deploy_internal:
  stage: deploy
  script: ....<deploy code from deploy_internal copy/pasted>
  only: 
      variables:
          - $MY_DEPLOY_INTERNAL != null
Run Code Online (Sandbox Code Playgroud)

在两个地方重复所有部署代码感觉是错误的。它变得更糟。还有deploy_external、deploy_release 和scheduled 变体。

我的问题:有没有一种方法可以组合deploy_internalscheduled_deploy_internal保留手动/计划行为(基本上是 DRY)?

或者:有没有更好的方法来安排我的工作?

编辑:
原标题:部署作业。手动执行,除非在预定的时候

Mur*_*ati 15

您可以使用 YAML 锚点和别名来重用脚本。

deploy_internal:
  stage: deploy
  script:
    - &deployment_scripts |
      echo "Deployment Started"
      bash command 1
      bash command 2
  when: manual

scheduled_deploy_internal:
  stage: deploy
  script:
    - *deployment_scripts
  only:
    variables:
      - $MY_DEPLOY_INTERNAL != null
Run Code Online (Sandbox Code Playgroud)

或者您可以使用extends关键字。

.deployment_script:
  script:
    - echo "Deployment started"
    - bash command 1
    - bash command 2

deploy_internal:
  extends: .deployment_script
  stage: deploy
  when: manual

scheduled_deploy_internal:
  extends: .deployment_script
  stage: deploy
  only:
    variables:
      - $MY_DEPLOY_INTERNAL != null
Run Code Online (Sandbox Code Playgroud)