如何通过手动单击或提交消息来触发作业

时间:2019-03-20 09:33:33

标签: gitlab gitlab-ci

我们有一份工作(部署到生产中),通常在检查过渡阶段后再手动单击。但是,有时候我们会偶然遇到一个问题,希望尽快解决。在这种情况下,我们在本地运行测试(速度更快),并将[urgent-fix]放入提交消息中,以停止以CI运行的测试(直接跳至Docker映像构建和暂存部署)。

我们想做的是,如果我们放置[urgent-fix],它将自动触发生产部署(通常是when: manual步骤)。我们可以以某种方式实现这一目标吗?

2 个答案:

答案 0 :(得分:3)

听起来像您可以使用only:variables语法和$CI_COMMIT_MESSAGE预定义变量的组合。

一个大概的想法(未经测试):

.deploy_production: &deploy_production
  stage: deploy production
  script:
    - echo "I'm deploy production here"
  tags:
    - some special tag

deploy::manual:
  << *deploy_production
  when: manual
  allow_failure: false

deploy:urgent_fix:
  << *deploy_production
  only:
    variables:
      - $CI_COMMIT_MESSAGE =~/[urgent-fix]/

答案 1 :(得分:0)

自GitLab v12.3起(截至2019年9月),GitLab随附"Flexible Rules for CI Build config"。该功能旨在替代only/except功能,并已完整记录here

借助rules:,您现在可以根据各种条件完全影响工作的when:行为(与only/except:相比,您不得不针对上述情况创建单独的工作)在OP中;请参阅接受的答案)。

例如,您可以这样做:

deploy:
  rules:
    - if: '$CI_COMMIT_TITLE =~ /urgent-fix/'
      when: on_success
    - when: manual # default fallback
  script:
    - sh deploy.sh

要强调的一件事是,在上面的示例中,我使用$CI_COMMIT_TITLE而不是$CI_COMMIT_MESSAGE(请参阅gitlab docs)来避免字符串“ urgent-fix”自动重新出现在提交消息中在git merge的过程中组装,然后会意外地重新触发作业。

免责声明:请注意,新的rules:功能与only/except:冲突,因此需要您删除only/except:个事件。另外,请注意,rules:仅应与docsworkflow:(阅读avoid unwanted "detached" pipelines being triggered)结合使用。