Skip to main content

ステップを条件付きで有効または無効にする

概要

任意のワークフローでステップを有効または無効にできます。また、ステップの条件を設定することもできます。これは、自分のコンピューターで、Bitrise CLIを使用するか、または bitrise.yml ワークフローエディタのタブ。

任意のワークフローでステップを有効または無効にできます。また、ステップの条件を設定することもできます。自分のコンピューターで、Bitrise CLIを使用するか、または bitrise.yml ワークフローエディタのタブ。

私たちは主に使用します run_if これらのことを行うための表現。 テンプレート式を確認してください

GitHub で例を表示することもできます。 テンプレート式の例.

NS run_if 任意の有効なGoテンプレートにすることができます

NS run_if 任意の有効なものにすることができます テンプレートに移動、評価する限り true また false (または、たとえば、任意の文字列表現 Truetyes また y すべてが true)。テンプレートが次のように評価された場合 true、ステップは実行されます。それ以外の場合は実行されません。

run_if カスタム環境変数を確認するには:

run_if: |-
        {{enveq "CUSTOM_ENV_VAR_KEY" "test value to test against"}}

この run_if の値が CUSTOM_ENV_VAR_KEY ではありません test value to test against

ステップの無効化

ワークフローからステップを削除したくないが実行したくない場合は、を使用してステップを無効にすることができます。 run_if 表現。

ワークフローの実験

ステップを削除したり無効にしたりせずに、ワークフローのさまざまな構成を試すには、ワークフローのクローンを作成することをお勧めします。元のワークフローを変更せずに、複製されたワークフローを必要なだけ変更できます。

ワークフローエディター

bitrise.yml

  1. 必要なワークフローを開きます。

  2. 無効にするステップを見つけます。

  3. の中に その他の実行条件 入力、タイプ false

    コンディショナル

    false と評価された条件もすべて機能します。

  1. アプリを開きます bitrise.yml ファイル。

  2. 無効にするステップを探します。

  3. [追加] run_if: false それに。

    コンディショナル

    false と評価された条件もすべて機能します。

    - script:
        run_if: false
        inputs:
        - content: |-
            #!/bin/bash
            echo "This will never run, because of run_if:false"

CI環境でのみステップを実行する

CI環境でのみステップを実行すると、ビルドはローカルビルドの特定のステップをスキップします。ステップを無効にするのと同じように、 run_if 表現。これを使用して、ビルドをローカルでデバッグします。

CIモードをローカルで有効にする

CIモードは、を設定することにより、ご使用のMac / PCで有効にできます。 CI 環境へ true (たとえば、実行 export CI=true Bashターミナルで)、または実行することによって bitrise run とともに --ci 国旗: bitrise --ci run ...

ワークフローエディター

bitrise.yml

  1. 必要なワークフローを開きます。

  2. 必要なステップを見つけてください。

  3. の中に その他の実行条件 入力、タイプ .iSCSI

  1. アプリを開きます bitrise.yml ファイル。

  2. 必要なステップを見つけてください。

  3. [追加] run_if: .IsCI そのプロパティへ:

    - script:
        run_if: .IsCI
        inputs:
        - content: |-
            #!/bin/bash
            echo "This will only ever run in a CI environment because run_if: IsCI"

ビルドが失敗した場合にのみステップを実行する

特定のステップに到達する前にビルドが失敗した場合にのみ、ステップを実行できます。に加えて run_if、を使用する必要があります is_always_run プロパティも。

ワークフローエディター

bitrise.yml

  1. 必要なワークフローを開きます。

  2. 無効にするステップを見つけます。

  3. の中に その他の実行条件 入力、タイプ .IsBuildFailed

  4. 確認してください 前のステップが失敗しても実行する オプションがオンになっています。

  1. アプリを開きます bitrise.yml ファイル。

  2. 無効にするステップを探します。

  3. [追加] run_if: .IsBuildFailed それに。

  4. [追加] is_always_run: true それに。

    これにより、前のステップが失敗した場合でも、そのステップを実行できます。

    - script:
        is_always_run: true
        run_if: .IsBuildFailed
        inputs:
        - content: |-
            #!/bin/bash
            echo "Build Failed!"

ビルドに失敗せずに失敗したステップを無視する

通常、ビルド中にステップが失敗すると、ビルド自体も失敗します。もちろん、これはすべてのステップに当てはまるわけではありません。 Bitrise.ioキャッシュ:プル そしてその Bitrise.ioキャッシュ:プッシュ ビルドに失敗せずに手順が失敗する可能性があります。他のステップを構成して、それらの失敗がビルドに失敗しないようにすることもできます。

YAMLモードのみ

ワークフローエディターのグラフィカルUIではこれを行うことはできません。アプリを編集する必要があります。 bitrise.yml ファイル。

  1. でアプリを開きます ビットライズ

  2. クリック ワークフロー メインページのボタン。

    opening-workflow-editor.png
  3. 左側で、 構成YAML ナビゲーション メニューから。

  4. 必要なステップを見つけます。

  5. 追加します is_skippable それにフラグを立てて、に設定します true

    - script: 
        is_skippable: true 
        inputs: 
        - content: |- 
            # !/bin/bash 
            echo "Failing Step." 
            exit 1 
            # exit 1 would mark this step as Failed, but it won't break the Build 
            # because of the is_skippable: true flag / property

スクリプトステップで run_if 条件を設定する

ステップを実行するかどうかを決定するために必要な条件は、複雑で多層的な場合があります。もしそうなら、複雑な Go テンプレートのチェーンを run_if Go ではなく他の言語を好む場合は特に、表現に圧倒される可能性があります。

このような場合、回避策を使用することをお勧めします。 脚本 ワークフローにステップ インし、特定の値に評価されるスクリプトを記述します。その値を環境変数に保存すると、条件式を含むステップでその値を確認するだけで済みます。

例1 run_if 式に Go 以外のスクリプトを使用する

この例では、単純な Bash スクリプトを作成してその値を保存し、事前設定された値と一致するかどうかを確認します。

まず、スクリプト ステップを追加し、スクリプト コンテンツで値を定義します。値が定義されたら、使用します 環境人 環境変数に保存します。この特定のケースでは、Bash で変数を定義し、その変数を Env Var の値として使用します。

workflows:    
    example:      
      steps:     
      - script@1:
          title: Do anything with Script step          
          inputs:          
          - content: |-              
              #!/usr/bin/env bash
              # fail if any commands fails              
              set -e
              # debug log
              set -x
              # creating the variable and storing it as an Env Var                
              my_variable='This is the value we need!'          
              envman add --key OUR_CONDITION --value "$my_variable"

次に、単純な run_if 条件が必要な Step の式。この場合、私たちのステップは キャッシュを保存 ステップ、そしての値かどうかを確認します OUR_CONDITION variable は、前の Bash 変数に格納されている値と一致します。

    - save-cache@1:        
        run_if: |-          
          {{getenv "OUR_CONDITION" | eq "This is the value we need!"}}

値が一致するので、 キャッシュを保存 ステップが実行されます。


run_if 式の例

を使用するさまざまな方法があります。 run_if 表現。次のワークフローには、それらのほとんどの例と、コメント付きの説明が含まれています。式は 脚本 正常に実行されたときに、使用された式が真であったことを出力するステップ。

すべての式は有効な Go テンプレートです。 Go テンプレートについて学習するには、次のドキュメントをご覧ください。 テンプレート ドキュメントに移動.

workflows:
  primary:
    steps:
    #
    # Check if an Environment Variable's value is equal to a given string
    - script:
        title: Run-If expression
        run_if: |-
          {{getenv "TEST_KEY" | eq "test value"}}
        inputs:
        - content: |-
            #!/bin/bash
            echo "RunIf expression was true"
    #
    # Use the enveq function to check if an Env Var's value is equal to a given string
    - script:
        title: Run-If expression
        run_if: '{{enveq "TEST_KEY" "test value"}}'
        inputs:
        - content: |-
            #!/bin/bash
            echo "RunIf expression was true"
    # Use envcontain to check if the value of an Env Var contains a given string. It works on the level of Pipelines, too
    - script:
        title: Run-If expression
        run_if: '{{envcontain "TEST_KEY" "test value"}}'
        inputs:
        - content: |-
            #!/bin/bash
            echo "RunIf expression was true"
    #
    # Check if a given Env Var is NOT empty
    - script:
        title: Run-If expression
        run_if: '{{getenv "TEST_KEY" | ne ""}}'
        inputs:
        - content: |-
            #!/bin/bash
            echo "RunIf expression was true"
    #
    # Check if two Env Vars have the same value
    - script:
        title: Run-If expression
        run_if: '{{getenv "TEST_KEY_1" | eq (getenv "TEST_KEY_2")}}'
        inputs:
        - content: |-
            #!/bin/bash
            echo "RunIf expression was true"
    #
    # Use the available expression data properties
    #  like IsCI (checks if the build runs in a CI environment) or IsBuildFailed (checks if the build has failed) directly
    - script:
        title: Run-If expression
        run_if: |-
          {{.IsCI}}
        inputs:
        - content: |-
            #!/bin/bash
            echo "RunIf expression was true"
    #
    # You don't have to wrap the expression in {{...}} if it's a simple
    # oneliner
    - script:
        title: Run-If expression
        run_if: $.IsCI
        inputs:
        - content: |-
            #!/bin/bash
            echo "RunIf expression was true"
    #
    # You can even remove the $ sign, it's optional in a simple
    # expression like this
    - script:
        title: Run-If expression
        run_if: .IsCI
        inputs:
        - content: |-
            #!/bin/bash
            echo "RunIf expression was true"
    #
    # If-Else condition, in this example the Step will run if the build runs in a CI environment
    - script:
        title: Run-If expression
        run_if: |-
          {{if .IsCI}}
          true
          {{else}}
          false
          {{end}}
        inputs:
        - content: |-
            #!/bin/bash
            echo "RunIf expression was true"
    #
    # You can use multiple conditions
    - script:
        title: CI and Not Failed
        run_if: |-
          {{.IsCI | and (not .IsBuildFailed)}}
        inputs:
        - content: |-
            #!/bin/bash
            echo "RunIf expression was true"
    #
    # Check if the build is a pull request or not
    - script:
        title: Only if NOT a pull request
        run_if: not .IsPR
        inputs:
        - content: |-
            #!/bin/bash
            echo "RunIf expression was true"
    - script:
        title: Only if it was a Pull Request
        run_if: .IsPR
        inputs:
        - content: |-
            #!/bin/bash
            echo "Pull Request ID: ${PULL_REQUEST_ID}"