web-dev-qa-db-fra.com

Étape / étape conditionnelle du pipeline Jenkins

Comment lancez-vous une étape/étape de construction uniquement si vous avez une branche spécifique?.

C'EST À DIRE. Tout exécuter pour chaque demande/branche d'extraction, mais si la branche en construction est nommée déploiement, exécutez également l'étape de déploiement?

60
Devonte

Faites la même chose dans la syntaxe déclarative du pipeline, voici quelques exemples:

stage('master-branch-stuff'){
  agent any
  when{
    branch 'master'
  }
  steps {
    echo 'run this stage - ony if the branch = master branch'
  }
}
stage('feature-branch-stuff') {
    agent label:'test-node'
    when { branch "feature/*" }
    steps {
        echo 'run this stage - only if the branch name started with feature/'
    }
}
stage('expression-branch') {
    agent label:'some-node'
    when {
    expression {
        return env.BRANCH_NAME != 'master';
        }
    }
    steps {
        echo 'run this stage - when branch is not equal to master'
    }
}
stage('env-specific-stuff') {
    agent label:'test-node'
    when { 
      environment name: 'NAME', value: 'this' 
    }
    steps {
        echo 'run this stage - only if the env name and value matches'
    }
}

Des moyens plus efficaces à venir - https://issues.jenkins-ci.org/browse/JENKINS-41187
Regardez aussi - https://jenkins.io/doc/book/pipeline/syntax/#when


UPDATE
Nouvelle clause WHEN
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative

equals - Compare deux valeurs - chaînes, variables, nombres, booléens - et renvoie true si elles sont égales. Honnêtement, je ne sais pas trop comment nous avons manqué d’ajouter cela plus tôt! Vous pouvez faire des comparaisons "pas égales" en utilisant également la combinaison pas {égaux ...}.

changeRequest - Dans sa forme la plus simple, cela renverra true si ce pipeline génère une demande de modification, telle qu'une demande d'extraction GitHub. Vous pouvez également effectuer des vérifications plus détaillées par rapport à la demande de modification, ce qui vous permet de demander "est-ce une demande de modification par rapport à la branche principale?" et beaucoup plus.

buildingTag - Une condition simple qui vérifie simplement si le pipeline est en cours d'exécution par rapport à une balise dans SCM, plutôt qu'à une branche ou à une référence de validation spécifique.

tag - Un équivalent plus détaillé de buildingTag, vous permettant de vérifier le nom du tag lui-même.

113
Chandan Nayak

Il suffit d'utiliser if et env.BRANCH_NAME, exemple:

    if (env.BRANCH_NAME == "deployment") {                                          
        ... do some build ...
    } else {                                   
        ... do something else ...
    }                                                                       
36