我们有一份工作(部署到生产中),通常在检查过渡阶段后再手动单击。但是,有时候我们会偶然遇到一个问题,希望尽快解决。在这种情况下,我们在本地运行测试(速度更快),并将[urgent-fix]
放入提交消息中,以停止以CI运行的测试(直接跳至Docker映像构建和暂存部署)。
我们想做的是,如果我们放置[urgent-fix]
,它将自动触发生产部署(通常是when: manual
步骤)。我们可以以某种方式实现这一目标吗?
答案 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:
仅应与docs的workflow:
(阅读avoid unwanted "detached" pipelines being triggered)结合使用。