Files
AlpinePackages/Jenkinsfile
Bram Prieshof fcb2de6c9e Added inital Jenkinsfile
The jenkinsfile can  build packages for x86_64,aarch64, armhf  and armv7
And collect the packages as artifacts in Jenkins
2023-10-05 21:54:53 +02:00

117 lines
6.0 KiB
Groovy

//When setting up this pipeline, please enable SCM branch to '*/Main' and enable 'checkout to subdirectory' to checkout to 'AlpinePackages'
pipeline {
agent none
options {
skipDefaultCheckout()
buildDiscarder(logRotator(numToKeepStr: '2', artifactNumToKeepStr: '1'))
}
stages {
stage('BuildAndTest') {
matrix {
agent {
label "AlpinePKG-Builder && ${Arch}"
}
axes {
axis {
name 'Arch'
values 'amd64', 'aarch64'
}
}
stages {
stage('Prepair') {
steps {
echo "Prepairing on ${Arch}"
// cleanWs()
// Checkout the repository
checkout scm
sh 'if [ ! -L out ];then ln -s ~/packages/AlpinePackages ./out;fi'
script{
def PkgArchs = ['x86_64', 'aarch64', 'armhf','armv7']
def PackageList = sh script: "cd AlpinePackages && ls -d */ | tr -d '/'", returnStdout: true
def NativeArch = sh script: "cat /etc/apk/arch | tr -d '\n'", returnStdout: true
env.NativeArch = NativeArch
def NativeArchNormalized = sh script: '''
case "$NativeArch" in
x86 | i[3456]86 | x86_64) printf 'x86';;
armhf | armv[4-9] | aarch64 ) printf 'arm';;
*) printf "$1";;
esac
''', returnStdout: true
for(PkgArch in PkgArchs){
env.NativeArchNormalized = NativeArchNormalized
env.PkgArch = PkgArch
def PkgArchNormalized = sh script: '''
case "$PkgArch" in
x86 | i[3456]86 | x86_64) printf 'x86';;
armhf | armv[4-9] | aarch64 ) printf 'arm';;
*) printf "$1";;
esac
''', returnStdout: true
if("${NativeArch}" == "${PkgArch}") {
println("Building ${PkgArch}(${PkgArchNormalized}) Native on ${NativeArch}(${NativeArchNormalized})")
sh 'doas apk update'
for(Package in PackageList.split()) {
env.Package = Package
env.PkgArch = PkgArch
stage("Build ${Package} on ${PkgArch}") {
catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') {
sh '''
cd $WORKSPACE/AlpinePackages/$Package
abuild -r
'''
}
}
}
} else if("${NativeArchNormalized}" == "${PkgArchNormalized}") {
println("Building ${PkgArch} ${PkgArch}(${PkgArchNormalized}) Chrooted on ${NativeArch}(${NativeArchNormalized})")
sh '''
rm -rf /chroot/$PkgArch/home/jenkins/AlpinePackages
cp -r -p $WORKSPACE/AlpinePackages /chroot/$PkgArch/home/jenkins/AlpinePackages
doas chroot /chroot/$PkgArch /sbin/apk update
echo '#!/bin/ash
cd /home/jenkins/AlpinePackages/$1
doas -u jenkins abuild -r
' > /chroot/$PkgArch/home/jenkins/RunBuild.sh
chmod +x /chroot/$PkgArch/home/jenkins/RunBuild.sh
'''
for(Package in PackageList.split()) {
env.Package = Package
env.PkgArch = PkgArch
stage("Build ${Package} on ${PkgArch}") {
catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') {
sh 'doas chroot /chroot/$PkgArch /home/jenkins/RunBuild.sh $Package'
}
}
}
} else{
println("Skipping ${PkgArch}(${PkgArchNormalized}) on ${NativeArch}(${NativeArchNormalized})")
}
}
stage("Collecting packages form ${NativeArchNormalized}") {
archiveArtifacts allowEmptyArchive: true, artifacts: 'out/**/*.apk', onlyIfSuccessful: true
}
}
}
}
}
}
}
}
}