次の要件で定義されたビルドジョブがあるgitlab-ciファイルを持つことは可能ですか?
私はこのようなことを考えましたが、これはほとんど間違っています:
build_jar:
stage: build
script:
- echo "build jar"
artifacts:
paths:
- jar/path/*.jar
only:
- master
when: manual
私にとって唯一の解決策は、マスタープッシュ用と手動入力用の2つのジョブを持つことです。しかし、不利な点は、gitlabでは混乱を招くことです
また、1つのブロックでこれを行う方法を見つけられず、yamlアンカーを使用して、2つの別々のブロックに分割する必要がありました。
.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で結合されているため、masterブランチ上またはWebから開始されたときにジョブを実行します(私の場合は「manual」と交換可能)。これは「when:manual」のようにパイプラインを一時停止しませんが、とにかくそれを行わせたくありませんでした。
ここにドキュメントがあります: https://docs.gitlab.com/ee/ci/yaml/#only-and-except-complex および https://docs.gitlab.com/ee/ci/variables /
これがお役に立てば幸いです!
GitLab 11.3で extends
構成パラメーター を使用すると、2つのジョブを簡単に定義できます。 YAMLアンカーを使用する代わりに、もう少し柔軟で読みやすいです。
.deploy_common:
# common config
deploy_master_CD:
extends: .deploy_common
only:
refs:
- master
deploy_manual:
extends: .deploy_common
when: manual
あなたが望む正確なことは、現時点では不可能です。 2つのジョブ(1つはonly: master
とその他のwhen: manual
は代替手段を提供する必要があります。
もしあなたがそれらを同じ段階に置くなら、それは私が推測することを混乱させるべきではありません。
[〜#〜] dry [〜#〜] に留まるために anchors のような 特別なyaml機能 を使用することもできます。