【问题标题】:How can I trigger a job with a manual click OR a commit message如何通过手动单击或提交消息触发作业
【发布时间】:2019-03-20 09:33:32
【问题描述】:

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

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

【问题讨论】:

    标签: gitlab gitlab-ci


    【解决方案1】:

    听起来您可以结合使用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]/
    

    【讨论】:

    • 太完美了,谢谢!我们已经使用了模板部分,所以我应该想到这一点!
    【解决方案2】:

    从 GitLab v12.3 开始(~2019 年 9 月)GitLab 附带 "Flexible Rules for CI Build config"。该功能旨在取代 only/except 功能,并已完整记录在 here

    使用rules:,您现在可以根据各种条件完全影响您的工作的when: 行为(与only/except: 形成对比的是,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: 只能与workflow: 结合使用(阅读docs)至avoid unwanted "detached" pipelines being triggered

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多