Comment puis-je déclencher la création d'un autre travail à l'intérieur de la Jenkinsfile
?
Je suppose que ce travail est un autre référentiel sous le même organisation github , celui qui a déjà son propre fichier Jenkins.
Je souhaite également le faire uniquement si le nom de la branche est maître, car il n’a aucun sens de déclencher des versions en aval de toutes les branches locales.
Mise à jour:
stage 'test-downstream'
node {
def job = build job: 'some-downtream-job-name'
}
Pourtant, une fois exécuté, j'obtiens une erreur
Aucun travail paramétré nommé nom-travail-downtream-trouvé n'a été trouvé
Je suis sûr que ce travail existe dans Jenkins et se trouve dans le même dossier d’organisation que celui en cours. C'est un autre travail qui a son propre Jenkinsfile
.
Veuillez noter que cette question est spécifique à plugin d'organisation GitHub , qui crée et gère automatiquement les travaux pour chaque référentiel et branche de votre organisation GitHub.
Tout d’abord, c’est un gaspillage d’un emplacement d’exécuteur pour encapsuler l’étape build
dans node
. Votre exécuteur en amont restera inactif sans raison.
Deuxièmement, à partir d'un projet multibranch, vous pouvez utiliser la variable d'environnement BRANCH_NAME
pour rendre la logique conditionnelle à la branche en cours.
Troisièmement, le paramètre job
prend un nom de travail absolu ou relatif. Si vous donnez un nom sans qualification de chemin, cela ferait référence à un autre travail dans le même dossier, ce qui dans le cas d'un projet multibranch signifierait une autre branche du même référentiel.
Ainsi, ce que vous vouliez écrire est probablement
if (env.BRANCH_NAME == 'master') {
build '../other-repo/master'
}
En plus des réponses ci-dessus: je souhaitais démarrer un travail avec un paramètre simple passé à un deuxième pipeline et trouvais la réponse sur https://dzone.com/refcardz/continuous-delivery-with-jenkins- flux de travail .
Donc j'ai utilisé:
stage ('Starting ART job') {
build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]]
}
La commande build
in pipeline est là pour déclencher d'autres travaux dans Jenkins.
Le travail doit exister à Jenkins et peut être paramétré. En ce qui concerne la branche, je suppose que vous pouvez lisez-le sur git
Vous pouvez utiliser l’étape build job
de pipeline Jenkins (Configuration minimale requise pour Jenkins: 2.130).
Voici l'API complète pour l'étape build
: https://jenkins.io/doc/pipeline/steps/pipeline-build-step/
Comment utiliser build
:
job
: Nom d'un travail en aval à construire. Peut-être un autre travail de pipeline, mais plus généralement un projet libre ou un autre projet. ../sister-folder/downstream
/top-level-folder/nested-folder/downstream
Dans mon entreprise, plusieurs de nos succursales incluent "/". Vous devez remplacer toutes les occurrences de "/" par "% 2F" (tel qu'il apparaît dans l'URL du travail).
Dans cet exemple, nous utilisons des chemins relatifs
stage('Trigger Branch Build') {
steps {
script {
echo "Triggering job for branch ${env.BRANCH_NAME}"
BRANCH_TO_TAG=env.BRANCH_NAME.replace("/","%2F")
build job: "../my-relative-job/${BRANCH_TO_TAG}", wait: false
}
}
}
build job: 'your-job-name',
parameters: [
string(name: 'passed_build_number_param', value: String.valueOf(BUILD_NUMBER)),
string(name: 'complex_param', value: 'prefix-' + String.valueOf(BUILD_NUMBER))
]
Source: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/
Plus d'infos sur Parallel ici: https://jenkins.io/doc/book/pipeline/syntax/#parallel
stage ('Trigger Builds In Parallel') {
steps {
// Freestyle build trigger calls a list of jobs
// Pipeline build() step only calls one job
// To run all three jobs in parallel, we use "parallel" step
// https://jenkins.io/doc/pipeline/examples/#jobs-in-parallel
parallel (
linux: {
build job: 'full-build-linux', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
mac: {
build job: 'full-build-mac', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
windows: {
build job: 'full-build-windows', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
failFast: false)
}
}
Ou bien:
stage('Build A and B') {
failFast true
parallel {
stage('Build A') {
steps {
build job: "/project/A/${env.BRANCH}", wait: true
}
}
stage('Build B') {
steps {
build job: "/project/B/${env.BRANCH}", wait: true
}
}
}
}
Vous pouvez ajouter divers types de logique à votre exécution, telles que des options parallèles, des noeuds et des agents, ainsi que des étapes pour déclencher des travaux externes. J'ai donné un exemple de livre de cuisine facile à lire à cet égard.
1.exemple pour déclencher un travail externe à partir d'un fichier jenkins avec un exemple conditionnel:
if (env.BRANCH_NAME == 'master') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam1',value: 'valueOfParam1')
booleanParam(name: 'keyNameOfParam2',value:'valueOfParam2')
]
}
2.exemple déclenchant plusieurs travaux à partir du fichier jenkins avec exemple conditionnel:
def jobs =[
'job1Title'{
if (env.BRANCH_NAME == 'master') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam1',value: 'valueNameOfParam1')
booleanParam(name: 'keyNameOfParam2',value:'valueNameOfParam2')
]
}
},
'job2Title'{
if (env.GIT_COMMIT == 'someCommitHashToPerformAdditionalTest') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam3',value: 'valueOfParam3')
booleanParam(name: 'keyNameOfParam4',value:'valueNameOfParam4')
booleanParam(name: 'keyNameOfParam5',value:'valueNameOfParam5')
]
}
}