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 表現。

ワークフローの実験

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

Workflow Editor

bitrise.yml

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

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

  3. 追加 run_if: false それに。

    Conditionals

    Any condition that evaluates to false works, too.

  1. Open your app’s bitrise.yml file.

  2. Find the Step that you want to disable.

  3. Add run_if: false to it.

    Conditionals

    Any condition that evaluates to false works, too.

    - 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 ...

Workflow Editor

bitrise.yml

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

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

  3. 追加 run_if: .IsCI それに。

  1. Open your app’s bitrise.yml file.

  2. Find the Step you need.

  3. Add run_if: .IsCI to its properties:

    - 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 プロパティも。

Workflow Editor

bitrise.yml

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

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

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

  4. Make sure the Run even if previous Step(s) failed option is toggled on.

  1. Open your app’s bitrise.yml file.

  2. Find the Step that you want to disable.

  3. Add run_if: .IsBuildFailed to it.

  4. Add is_always_run: true to it.

    This enables the Step to run even if a previous Step failed.

    - 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. [ワークフローとパイプライン] ページでは、次のことができます。

    • クリック bitrise.yml を編集する にアクセスするためのボタン ビットライズ.yml ワークフローエディターのタブ。

    • アプリのワークフローのリストからワークフローを選択します。

  4. に移動します bitrise.yml タブ。

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

  6. 追加します 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
    - 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}"