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

时间:2020-04-22 05:04:56

标签: gitlab gitlab-ci

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

第一个是从 any git分支手动编译发行版。

deploy_internal:
  stage: deploy
  script: ....<deploy code>
  when: manual

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

scheduled_deploy_internal:
  stage: deploy
  script: ....<deploy code from deploy_internal copy/pasted>
  only: 
      variables:
          - $MY_DEPLOY_INTERNAL != null

让所有部署代码在两个地方重复出现,这是错误的。情况变得更糟。也有deploy_external,deploy_release和计划的变体。

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

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

编辑:
原始标题:部署作业。手动执行,除非已安排

1 个答案:

答案 0 :(得分:4)

您可以使用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

或者您可以使用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