I'm rebuilding an existing build pipeline as a jenkins declarative pipeline (multi-branch-pipeline) and have a problem handling build propagation.
After packaging and stashing all relevant files the pipeline is supposed to wait for user input to trigger deployment.
If i just add an input step the current build-node is blocked. As this executor is pretty heavy i would like to move this step to a more lightweight machine.
Initially i did the job as a scripted pipeline and just created two different node('label')
blocks. is there a way for me to do something similar with the declarative syntax?
node('spine') {
stage('builder') {
sh 'mvn clean compile'
stash name: 'artifact', includes: 'target/*.war'
}
}
node('lightweight') {
stage('wait') {
timeout(time:5, unit:'DAYS') {
input message:'Approve deployment?'
}
}
// add deployment stages
}
I tried a couple of things already:
configuring the agent on the top-level and adding an additional agent config to the propagation step, but then i have two executors blocking as the top-level defined build-node is not stopped.
Setting agent none
on top-level and configuring the agents per step. then the git checkout is not present on the first node.
EDIT 1
i reconfigured my pipeline following you advice, it currently looks like this:
pipeline {
agent none
tools {
maven 'M3'
}
stages {
stage('Build') {
agent { label 'spine' }
steps {
checkout scm // needed, otherwise the workspace on the first step is empty
sh "mvn clean compile"
}
}
stage('Test') {
agent { label 'spine' }
steps {
sh "mvn verify" // fails because the workspace is empty aggain
junit '**/target/surefire-reports/TEST-*.xml'
}
}
}
}
this build will fail because the workspace does not carry over between steps as they dont run on the same executor.
EDIT 2
apparently sometimes the steps run on the same executor and sometimes don't. (we spawn build slaves on our mesos/dcos cluster on demand, so changing the executor mid build would be a problem)
I expected jenkins to just run with the current executor as long as the label in the agent definition does not change.