declarative Jenkins pipelines を使用してビルドパイプラインの一部を実行していますが、複数のエージェントラベルを定義できるかどうか疑問に思っていました。
私はJenkinsに接続された多数のビルドエージェントを持っています。この特定のパイプラインを、異なるラベルを持つさまざまなエージェント(すべてのエージェントではない)でビルドできるようにしたいと思います。
具体的には、「small」というラベルのエージェントが2人、「medium」というラベルのエージェントが4人、「large」というラベルのエージェントが6人いるとします。今、非常にリソースが少ないパイプラインがあり、「小」または「中」サイズのエージェントでのみ実行され、大きなビルドではキューで待機する可能性があるため、実行されないようにします不必要に長い時間。
これまでに見てきたすべての例では、単一のラベルのみを使用しています。私はこのようなものを試しました:
agent { label 'small, medium' }
しかし、失敗しました。
Jenkins Pipeline Pluginのバージョン2.5を使用しています。
Jenkinsインストール内の「パイプライン構文」ヘルプと、サンプルステップ「ノード」リファレンスを参照できます。
exprA||exprB
を使用できます:
node('small||medium') {
// some block
}
この構文は私にはうまくいくようです:
agent { label 'linux && Java' }
編集:私は質問を誤解しました。この答えは、各段階で実行する特定のエージェントがわかっている場合のみです。
複数のエージェントが必要な場合は、agent none
を宣言してから、各段階でエージェントを宣言できます。
https://jenkins.io/doc/book/pipeline/jenkinsfile/#using-multiple-agents
ドキュメントから:
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'
}
}
}
}
}
6つのすべてのエージェントを持つ「small-or-medium」という別のラベル呼び出しを作成します。次に、Jenkinsfileで:
agent { label 'small-or-medium' }