web-dev-qa-db-ja.com

jenkinsfileでブランチNOT(ブランチ名)をいつ指定するのですか?

Jenkinsfileで次のようなものを指定するにはどうすればよいですか?

xではないブランチの場合

次のようなブランチ固有のタスクを指定する方法を知っています。

stage('Master Branch Tasks') {
        when {
            branch "master"
        }
        steps {
          sh '''#!/bin/bash -l
          Do some stuff here
          '''
        }
}

ただし、次のようにブランチがマスターまたはステージングでない場合のステージを指定したいと思います。

stage('Example') {
    if (env.BRANCH_NAME != 'master' && env.BRANCH_NAME != 'staging') {
        echo 'This is not master or staging'
    } else {
        echo 'things and stuff'
    }
}

ただし、上記は機能せず、次のエラーで失敗します。

WorkflowScript: 62: Not a valid stage section definition: "if 

WorkflowScript: 62: Nothing to execute within stage "Example" 

失敗した試行のソースに注意してください: https://jenkins.io/doc/book/pipeline/syntax/#flow-control

20
HosseinK

これで issue が解決され、これを行うことができます:

stage('Example (Not master)') {
   when {
       not {
           branch 'master'
       }
   }
   steps {
     sh 'do-non-master.sh'
   }
}
39
Zac Kwan

anyOfを使用して、複数の条件(この場合はブランチ名)を指定することもできます。

stage('Example (Not master nor staging)') {
   when {
       not {
          anyOf {
            branch 'master';
            branch 'staging'
          }
       }
   }
   steps {
     sh 'do-non-master-nor-staging.sh'
   }
}

この場合 do-non-master-nor-staging.shは、すべてのブランチで実行されますexceptonmasterおよびstaging

組み込み条件と一般的なパイプライン構文について読むことができます here

21

投稿からのリンクは、スクリプト化されたパイプライン構文の例を示しています。コードは宣言型パイプライン構文を使用します。宣言内でスクリプトパイプラインを使用するには、スクリプトステップを使用できます。

stage('Example') {
    steps {
        script { 
            if (env.BRANCH_NAME != 'master' && env.BRANCH_NAME != 'staging') {
                echo 'This is not master or staging'
            } else {
                echo 'things and stuff'
            }
        }
    }
}
13
Philip