web-dev-qa-db-ja.com

gitlab ci:手動またはマスターのみの場合にビルドジョブを実行します

次の要件で定義されたビルドジョブがあるgitlab-ciファイルを持つことは可能ですか?

  • 手動ORの場合に実行される
  • マスタープッシュによって実行されます

私はこのようなことを考えましたが、これはほとんど間違っています:

build_jar:
stage: build
script:
  - echo "build jar"
artifacts:
  paths:
    - jar/path/*.jar
only:
  - master
when: manual

私にとって唯一の解決策は、マスタープッシュ用と手動入力用の2つのジョブを持つことです。しかし、不利な点は、gitlabでは混乱を招くことです

16
toni_maccaroni

また、1つのブロックでこれを行う方法を見つけられず、yamlアンカーを使用して、2つの別々のブロックに分割する必要がありました。

.deploy_common: &deploy_common
# common config HERE

deploy_master_CD:
  <<: *deploy_common
  only:
    refs:
      - master

deploy_manual:
  <<: *deploy_common
  when: manual
15
lukmdo

自分でこの問題を抱えていたが、最終的にそれを見つけた(またはとにかく私のニーズに合った実行可能なバージョンを見つけた):

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 /

これがお役に立てば幸いです!

4
Drew Tabor

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
mrts

あなたが望む正確なことは、現時点では不可能です。 2つのジョブ(1つはonly: masterとその他のwhen: manualは代替手段を提供する必要があります。

もしあなたがそれらを同じ段階に置くなら、それは私が推測することを混乱させるべきではありません。

[〜#〜] dry [〜#〜] に留まるために anchors のような 特別なyaml機能 を使用することもできます。

1