I am learning Jenkins Pipeline, and I tried to follow this Pipeline code. But my Jenkins always complains that def is not legal.
I am wondering did I miss any plugins? I already installed groovy, job-dsl, but it doesn't work.
I am learning Jenkins Pipeline, and I tried to follow this Pipeline code. But my Jenkins always complains that def is not legal.
I am wondering did I miss any plugins? I already installed groovy, job-dsl, but it doesn't work.
As @Rob said, There are 2 types of pipelines: scripted and declarative. It is like imperative vs declarative. def is only allowed in scripted pipeline or wrapped in script {}.
Start with node, and def or if is allowed, like below. It is traditional way.
node { stage('Example') { if (env.BRANCH_NAME == 'master') { echo 'I only execute on the master branch' } else { echo 'I execute elsewhere' } } } Start with pipeline, and def or if is NOT allowed, unless it is wrapped in script {...}. Declarative pipeline make a lot things easy to write and read.
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" } } } } } } To read more declarative pipeline grammar, please refer the official doc here
You can use def by using node like below:
node { stage('Example') { if (env.BRANCH_NAME == 'master') { echo 'I only execute on the master branch' } else { echo 'I execute elsewhere' } } Another way : by using script{..}
stage ('jon'){ steps{ script{ def imageLine = 'chiducaff/user_containers:sonnginx' } writeFile file: 'anchore_images', text: imageLine anchore name: 'anchore_images' }} script block or you get groovy.lang.MissingPropertyException for it.
defis valid.defis used in scripted pipeline, which start withnode {...}; while my file starts withpipeline, which is declarative, anddefis not allowed, unless it is wrapped byscript {...}