Skip to content

Commit 3c227f0

Browse files
committed
build pipeline add
1 parent 014b112 commit 3c227f0

2 files changed

Lines changed: 105 additions & 71 deletions

File tree

debian/Jenkinsfile

Lines changed: 95 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
#!groovy
22

3-
// Unsupported by Docker: Trixie
3+
// Current version of this Pipeline https://github.com/VitexSoftware/BuildImages/blob/main/Test/Jenkinsfile-parael
44

5-
String[] distributions = ['debian:bullseye', 'debian:bookworm', 'debian:trixie', 'ubuntu:jammy', 'ubuntu:noble']
5+
String[] distributions = ['debian:bookworm', 'debian:trixie', 'debian:forky', 'ubuntu:jammy', 'ubuntu:noble']
66

77
String vendor = 'vitexsoftware'
8-
String distribution = ''
9-
String distroFamily = ''
10-
String distroCodename = ''
11-
String ver = ''
8+
//String distroFamily = ''
129

1310
properties([
1411
copyArtifactPermission('*')
@@ -21,69 +18,110 @@ node() {
2118
}
2219
}
2320

24-
distributions.each {
25-
distribution = it
21+
def branches = [:]
22+
distributions.each { distro ->
23+
branches[distro] = {
24+
def distroName = distro
25+
println "Dist:" + distroName
2626

27-
println "Dist:" + distribution
27+
def dist = distroName.split(':')
28+
def distroFamily = dist[0]
29+
def distroCode = dist[1]
30+
def buildImage = ''
31+
def artifacts = []
32+
def buildVer = ''
2833

29-
def dist = distribution.split(':')
30-
distroFamily = dist[0]
31-
distroCodename = dist[1]
32-
33-
def buildImage = ''
34-
35-
def artifacts = []
36-
37-
node {
38-
ansiColor('xterm') {
39-
stage('Checkout ' + distribution) {
40-
checkout scm
41-
buildImage = docker.image(vendor + '/' + distribution)
42-
sh 'git checkout debian/changelog'
43-
def version = sh (
44-
script: 'dpkg-parsechangelog --show-field Version',
45-
returnStdout: true
46-
).trim()
47-
ver = version + '.' + env.BUILD_NUMBER + '~' + distroCodename
48-
}
49-
stage('Build ' + distribution) {
50-
buildImage.inside {
51-
sh 'dch -b -v ' + ver + ' "' + env.BUILD_TAG + '"'
52-
sh 'sudo chown jenkins:jenkins ..'
53-
sh 'debuild-pbuilder -i -us -uc -b'
54-
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'
55-
artifacts = sh (
56-
script: "cat debian/files | awk '{print \$1}'",
34+
node {
35+
ansiColor('xterm') {
36+
stage('Checkout ' + distroName) {
37+
checkout scm
38+
def imageName = vendor + '/' + distro
39+
buildImage = docker.image(imageName)
40+
sh 'git checkout debian/changelog'
41+
def version = sh (
42+
script: 'dpkg-parsechangelog --show-field Version',
5743
returnStdout: true
58-
).trim().split('\n')
44+
).trim()
45+
buildVer = version + '.' + env.BUILD_NUMBER + '~' + distroCode
46+
}
47+
stage('Build ' + distroName) {
48+
buildImage.inside {
49+
sh 'dch -b -v ' + buildVer + ' "' + env.BUILD_TAG + '"'
50+
sh 'sudo apt-get update --allow-releaseinfo-change'
51+
sh 'sudo chown jenkins:jenkins ..'
52+
sh 'debuild-pbuilder -r"sudo -E" -i -us -uc -b'
53+
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'
54+
artifacts = sh (
55+
script: "cat debian/files | awk '{print \$1}'",
56+
returnStdout: true
57+
).trim().split('\n')
58+
}
5959
}
60-
}
6160

62-
stage('Test ' + distribution) {
63-
buildImage.inside {
64-
def debconf_debug = 5 //Set to "5" or "developer" to debug debconf
65-
sh 'cd $WORKSPACE/dist/debian/ ; dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz; cd $WORKSPACE'
66-
sh 'echo "deb [trusted=yes] file://///$WORKSPACE/dist/debian/ ./" | sudo tee /etc/apt/sources.list.d/local.list'
67-
sh 'sudo apt-get update --allow-releaseinfo-change'
68-
sh 'echo "INSTALATION"'
69-
artifacts.each { deb_file ->
70-
if (deb_file.endsWith('.deb') && deb_file.contains('sqlite')) {
71-
sh 'echo -e "${GREEN} installing ' + deb_file + ' on `lsb_release -sc` ${ENDCOLOR} "'
72-
sh 'sudo DEBIAN_FRONTEND=noninteractive DEBCONF_DEBUG=' + debconf_debug + ' apt -y install $WORKSPACE/dist/debian/' + deb_file
61+
stage('Test ' + distroName) {
62+
buildImage.inside {
63+
def debconf_debug = 0 //Set to "5" or "developer" to debug debconf
64+
sh 'cd $WORKSPACE/dist/debian/ ; dpkg-scanpackages . /dev/null > Packages; gzip -9c Packages > Packages.gz; cd $WORKSPACE'
65+
sh 'echo "deb [trusted=yes] file://///$WORKSPACE/dist/debian/ ./" | sudo tee /etc/apt/sources.list.d/local.list'
66+
sh 'sudo apt-get update --allow-releaseinfo-change'
67+
sh 'echo "INSTALATION"'
68+
69+
def installOrder = [
70+
// '',
71+
]
72+
73+
def sorted_artifacts = artifacts.toList()
74+
installOrder.each { pkgPrefix ->
75+
def debFile = null
76+
for (item in sorted_artifacts) {
77+
def itemStr = item.toString()
78+
if (itemStr.startsWith(pkgPrefix) && itemStr.endsWith('.deb')) {
79+
debFile = itemStr
80+
break
81+
}
82+
}
83+
if (debFile) {
84+
def pkgName = debFile.tokenize('/')[-1].replaceFirst(/_.*/, '')
85+
sh 'echo -e "${GREEN} installing ' + pkgName + ' on `lsb_release -sc` ${ENDCOLOR} "'
86+
sh 'sudo DEBIAN_FRONTEND=noninteractive DEBCONF_DEBUG=' + debconf_debug + ' apt-get -y install ' + pkgName + ' || sudo apt-get -y -f install'
7387
}
7488
}
89+
7590
}
76-
}
77-
stage('Copy artifacts ' + distribution ) {
78-
buildImage.inside {
79-
artifacts.each { deb_file ->
80-
println "Copying artifact: " + deb_file
81-
archiveArtifacts artifacts: 'dist/debian/' + deb_file
91+
stage('Archive artifacts ' + distroName ) {
92+
// Only run if previous stages (Build and Test) succeeded
93+
buildImage.inside {
94+
// Archive all produced artifacts listed in debian/files
95+
artifacts.each { deb_file ->
96+
println "Archiving artifact: " + deb_file
97+
archiveArtifacts artifacts: 'dist/debian/' + deb_file
98+
}
99+
100+
// Cleanup: remove any produced files named in debian/files
101+
// Try both the dist location and any potential original locations referenced by debian/files
102+
sh '''
103+
set -e
104+
if [ -f debian/files ]; then
105+
while read -r file _; do
106+
[ -n "$file" ] || continue
107+
rm -f "dist/debian/$file" || true
108+
rm -f "../$file" || true
109+
rm -f "$WORKSPACE/$file" || true
110+
done < debian/files
111+
fi
112+
'''
82113
}
83-
sh 'mv $WORKSPACE/dist/debian/*.deb $WORKSPACE'
84114
}
85115
}
86116
}
87117
}
88118
}
119+
}
120+
121+
parallel branches
89122

123+
node {
124+
stage('Publish to Aptly') {
125+
publishDebToAptly()
126+
}
127+
}

debian/Jenkinsfile.release

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#!groovy
22

3-
// Current version of this Pipeline https://raw.githubusercontent.com/VitexSoftware/multiflexi-buildimages/refs/heads/main/Test/multiflexi-halloworld/Jenkinsfile
4-
53
String[] distributions = ['debian:bookworm', 'debian:trixie', 'debian:forky', 'ubuntu:jammy', 'ubuntu:noble']
64

75
String vendor = 'vitexsoftware'
@@ -45,11 +43,11 @@ distributions.each { distro ->
4543
buildVer = version + '.' + env.BUILD_NUMBER + '~' + distroCode
4644
}
4745
stage('Build ' + distroName) {
48-
buildImage.inside {
46+
buildImage.inside('--ipc=host') {
4947
sh 'dch -b -v ' + buildVer + ' "' + env.BUILD_TAG + '"'
5048
sh 'sudo apt-get update --allow-releaseinfo-change'
51-
sh 'sudo chown jenkins:jenkins ..'
52-
sh 'debuild-pbuilder -i -us -uc -b'
49+
sh 'sudo chown -R jenkins:jenkins . ..'
50+
sh 'debuild-pbuilder -r"sudo -E" -i -us -uc -b'
5351
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'
5452
artifacts = sh (
5553
script: "cat debian/files | awk '{print \$1}'",
@@ -59,30 +57,28 @@ distributions.each { distro ->
5957
}
6058

6159
stage('Test ' + distroName) {
62-
buildImage.inside {
60+
buildImage.inside('--ipc=host') {
6361
def debconf_debug = 0 //Set to "5" or "developer" to debug debconf
64-
sh 'cd $WORKSPACE/dist/debian/ ; dpkg-scanpackages . /dev/null > Packages; gzip -9c Packages > Packages.gz; cd $WORKSPACE'
62+
sh 'cd $WORKSPACE/dist/debian/ ; dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz; cd $WORKSPACE'
6563
sh 'echo "deb [trusted=yes] file://///$WORKSPACE/dist/debian/ ./" | sudo tee /etc/apt/sources.list.d/local.list'
6664
sh 'sudo apt-get update --allow-releaseinfo-change'
6765
sh 'echo "INSTALATION"'
6866
artifacts.each { deb_file ->
69-
if (deb_file.endsWith('.deb') && deb_file.contains('sqlite')) {
70-
def pkgName = deb_file.tokenize('/')[-1].replaceFirst(/_.*/, '')
71-
sh 'echo -e "${GREEN} installing ' + pkgName + ' on `lsb_release -sc` ${ENDCOLOR} "'
72-
sh 'sudo DEBIAN_FRONTEND=noninteractive DEBCONF_DEBUG=' + debconf_debug + ' apt-get -y install ' + pkgName + ' || sudo apt-get -y -f install'
67+
if (deb_file.endsWith('.deb')) {
68+
sh 'echo -e "${GREEN} installing ' + deb_file + ' on `lsb_release -sc` ${ENDCOLOR} "'
69+
sh 'sudo DEBIAN_FRONTEND=noninteractive DEBCONF_DEBUG=' + debconf_debug + ' apt-get -y install $WORKSPACE/dist/debian/' + deb_file
7370
}
7471
}
7572
}
7673
}
7774
stage('Archive artifacts ' + distroName ) {
7875
// Only run if previous stages (Build and Test) succeeded
79-
buildImage.inside {
76+
buildImage.inside('--ipc=host') {
8077
// Archive all produced artifacts listed in debian/files
8178
artifacts.each { deb_file ->
8279
println "Archiving artifact: " + deb_file
8380
archiveArtifacts artifacts: 'dist/debian/' + deb_file
8481
}
85-
8682
// Cleanup: remove any produced files named in debian/files
8783
// Try both the dist location and any potential original locations referenced by debian/files
8884
sh '''
@@ -111,7 +107,7 @@ if (!currentBuild.result || currentBuild.result == 'SUCCESS') {
111107
string(name: 'UPSTREAM_JOB', value: env.JOB_NAME),
112108
string(name: 'UPSTREAM_BUILD', value: env.BUILD_NUMBER),
113109
string(name: 'REMOTE_SSH', value: 'multirepo@repo.multiflexi.eu'),
114-
string(name: 'REMOTE_REPO_DIR', value: '/srv/repo'),
110+
string(name: 'REMOTE_REPO_DIR', value: '/var/lib/multirepo/public/multiflexi'),
115111
string(name: 'COMPONENT', value: 'main'),
116112
string(name: 'DEB_DIST', value: '')
117113
]

0 commit comments

Comments
 (0)