The jenkinsfile can build packages for x86_64,aarch64, armhf and armv7 And collect the packages as artifacts in Jenkins
117 lines
6.0 KiB
Groovy
117 lines
6.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
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |