Skip to content

Commit 416c1a8

Browse files
author
Vítězslav Dvořák
committed
Fix debian/.debhelper conflicts in parallel builds
- Set unique DH_INTERNAL_BUILDDIR and TMPDIR for each parallel build - Use BUILD_NUMBER, distro code, architecture, and EXECUTOR_NUMBER for uniqueness - Add cleanup of temporary build directories - Prevents 'Permission denied' errors when multiple containers access shared debian/.debhelper - Applied to all Jenkinsfile variants: main, arch, external, serial, release
1 parent c2c7369 commit 416c1a8

5 files changed

Lines changed: 86 additions & 5 deletions

File tree

Test/Jenkinsfile

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,21 @@ distributions.each { distro ->
4646
}
4747
stage('Build ' + distroName) {
4848
buildImage.inside {
49+
// Set unique build directories for this parallel build to avoid conflicts
50+
def uniqueBuildId = env.BUILD_NUMBER + '-' + distroCode + '-' + env.EXECUTOR_NUMBER
51+
sh '''
52+
export DH_INTERNAL_BUILDDIR="/tmp/debhelper-build-''' + uniqueBuildId + '''"
53+
export TMPDIR="/tmp/build-''' + uniqueBuildId + '''"
54+
mkdir -p "$DH_INTERNAL_BUILDDIR" "$TMPDIR"
55+
'''
4956
sh 'dch -b -v ' + buildVer + ' "' + env.BUILD_TAG + '"'
5057
sh 'sudo apt-get update --allow-releaseinfo-change'
5158
sh 'sudo chown jenkins:jenkins ..'
52-
sh 'debuild-pbuilder -r"sudo -E" -i -us -uc -b'
59+
sh '''
60+
export DH_INTERNAL_BUILDDIR="/tmp/debhelper-build-''' + uniqueBuildId + '''"
61+
export TMPDIR="/tmp/build-''' + uniqueBuildId + '''"
62+
debuild-pbuilder -r"sudo -E" -i -us -uc -b
63+
'''
5364
sh 'mkdir -p $WORKSPACE/dist/debian/ ; rm -rf $WORKSPACE/dist/debian/* ; for deb in $(cat debian/files | awk \'{print $1}\'); do mv "../$deb" $WORKSPACE/dist/debian/; done'
5465
artifacts = sh (
5566
script: "cat debian/files | awk '{print \$1}'",
@@ -99,6 +110,7 @@ distributions.each { distro ->
99110

100111
// Cleanup: remove any produced files named in debian/files
101112
// Try both the dist location and any potential original locations referenced by debian/files
113+
def uniqueBuildId = env.BUILD_NUMBER + '-' + distroCode + '-' + env.EXECUTOR_NUMBER
102114
sh '''
103115
set -e
104116
if [ -f debian/files ]; then
@@ -109,6 +121,9 @@ distributions.each { distro ->
109121
rm -f "$WORKSPACE/$file" || true
110122
done < debian/files
111123
fi
124+
# Cleanup temporary build directories
125+
rm -rf "/tmp/debhelper-build-''' + uniqueBuildId + '''" || true
126+
rm -rf "/tmp/build-''' + uniqueBuildId + '''" || true
112127
'''
113128
}
114129
}

Test/Jenkinsfile-arch

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,21 @@ architectures.each {
6666
}
6767
stage('Build ' + architecture + ' ' + distribution) {
6868
buildImage.inside {
69+
// Set unique build directories for this parallel build to avoid conflicts
70+
def uniqueBuildId = env.BUILD_NUMBER + '-' + distroCodename + '-' + architecture + '-' + env.EXECUTOR_NUMBER
71+
sh '''
72+
export DH_INTERNAL_BUILDDIR="/tmp/debhelper-build-''' + uniqueBuildId + '''"
73+
export TMPDIR="/tmp/build-''' + uniqueBuildId + '''"
74+
mkdir -p "$DH_INTERNAL_BUILDDIR" "$TMPDIR"
75+
'''
6976
sh 'dch -b -v ' + ver + ' "' + env.BUILD_TAG + '"'
7077
sh 'sudo apt-get update --allow-releaseinfo-change'
7178
sh 'sudo chown jenkins:jenkins ..'
72-
sh 'debuild-pbuilder -i -us -uc -b'
79+
sh '''
80+
export DH_INTERNAL_BUILDDIR="/tmp/debhelper-build-''' + uniqueBuildId + '''"
81+
export TMPDIR="/tmp/build-''' + uniqueBuildId + '''"
82+
debuild-pbuilder -i -us -uc -b
83+
'''
7384
sh 'mkdir -p $WORKSPACE/dist/debian/ ; rm -rf $WORKSPACE/dist/debian/* ; for deb in $(cat debian/files | awk \'{print $1}\'); do mv "../$deb" $WORKSPACE/dist/debian/; done'
7485
}
7586
}
@@ -95,7 +106,13 @@ architectures.each {
95106
}
96107
stage('Copy artifacts ' + architecture + ' ' + distribution ) {
97108
buildImage.inside {
109+
def uniqueBuildId = env.BUILD_NUMBER + '-' + distroCodename + '-' + architecture + '-' + env.EXECUTOR_NUMBER
98110
sh 'mv $WORKSPACE/dist/debian/*.deb $WORKSPACE'
111+
// Cleanup temporary build directories
112+
sh '''
113+
rm -rf "/tmp/debhelper-build-''' + uniqueBuildId + '''" || true
114+
rm -rf "/tmp/build-''' + uniqueBuildId + '''" || true
115+
'''
99116
}
100117
}
101118
}

Test/Jenkinsfile-external

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,22 @@ architectures.each {
6868
}
6969
stage('Build ' + architecture + ' ' + distribution) {
7070
buildImage.inside {
71+
// Set unique build directories for this parallel build to avoid conflicts
72+
def uniqueBuildId = env.BUILD_NUMBER + '-' + distroCodename + '-' + architecture + '-' + env.EXECUTOR_NUMBER
73+
sh '''
74+
export DH_INTERNAL_BUILDDIR="/tmp/debhelper-build-''' + uniqueBuildId + '''"
75+
export TMPDIR="/tmp/build-''' + uniqueBuildId + '''"
76+
mkdir -p "$DH_INTERNAL_BUILDDIR" "$TMPDIR"
77+
'''
7178
sh 'dch -b -v ' + ver + ' "' + env.BUILD_TAG + '"'
7279
sh 'sudo apt-get update --allow-releaseinfo-change'
7380
// sh 'sudo apt install -y libgnutls28-dev'
7481
sh 'sudo chown jenkins:jenkins ..'
75-
sh 'debuild-pbuilder -i -us -uc -b'
82+
sh '''
83+
export DH_INTERNAL_BUILDDIR="/tmp/debhelper-build-''' + uniqueBuildId + '''"
84+
export TMPDIR="/tmp/build-''' + uniqueBuildId + '''"
85+
debuild-pbuilder -i -us -uc -b
86+
'''
7687
sh 'mkdir -p $WORKSPACE/dist/debian/ ; rm -rf $WORKSPACE/dist/debian/* ; for deb in $(cat debian/files | awk \'{print $1}\'); do mv "../$deb" $WORKSPACE/dist/debian/; done'
7788
}
7889
}
@@ -90,7 +101,13 @@ architectures.each {
90101
}
91102
stage('Copy artifacts ' + architecture + ' ' + distribution ) {
92103
buildImage.inside {
104+
def uniqueBuildId = env.BUILD_NUMBER + '-' + distroCodename + '-' + architecture + '-' + env.EXECUTOR_NUMBER
93105
sh 'mv $WORKSPACE/dist/debian/*.deb $WORKSPACE'
106+
// Cleanup temporary build directories
107+
sh '''
108+
rm -rf "/tmp/debhelper-build-''' + uniqueBuildId + '''" || true
109+
rm -rf "/tmp/build-''' + uniqueBuildId + '''" || true
110+
'''
94111
}
95112
}
96113
}

Test/Jenkinsfile-serial

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,21 @@ distributions.each {
4545
}
4646
stage('Build ' + distribution) {
4747
buildImage.inside {
48+
// Set unique build directories for this build to avoid conflicts
49+
def uniqueBuildId = env.BUILD_NUMBER + '-' + distroCodename + '-' + env.EXECUTOR_NUMBER
50+
sh '''
51+
export DH_INTERNAL_BUILDDIR="/tmp/debhelper-build-''' + uniqueBuildId + '''"
52+
export TMPDIR="/tmp/build-''' + uniqueBuildId + '''"
53+
mkdir -p "$DH_INTERNAL_BUILDDIR" "$TMPDIR"
54+
'''
4855
sh 'dch -b -v ' + ver + ' "' + env.BUILD_TAG + '"'
4956
sh 'sudo apt-get update --allow-releaseinfo-change'
5057
sh 'sudo chown jenkins:jenkins ..'
51-
sh 'debuild-pbuilder -i -us -uc -b'
58+
sh '''
59+
export DH_INTERNAL_BUILDDIR="/tmp/debhelper-build-''' + uniqueBuildId + '''"
60+
export TMPDIR="/tmp/build-''' + uniqueBuildId + '''"
61+
debuild-pbuilder -i -us -uc -b
62+
'''
5263
sh 'mkdir -p $WORKSPACE/dist/debian/ ; rm -rf $WORKSPACE/dist/debian/* ; for deb in $(cat debian/files | awk \'{print $1}\'); do mv "../$deb" $WORKSPACE/dist/debian/; done'
5364
artifacts = sh (
5465
script: "cat debian/files | awk '{print \$1}'",
@@ -74,11 +85,17 @@ distributions.each {
7485
}
7586
stage('Copy artifacts ' + distribution ) {
7687
buildImage.inside {
88+
def uniqueBuildId = env.BUILD_NUMBER + '-' + distroCodename + '-' + env.EXECUTOR_NUMBER
7789
artifacts.each { deb_file ->
7890
println "Copying artifact: " + deb_file
7991
archiveArtifacts artifacts: 'dist/debian/' + deb_file
8092
sh 'cp $WORKSPACE/dist/debian/' + deb_file + ' $WORKSPACE'
8193
}
94+
// Cleanup temporary build directories
95+
sh '''
96+
rm -rf "/tmp/debhelper-build-''' + uniqueBuildId + '''" || true
97+
rm -rf "/tmp/build-''' + uniqueBuildId + '''" || true
98+
'''
8299
}
83100
}
84101
}

Test/Jenkinsfile.release

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,21 @@ distributions.each { distro ->
4444
}
4545
stage('Build ' + distroName) {
4646
buildImage.inside('--ipc=host') {
47+
// Set unique build directories for this parallel build to avoid conflicts
48+
def uniqueBuildId = env.BUILD_NUMBER + '-' + distroCode + '-' + env.EXECUTOR_NUMBER
49+
sh '''
50+
export DH_INTERNAL_BUILDDIR="/tmp/debhelper-build-''' + uniqueBuildId + '''"
51+
export TMPDIR="/tmp/build-''' + uniqueBuildId + '''"
52+
mkdir -p "$DH_INTERNAL_BUILDDIR" "$TMPDIR"
53+
'''
4754
sh 'dch -b -v ' + buildVer + ' "' + env.BUILD_TAG + '"'
4855
sh 'sudo apt-get update --allow-releaseinfo-change'
4956
sh 'sudo chown -R jenkins:jenkins . ..'
50-
sh 'debuild-pbuilder -r"sudo -E" -i -us -uc -b'
57+
sh '''
58+
export DH_INTERNAL_BUILDDIR="/tmp/debhelper-build-''' + uniqueBuildId + '''"
59+
export TMPDIR="/tmp/build-''' + uniqueBuildId + '''"
60+
debuild-pbuilder -r"sudo -E" -i -us -uc -b
61+
'''
5162
sh 'mkdir -p $WORKSPACE/dist/debian/ ; rm -rf $WORKSPACE/dist/debian/* ; for deb in $(cat debian/files | awk \'{print $1}\'); do mv "../$deb" $WORKSPACE/dist/debian/; done'
5263
artifacts = sh (
5364
script: "cat debian/files | awk '{print \$1}'",
@@ -81,6 +92,7 @@ distributions.each { distro ->
8192
}
8293
// Cleanup: remove any produced files named in debian/files
8394
// Try both the dist location and any potential original locations referenced by debian/files
95+
def uniqueBuildId = env.BUILD_NUMBER + '-' + distroCode + '-' + env.EXECUTOR_NUMBER
8496
sh '''
8597
set -e
8698
if [ -f debian/files ]; then
@@ -91,6 +103,9 @@ distributions.each { distro ->
91103
rm -f "$WORKSPACE/$file" || true
92104
done < debian/files
93105
fi
106+
# Cleanup temporary build directories
107+
rm -rf "/tmp/debhelper-build-''' + uniqueBuildId + '''" || true
108+
rm -rf "/tmp/build-''' + uniqueBuildId + '''" || true
94109
'''
95110
}
96111
}

0 commit comments

Comments
 (0)