是否可以使用以下要求定义构建作业的gitlab-ci文件:
我想到了类似的东西,但这是错误的:
build_jar:
stage: build
script:
- echo "build jar"
artifacts:
paths:
- jar/path/*.jar
only:
- master
when: manual
对我来说,唯一的解决方案是拥有两个作业,一个用于主推,一个用于手动输入。但缺点是,在gitlab中它变得令人困惑
我也没有找到一种方法在一个块中执行此操作,并且必须使用yaml锚点并拆分为两个单独的块:
.deploy_common: &deploy_common
# common config HERE
deploy_master_CD:
<<: *deploy_common
only:
refs:
- master
deploy_manual:
<<: *deploy_common
when: manual
自己遇到这个问题,最终想出来了(或者根据我的需要想出了一个可行的版本):
build_jar:
stage: build
script:
- echo "build jar"
artifacts:
paths:
- jar/path/*.jar
only:
variables:
- $CI_PIPELINE_SOURCE == "web"
- $CI_COMMIT_REF_NAME == "master"
变量块下的条件一起进行OR运算,因此当它在主分支上或从Web启动时可以运行作业(在我的情况下可以与'manual'互换)。这不会像'when:manual'那样暂停管道,但我不想让它做到这一点。
以下是文档:https://docs.gitlab.com/ee/ci/yaml/#only-and-except-complex和https://docs.gitlab.com/ee/ci/variables/
希望这有帮助!
你想要的确切的东西目前是不可能的。虽然这两个工作(一个与only: master
,另一个与when: manual
应该提供替代。
如果你把它们放在同一个阶段我猜不应该那么混乱。
你也可以使用像special yaml features这样的anchors来保持DRY。