web-dev-qa-db-ja.com

宣言的なJenkins Pipelineで複数のエージェントラベルを定義できますか?

declarative Jenkins pipelines を使用してビルドパイプラインの一部を実行していますが、複数のエージェントラベルを定義できるかどうか疑問に思っていました。

私はJenkinsに接続された多数のビルドエージェントを持っています。この特定のパイプラインを、異なるラベルを持つさまざまなエージェント(すべてのエージェントではない)でビルドできるようにしたいと思います。

具体的には、「small」というラベルのエージェントが2人、「medium」というラベルのエージェントが4人、「large」というラベルのエージェントが6人いるとします。今、非常にリソースが少ないパイプラインがあり、「小」または「中」サイズのエージェントでのみ実行され、大きなビルドではキューで待機する可能性があるため、実行されないようにします不必要に長い時間。

これまでに見てきたすべての例では、単一のラベルのみを使用しています。私はこのようなものを試しました:

 agent { label 'small, medium' }

しかし、失敗しました。

Jenkins Pipeline Pluginのバージョン2.5を使用しています。

25
FrontSide

Jenkinsインストール内の「パイプライン構文」ヘルプと、サンプルステップ「ノード」リファレンスを参照できます。

exprA||exprBを使用できます:

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

この構文は私にはうまくいくようです:

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

編集:私は質問を誤解しました。この答えは、各段階で実行する特定のエージェントがわかっている場合のみです。

複数のエージェントが必要な場合は、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'
                }
            }
        }
    }
}
17
mcalcote

6つのすべてのエージェントを持つ「small-or-medium」という別のラベル呼び出しを作成します。次に、Jenkinsfileで:

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