web-dev-qa-db-fra.com

Comment paramétrer les travaux Jenkinsfile?

J'ai des travaux Jenkins Pipeline, où la seule différence entre les travaux est un paramètre, une valeur unique "name", je pourrais même utiliser le nom du travail multibranch (bien que ce ne soit pas ce qui est transmis sous le nom JOB_NAME qui est le nom de la branche, malheureusement aucun envs semblent convenir sans analyse). Ce serait formidable si je pouvais placer cet élément en dehors du fichier Jenkins, car je pourrais ensuite réutiliser le même fichier jenkins pour tous les travaux.

11
xenoterracide

En gros, vous devez créer une bibliothèque partagée jenkins example name myCoolLib et disposer d’un pipeline déclaratif complet dans un fichier sous vars , disons que vous appelez le fichier myFancyPipeline.groovy.

Voulais écrire mes exemples mais en fait je vois les docs sont assez gentils , je vais donc copier à partir de là. Tout d'abord le myFancyPipeline.groovy

def call(int buildNumber) {
  if (buildNumber % 2 == 0) {
    pipeline {
      agent any
      stages {
        stage('Even Stage') {
          steps {
            echo "The build number is even"
          }
        }
      }
    }
  } else {
    pipeline {
      agent any
      stages {
        stage('Odd Stage') {
          steps {
            echo "The build number is odd"
          }
        }
      }
    }
  }
}

puis un fichier Jenkins qui l'utilise (a maintenant 2 lignes)

@Library('myCoolLib') _
evenOrOdd(currentBuild.getNumber())

Évidemment, le paramètre ici est de type int, mais il peut s'agir d'un nombre quelconque de paramètres de n'importe quel type. 

J'utilise cette approche et ai l'un des scripts groovy qui a 3 paramètres (2 Strings et un int) et 15-20 Jenkinsfiles qui utilisent ce script via une bibliothèque partagée et c'est parfait. La motivation est bien sûr l’une des règles les plus élémentaires de toute programmation (pas une citation mais plutôt quelque chose comme ça): Si vous avez le même code à 2 endroits différents, quelque chose ne va pas.

4
cantSleepNow

Ajoutez ceci à votre fichier Jenkins:

properties([
  parameters([
    string(name: 'myParam', defaultValue: '')
  ])
])

Ensuite, une fois la construction exécutée, le bouton "Construire avec des paramètres" apparaît sur l'interface utilisateur du travail.

Là, vous pouvez entrer la valeur du paramètre que vous voulez.

Dans le script de pipeline, vous pouvez le référencer avec params.myParam 

2
jf2010

Il existe une option Ce projet est paramétré dans la configuration de votre travail de pipeline. Ecrivez le nom de la variable et une valeur par défaut si vous le souhaitez. Dans le pipeline, accédez à cette variable avec env.variable_name

0
minas