私はジェンキンスのパイプラインを学んでいます、そして、私はこれを追おうとしました パイプラインコード 。しかし、私のジェンキンスは常にdef
が合法ではないと文句を言います。プラグインを見逃していませんか? groovy
、job-dsl
、しかし動作しません。
@Robが言ったように、パイプラインにはscripted
とdeclarative
の2種類があります。 imperative
対declarative
のようなものです。 def
は、scripted
パイプラインでのみ許可されるか、_script {}
_でラップされます。
node
で始まり、以下のようにdef
またはif
が許可されます。それは伝統的な方法です。 node { stage('Example') { if (env.BRANCH_NAME == 'master') { echo 'I only execute on the master branch' } else { echo 'I execute elsewhere' } } }
pipeline
で始まり、def
またはif
は、_script {...}
_でラップされていない限り許可されません。宣言的なパイプラインを使用すると、多くのことが簡単に作成および読み取りできます。
_pipeline {
agent any
triggers {
cron('H 4/* 0 0 1-5')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
_
_pipeline {
agent any
stages {
stage('Example Build') {
steps {
echo 'Hello World'
}
}
stage('Example Deploy') {
when {
branch 'production'
}
steps {
echo 'Deploying'
}
}
}
}
_
_pipeline {
agent any
stages {
stage('Non-Parallel Stage') {
steps {
echo 'This stage will be executed first.'
}
}
stage('Parallel Stage') {
when {
branch 'master'
}
failFast true
parallel {
stage('Branch A') {
agent {
label "for-branch-a"
}
steps {
echo "On Branch A"
}
}
stage('Branch B') {
agent {
label "for-branch-b"
}
steps {
echo "On Branch B"
}
}
}
}
}
}
_
_pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
script {
def browsers = ['chrome', 'firefox']
for (int i = 0; i < browsers.size(); ++i) {
echo "Testing the ${browsers[i]} browser"
}
}
}
}
}
}
_
より宣言的なパイプラインの文法を読むには、公式ドキュメントを参照してください here
Defを宣言パイプラインで使用できますが、その内部だけではありません
def agentLabel
if (BRANCH_NAME =~ /^(staging|master)$/) {
agentLabel = "prod"
} else {
agentLabel = "master"
}
pipeline {
agent { node { label agentLabel } }
..