139 lines
7.7 KiB
Groovy
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;
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |