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

标签 gitlab gitlab-ci

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

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

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

第二个是由调度程序用来从开发分支发布每日构建。
scheduled_deploy_internal:
  stage: deploy
  script: ....<deploy code from deploy_internal copy/pasted>
  only: 
      variables:
          - $MY_DEPLOY_INTERNAL != null

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

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

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

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

最佳答案

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

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

关于gitlab - 如何在 .gitlab-ci.yml 中重用作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61357650/

相关文章:

gitlab - 如何使一个阶段依赖于另一个阶段?

dns - 如何设置DNS,让一个gitlab页面的根域和子域指向同一个地址?

docker - ERROR : Registering runner. 禁止(检查注册 token )

docker - gitlab-ci 如何在内部与 gitlab runner 一起工作?

git - Gerrit复制到gitlab失败

ruby-on-rails - Gitlab CI 设置错误 - 找不到 JavaScript 运行时

GitLab git 用户密码

Gitlab 片段文件访问

docker - 如何在Docker容器中运行已安装的Shell脚本?

continuous-integration - Gitlab CI .gitlab-ci.yml 只测试某些分支