J'apprends le pipeline jenkins et j'ai essayé de suivre ceci code du pipeline . Mais mes Jenkins se plaignent toujours que def
n'est pas légal. Je me demande si j'ai raté des plugins? J'ai déjà installé groovy
, job-dsl
, mais ne fonctionne pas.
Comme l'a dit @Rob, il existe 2 types de pipelines: scripted
et declarative
. C'est comme imperative
vs declarative
. def
n'est autorisé que dans le pipeline scripted
ou enveloppé dans script {}
.
Commencez par node
et def
ou if
est autorisé, comme ci-dessous. C'est de façon traditionnelle. node { stage('Example') { if (env.BRANCH_NAME == 'master') { echo 'I only execute on the master branch' } else { echo 'I execute elsewhere' } } }
Commencez par pipeline
, et def
ou if
n'est PAS autorisé, sauf s'il est entouré de script {...}
. Le pipeline déclaratif rend beaucoup de choses faciles à écrire et à lire.
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"
}
}
}
}
}
}
Pour lire la grammaire du pipeline plus déclarative, veuillez vous référer au doc officiel ici
Vous pouvez utiliser def avec un pipeline déclaratif, mais pas à l'intérieur, par exemple
def agentLabel
if (BRANCH_NAME =~ /^(staging|master)$/) {
agentLabel = "prod"
} else {
agentLabel = "master"
}
pipeline {
agent { node { label agentLabel } }
..