Files
AlpinePackages/Jenkinsfile
Bram Prieshof 8c7755f4b6 Added repo upload to Jenkins file
Jenkinsfile can now  upload packages to repo on Gitea

Fixed missing archive key in Chroot setup example (since it resulted in buiild failure)
2023-10-05 23:29:19 +02:00

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;
'''
}
}
}
}
}
}
}
}
}
}
}