J'ai un travail de pipeline Jenkins appelé "TestPipeline". Je souhaite déclencher une compilation sur 2 esclaves différents portant les noms "testeur1 'et" testeur2 ". Le script de pipeline est très simple ici:
node('tester1') {
build 'test_job'
}
node('tester2') {
build 'test_job'
}
Toutefois, lorsque j'exécute le travail TestPipeline, "test_job" ne s'exécute pas sur les noeuds que j'ai affectés. Mais utilisez plutôt un noeud aléatoire.
Je me demande si je devrais définir "Restreindre où ce projet peut être exécuté" sur mon "test_job". Donc je l'ai mis à "testeur" (l'étiquette "testeur" contient les deux nœuds "testeur1" et "testeur2"). Mais lorsque je réexécute le travail de pipeline, "test_job" s'exécute deux fois sur "testeur2". Je devrais m'attendre à ce que le travail s'exécute d'abord sur "testeur1", puis sur "testeur2". Pourquoi donc? Est-ce parce que l'étape "noeud" n'a pas d'importance lorsqu'il s'agit de savoir sur quel noeud l'étape de construction doit être construite?
S'il vous plaît voir le bug ici . La solution est la suivante.
build job: 'test_job', parameters: [[$class: 'LabelParameterValue', name: 'node', label: 'tester1']]
build job: 'test_job', parameters: [[$class: 'LabelParameterValue', name: 'node', label: 'tester2']]
Et le travail sera construit comme je le voulais.
Cependant, je pense que ce n'est qu'une solution de contournement. Je crois toujours que c'est un bug. Parce que l’étape du nœud devrait faire son travail au lieu de laisser les autres plugins le faire.
J'ai fait de même, mais en utilisant le paramètre Node, je peux donc utiliser la liste de nœuds en cours d'exécution directement ou le pipeline en cours (dans le pipeline, j'utilise le paramètre Choice pour obtenir la liste des nœuds disponibles). Donc dans mon cas:
node_name
.node
et indiquez-y les choix possibles. Ainsi, le pipeline en cours d'exécution vous permet de choisir le nœud sur lequel il doit être exécuté.Code à insérer dans le script de pipeline:
build job: 'my_job',
parameters: [[$class: 'NodeParameterValue', name: 'node_name', labels: ["$node"], nodeEligibility: [$class: 'AllNodeEligibility']]]
Voici comment je l'ai fait fonctionner
créer un 'job' '' test_job '' avec le type de paramètre 'label', nom 'node', la valeur peut être n'importe quelle chaîne. (C’est le travail à déclencher) . Définissez la valeur de libellé «Limiter le lieu où ce projet peut être exécuté».
créer un "pipeline" avec le type de paramètre "Node". Dans la section de pipeline, utilisez le script suivant
Notez que l'étiquette de test_job est $ {env.NODE_NAME}. Elle sera définie par le pipeline en fonction du choix de l'utilisateur.
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building..'
script {
build job: 'test_job', parameters: [
[$class: 'LabelParameterValue', name: 'node', label: "${env.NODE_NAME}" ]
]
}}}}}
Je viens de tester cela sur mon installation et il a correctement exécuté chaque script sur chaque nœud. Vous voudrez peut-être vérifier que vous avez correctement configuré vos esclaves. Je crois que la documentation indique qu'ils doivent disposer du paramètre Lancer les agents esclaves via Java Web Start, vous pouvez vérifier.