//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 } stage("Uploading packages to repo form ${NativeArchNormalized}") { withCredentials([usernamePassword(credentialsId: 'GiteaPKGPUploadAuth', usernameVariable: 'UploadUsername', passwordVariable: 'UploadPassword')]) { sh ''' for apkFile in $(find -L ~/packages -name '*.apk'); do echo "Uploading $apkFile" curl --user $UploadUsername:$UploadPassword --upload-file $apkFile https://git.bprieshof.nl/api/packages/brammp/alpine/v3.18/pkgs done; ''' } } } } } } } } } }