web-dev-qa-db-ja.com

gitlab ciでif-else条件を使用する方法

Gitlab-CI内で他に条件がある場合の使用方法。

私は以下のコードを持っています:

deploy-dev:
  image: testimage
  environment: dev
  tags:
    - kubectl
  script:
   - kubectl apply -f demo1 --record=true
   - kubectl apply -f demo2 --record=true

次のような条件を追加したい

script:
    - (if [ "$flag" == "true" ]; then kubectl apply -f demo1 --record=true; else kubectl apply -f demo2 --record=true);

誰かが同じための正しい構文を提供できますか? gitlabciの条件(if-else、forループ)に関するドキュメントはありますか?

26
Vikas Rathore

以下に、そのようなステートメントの3つの構文オプションを示します。

シェル変数の使用

deploy-dev:
image: testimage
environment: dev
tags:
 - kubectl
script:
 - if [ "$flag" == "true" ]; then MODULE="demo1"; else MODULE="demo2"; fi
 - kubectl apply -f ${MODULE} --record=true

Yaml multilineブロックの使用

deploy-dev:
image: testimage
environment: dev
tags:
  - kubectl
script:
  - >
    if [ "$flag" == "true" ]; then
      kubectl apply -f demo1 --record=true
    else
      kubectl apply -f demo2 --record=true
    fi

Gitlabテンプレートと変数の使用

demo1-deploy-dev:
extends: .deploy-dev
only:
  variables: [ $flag == "true" ]
variables:
MODULE: demo1

demo2-deploy-dev:
extends: .deploy-dev
only:
  variables: [ $flag == "false" ]
variables:
  MODULE: demo2

.deploy-dev:
image: testimage
environment: dev
tags:
  - kubectl
script:
  - kubectl apply -f ${MODULE} --record=true
49
Xavier D

セミコロンを追加し、最後に「fi」を閉じる必要があると思います。ドキュメントへのリンクが見つかりませんでした。

script:
    - (if [ "$flag" == "true" ]; then kubectl apply -f demo1 --record=true; else kubectl apply -f demo2 --record=true; fi);
2
Amina Mansour

rules の確認を検討してください。

これにより、個別のルールオブジェクトのリストを順番に評価して、1つが一致し、ジョブに動的に属性を提供できるようになります。

使用可能なルール句は次のとおりです。

  • if(similar to only:variables)
  • 変更(のみと同じ:変更)
  • 存在する

例:

job:
  script: "echo Hello, Rules!"
  rules:
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"'
      when: always
    - if: '$VAR =~ /pattern/'
      when: manual
    - when: on_success
0
Arihant Godha