Ich verwende deklarative Jenkins-Pipelines , um einige meiner Build-Pipelines auszuführen, und habe mich gefragt, ob es möglich ist, mehrere Agentenbezeichnungen zu definieren.
Ich habe eine Reihe von Build-Agenten, die an meine Jenkins angeschlossen sind, und möchte, dass diese bestimmte Pipeline von verschiedenen Agenten mit unterschiedlichen Labels (aber nicht von ALL-Agenten) erstellt werden kann.
Um konkreter zu sein, nehmen wir an, ich habe 2 Agenten mit dem Label "small", 4 mit dem Label "medium" und 6 mit dem Label "large". Jetzt habe ich eine sehr ressourcenarme Pipeline, und ich möchte, dass sie nur auf einem kleinen Agenten oder Agenten mit mittlerer Größe ausgeführt wird, aber nicht auf einem großen, da größere Builds möglicherweise in der Warteschlange warten für eine unnötig lange Zeit.
Alle Beispiele, die ich bisher gesehen habe, verwenden nur ein einziges Etikett ... Ich habe so etwas ausprobiert:
agent { label 'small, medium' }
Aber es ist fehlgeschlagen.
Ich verwende Version 2.5 des Jenkins Pipeline Plugins.
Sie können die Hilfe 'Pipeline-Syntax' in Ihrer Jenkins-Installation und den Referenzschritt "Knoten" im Beispielschritt sehen.
Sie können exprA||exprB
verwenden:
node('small||medium') {
// some block
}
Diese Syntax scheint für mich zu funktionieren:
agent { label 'linux && Java' }
EDIT: Ich habe die Frage falsch verstanden. Diese Antwort ist nur, wenn Sie .__ wissen. welchen spezifischen Agenten Sie für jede Phase ausführen möchten.
Wenn Sie mehrere Agenten benötigen, können Sie agent none
und dann den Agenten in jeder Phase deklarieren.
https://jenkins.io/doc/book/pipeline/jenkinsfile/#using-multiple-agents
Aus den Dokumenten:
pipeline {
agent none
stages {
stage('Build') {
agent any
steps {
checkout scm
sh 'make'
stash includes: '**/target/*.jar', name: 'app'
}
}
stage('Test on Linux') {
agent {
label 'linux'
}
steps {
unstash 'app'
sh 'make check'
}
post {
always {
junit '**/target/*.xml'
}
}
}
stage('Test on Windows') {
agent {
label 'windows'
}
steps {
unstash 'app'
bat 'make check'
}
post {
always {
junit '**/target/*.xml'
}
}
}
}
}
Erstellen Sie ein weiteres Label mit dem Namen "klein oder mittel", das alle 6 Agenten enthält. Dann in Jenkinsfile:
agent { label 'small-or-medium' }