| Assume a shared_lib with following code: setup.groovy
def call(Map config) {
path = config.get("ansible_path")
project_name = config.get("project_name")
sh label: "Copy playbook", script: "cp ${path}/${project_name}.yml ${env.HOME}/ansible-dev/."
}
A Jenkinsfile with:
pipeline {
agent any
environment {
ansible_path=".infra/ansible"
}
stages {
stage('init') {
steps {
sh label: "cleanup", script: "rm -fr ${env.HOME}/ansible-dev ; mkdir -p ${env.HOME}/ansible-dev/environments/${environment}/${region}/"
}
}
stage('deploy') {
parallel {
stage('bad-sunburst'){
environment {
project_name="hpgm-sunburst"
}
stages {
stage('ansible') {
steps {
echo "${project_name}"
setup project_name: "${project_name}", ansible_path: "${project_name}/${ansible_path}"
sh label: "test file", script: "ls -l ${env.HOME}/ansible-dev/${project_name}.yml"
}
}
}
}
stage('bad-screen-metrics'){
environment {
project_name="hpgm-screen-metrics"
}
stages {
stage('ansible') {
steps {
echo "${project_name}"
setup project_name: "${project_name}", ansible_path: "${project_name}/${ansible_path}"
sh label: "test file", script: "ls -l ${env.HOME}/ansible-dev/${project_name}.yml"
}
}
}
}
stage('good-segment'){
environment {
project_name="hpgm-segment"
}
stages {
stage('ansible') {
steps {
echo "${project_name}"
sh label: "Copy playbook", script: "cp ${project_name}/${ansible_path}/${project_name}.yml ${env.HOME}/ansible-dev/."
sh label: "test file 1", script: "ls -l ${env.HOME}/ansible-dev/${project_name}.yml"
}
}
}
}
stage('good-snapshot'){
environment {
project_name="hpgm-snapshot"
}
stages {
stage('ansible') {
steps {
echo "${project_name}"
sh label: "Copy playbook", script: "cp ${project_name}/${ansible_path}/${project_name}.yml ${env.HOME}/ansible-dev/."
sh label: "test file 1", script: "ls -l ${env.HOME}/ansible-dev/${project_name}.yml"
}
}
}
}
}
}
}
}
We assume source files to be there:
hpgm-snapshot/hpgm-snapshot.yml
hpgm-segment/hpgm-segment.yml
hpgm-screen-metrics/hpgm-screen-metrics.yml
hpgm-sunburst/hpgm-sunburst.yml
When we execute this pipeline we got errors, because expected filed copied are not copied when a run that from a shared_libs:
[Pipeline] sh (Copy playbook)
[good-segment] + cp hpgm-segment/.infra/ansible/hpgm-segment.yml /var/lib/jenkins/ansible-dev/.
[Pipeline] sh (Copy playbook)
[Pipeline] sh (test file 1)
[good-snapshot] + cp hpgm-snapshot/.infra/ansible/hpgm-snapshot.yml /var/lib/jenkins/ansible-dev/.
[Pipeline] sh (test file 1)
[bad-sunburst] + cp hpgm-screen-metrics/.infra/ansible/hpgm-screen-metrics.yml /var/lib/jenkins/ansible-dev/.
[Pipeline] sh (Copy variables)
[bad-screen-metrics] + cp hpgm-screen-metrics/.infra/ansible/hpgm-screen-metrics.yml /var/lib/jenkins/ansible-dev/.
[Pipeline] sh (Copy variables)
When the pipeline use shared_libs in parallel, commands parameters are mixed. When the pipeline use inline command, commands parameters are properly used. Bad example: [bad-sunburst] + cp hpgm-screen-metrics/.infra/ansible/hpgm-screen-metrics.yml /var/lib/jenkins/ansible-dev/. is wrong It should be [bad-sunburst] + cp hpgm-sunburst/.infra/ansible/hpgm-screen-metrics.yml /var/lib/jenkins/ansible-dev/. is wrong With online commands in Jenkinsfile, it looks good: [good-*segment*] + cp hpgm-segment/.infra/ansible/hpgm-segment.yml /var/lib/jenkins/ansible-dev/. [...] [good-*snapshot*] + cp hpgm-snapshot/.infra/ansible/hpgm-snapshot.yml /var/lib/jenkins/ansible-dev/. |