wake-up-neo.net

Kann ich mehrere Agentenbezeichnungen in einer deklarativen Jenkins-Pipeline definieren?

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.

15
FrontSide

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
}
22
Arcin B

Diese Syntax scheint für mich zu funktionieren:

agent { label 'linux && Java' }
12
gone.skiing

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'
                }
            }
        }
    }
}
8
mcalcote

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' }
0
Bing Shiao