web-dev-qa-db-fra.com

Comment spécifier quand la branche PAS (nom de la branche) dans le fichier jenkins?

Comment puis-je spécifier quelque chose comme ce qui suit dans mon fichier Jenkins?

lorsque la branche n'est pas x

Je sais comment spécifier des tâches spécifiques à une branche comme:

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

Cependant, je voudrais spécifier une étape pour laquelle la branche n'est pas maître ou la mise en scène comme suit:

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

Cependant, ce qui précède ne fonctionne pas et échoue avec les erreurs suivantes:

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

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

Notez la source de mon échec: https://jenkins.io/doc/book/pipeline/syntax/#flow-control

20
HosseinK

Avec cela problème résolu, vous pouvez maintenant le faire:

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

Vous pouvez également spécifier plusieurs conditions (dans ce cas, les noms de branche) en utilisant anyOf:

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

Dans ce cas do-non-master-nor-staging.sh fonctionnera sur toutes les branches sauf sur master et staging.

Vous pouvez lire sur les conditions intégrées et la syntaxe générale du pipeline ici .

21
Giovanni Benussi

Le lien de votre publication montre un exemple avec la syntaxe du pipeline scripté. Votre code utilise la syntaxe déclarative du pipeline. Pour utiliser le pipeline scripté dans déclarative, vous pouvez utiliser l'action de script.

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