Files
AlpinePackages/Jenkinsfile
Bram Prieshof 1fe89ed42b Jenkinsfile: fixed native builds
`abuild cleanpkg`  failing due to manual removing of the folder, disabled this command since it is not required anymore
2024-07-15 22:51:00 +02:00

139 lines
7.7 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 '''
rm -rf /home/jenkins/packages/AlpinePackages/$PkgArch
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 clean
abuild cleancache
#abuild cleanpkg
abuild -r
'''
}
}
}
} else if("${NativeArchNormalized}" == "${PkgArchNormalized}") {
println("Building ${PkgArch} ${PkgArch}(${PkgArchNormalized}) Chrooted on ${NativeArch}(${NativeArchNormalized})")
sh '''
rm -rf /chroot/$PkgArch/home/jenkins/packages/AlpinePackages/$PkgArch
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 clean
doas -u jenkins abuild cleancache
#doas -u jenkins abuild cleanpkg
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 '''
AlpineRelease=v$(awk -F= '$1=="VERSION_ID" { print $2 ;}' /etc/os-release | cut -d"." -f 1,2)
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/$AlpineRelease/pkgs
done;
'''
}
}
}
}
}
}
}
}
}
}