web-dev-qa-db-fra.com

Puis-je définir plusieurs étiquettes d'agent dans un pipeline Jenkins déclaratif?

J'utilise les pipelines Jenkins déclaratifs pour exécuter certains de mes pipelines de construction et je me demandais s'il était possible de définir plusieurs étiquettes d'agent.

Un certain nombre d'agents de génération sont connectés à mon Jenkins et j'aimerais que ce pipeline puisse être construit par plusieurs agents portant des étiquettes différentes (mais pas par TOUS les agents).

Pour être plus concret, disons que j'ai 2 agents avec une étiquette «petit», 4 avec une étiquette «moyen» et 6 avec une étiquette «grand». Maintenant, j'ai un pipeline qui a très peu de ressources et je veux qu'il ne soit exécuté que sur un agent de taille "petite" ou "moyenne", mais pas sur un gros. pendant un temps inutilement long. 

Tous les exemples que j'ai vus jusqu'à présent n'utilisent qu'un seul label ... J'ai essayé quelque chose comme ceci:

 agent { label 'small, medium' }

Mais ça a échoué.

J'utilise la version 2.5 du plugin Jenkins Pipeline.

15
FrontSide

Vous pouvez voir l'aide 'Pipeline-syntax' dans votre installation Jenkins et voir l'exemple de référence de l'étape "node". 

Vous pouvez utiliser exprA||exprB:

node('small||medium') {
    // some block
}
22
Arcin B

Cette syntaxe semble fonctionner pour moi:

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

EDIT: J'ai mal compris la question. Cette réponse est seulement si vous savez quel agent spécifique vous voulez exécuter pour chaque étape.

Si vous avez besoin de plusieurs agents, vous pouvez déclarer agent none puis déclarer l'agent à chaque étape.

https://jenkins.io/doc/book/pipeline/jenkinsfile/#using-multiple-agents

De la docs:

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

Créez une autre étiquette appelée "petite ou moyenne" qui comporte 6 agents Puis dans Jenkinsfile: 

agent { label 'small-or-medium' }
0
Bing Shiao