web-dev-qa-db-ja.com

gitlab CIで特定のジョブを実行する方法

Gitlab CIで特定のジョブを1つ実行する必要があるという問題に直面しています。現在、この問題の解決方法はわかりません。 .gitlab-ci.ymlには複数のジョブが定義されていますが、パイプライン内で実行する必要があるのは1つのジョブのみです。どうすれば1つのジョブだけを実行できますか。 job1またはjob2?私たちの環境では、tagsまたはbranchesをソフトウェアスイッチとして使用することはできません。

.gitlab-ci.yml:

before_script:
  - docker info

job1:
  script:
    - do something

job2:
  script:
    - do something
11
lin

>現在、GitLab CIでは、他の回答で提供されているtagsまたはbranches以外のソフトウェアスイッチを使用することはできないようです。

GitLab CIの制限が多すぎるため、ようやく他の「実際の」CIに切り替えました。異なる手順でいくつかのカスタムジョブを実行する場合、GitLab CIは便利です。ここで両方の答えを本当に感謝しています。彼らは他のユーザーがこのようなものを管理するのを助けると確信しています。残念ながら、私たちの場合、tagscommit messagesまたはbranchesをソフトウェアスイッチとして使用します。

これについてはまだ答えを探しています。この問題を解決するための別のアプローチを自由に提供してください。それが当たったら私は正しい答えをマークします。また、この質問に対する報奨金は正しい答えにはなりませんでした。

4
lin

私たちは過去に同じ問題に直面し、私はあなたに私たちの解決策を共有しています。

リマーク

  • Jawadの回答を読んだところ、問題はなく、問題が発生したときに試してみました。
  • when: manualを追加すると、パイプライン内のすべてのジョブが常に表示されます。
  • したがって、大規模なチームで作業している場合、他の共同編集者が誤って、または誤って起動したくないジョブをクリックするのを防ぐことはできません。

続行する前に私が想定していること

  • 4つのジョブがあるとします。
  • 常に(手動または自動で)job 1job 2およびjob 4を実行する必要がありますが、job3は実行しないでください。
  • job 3を実行するのは、特定の場合、または実行を決定したときだけです。

アイデアは

  • 正規表現が多いタグのみ3回目となるジョブを立ち上げます。
  • 以下の例では、helloTag.1helloTag.2helloTag.3...などのタグに対して起動されます。
  • developまたはmaster(または他のブランチ)にいる場合、3つのステージ(ステージ1、ステージ2、ステージ4)があります。

    3番目のジョブがパイプラインに存在しないことに注意してください

    enter image description here

  • [リポジトリ]-> [タグ]-> [新しいタグ]に移動します

    タグに正規表現と同じ名前を付けます

    enter image description here

  • 「helloTag。」で始まる名前のタグ内にいる場合、1つのステージ(ステージ3)があります。

    他のステージがここに存在しないことに注意してください

    enter image description here

.gitlab-ciファイルの例

stages:
    - myStage1
    - myStage2
    - myStage3
    - myStage4

This is my first stage:
    stage: myStage1
    before_script:
        - echo "my stage 1 before script"
    script:
         - echo "my stage 1 script"
    except:
        - /^helloTag.*$/

This is my second stage:
    stage: myStage2
    before_script:
        - echo "my stage 2 before script"
    script:
         - echo "my stage 2 script"
    except:
        - /^helloTag.*$/

This is my third stage:
    stage: myStage3
    before_script:
        - echo "my stage 3 before script"
    script:
         - echo "my stage 3 script"
    only:
        - /^helloTag.*$/

This is my fourth stage:
    stage: myStage4
    before_script:
        - echo "my stage 4 before script"
    script:
         - echo "my stage 4 script"
    except:
        - /^helloTag.*$/

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

6

gitlab変数式 を以下のように/ exceptのみで使用し、必要に応じて変数をパイプライン実行に渡すことができます。

この例では、デフォルトで両方のジョブが実行されますが、「firstJobOnly」に「true」を渡すと、最初のジョブのみが実行されます。

variables:
  firstJobOnly: 'false'

before_script:
  - docker info

job1:
  script:
    - do something

job2:
  script:
    - do something
  except:
    variables:
      - $firstJobOnly =~ /true/i
5
zm31

単にwhen: manual実行したくないジョブに。

これらのジョブは引き続きパイプラインに表示されますが、誰かが「手動」でWebインターフェースを介してジョブを開始しない限り、実行されないため、名前が付けられます。

これに関する詳細は次のとおりです: https://docs.gitlab.com/ce/ci/yaml/README.html#when

より「プログラム可能な」何かを探しているなら、どちらかを実行するとしましょうjob1またはjob2ブランチ名またはタグに応じて、onlyおよびexceptキーワードを確認する必要があります。 https://docs.gitlab.com/ce/ ci/yaml/README.html#only-and-except

5
Jawad