Jenkinsfile can now upload packages to repo on Gitea Fixed missing archive key in Chroot setup example (since it resulted in buiild failure)
130 lines
7.0 KiB
Groovy
130 lines
7.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
|
|
}
|
|
|
|
stage('Uploading packages to repo form ${NativeArchNormalized}') {
|
|
steps {
|
|
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;
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |