Added inital Jenkinsfile
The jenkinsfile can build packages for x86_64,aarch64, armhf and armv7 And collect the packages as artifacts in Jenkins
This commit is contained in:
37
ExampleSetupJenkinsChroot.sh
Normal file
37
ExampleSetupJenkinsChroot.sh
Normal file
@@ -0,0 +1,37 @@
|
||||
#!/bin/ash
|
||||
Arch=armv7
|
||||
Name=$Arch
|
||||
chrootDir=/chroot/$Name
|
||||
|
||||
#Setup core
|
||||
apk -X http://192.168.1.3/alpine/v3.18/main -U --allow-untrusted -p ${chrootDir} --arch ${Arch} --initdb add alpine-base git doas doas-sudo-shim alpine-sdk
|
||||
|
||||
#Create required device nodes
|
||||
mknod -m 666 ${chrootDir}/dev/full c 1 7
|
||||
mknod -m 666 ${chrootDir}/dev/ptmx c 5 2
|
||||
mknod -m 644 ${chrootDir}/dev/random c 1 8
|
||||
mknod -m 644 ${chrootDir}/dev/urandom c 1 9
|
||||
mknod -m 666 ${chrootDir}/dev/zero c 1 5
|
||||
mknod -m 666 ${chrootDir}/dev/tty c 5 0
|
||||
|
||||
#Setup DNS
|
||||
cp -L /etc/resolv.conf ${chrootDir}/etc/
|
||||
|
||||
#Setup Repo
|
||||
mkdir -p ${chrootDir}/etc/apk
|
||||
cp -L /etc/apk/repositories ${chrootDir}/etc/apk/repositories
|
||||
|
||||
#Install config files
|
||||
echo "PS1='(Chroot-$Name)Test:\w\$ '" >> ${chrootDir}/etc/profile
|
||||
cp -L -p /etc/doas.d/jenkinsAPKbuilder.conf ${chrootDir}/etc/doas.d/jenkinsAPKbuilder.conf
|
||||
|
||||
#Setup user
|
||||
echo "jenkins:x:1000:1000::/home/jenkins:/bin/sh" >> ${chrootDir}/etc/passwd
|
||||
echo "jenkins:x:1000:" >> ${chrootDir}/etc/group
|
||||
sed -i 's/abuild.*/abuild:x:300:jenkins/' ${chrootDir}/etc/group
|
||||
mkdir -p ${chrootDir}/home/jenkins
|
||||
chown jenkins:jenkins ${chrootDir}/home/jenkins
|
||||
cp -L -r /home/jenkins/.abuild ${chrootDir}/home/jenkins/
|
||||
|
||||
chgrp abuild ${chrootDir}/var/cache/distfiles
|
||||
chmod g+w ${chrootDir}/var/cache/distfiles
|
||||
117
Jenkinsfile
vendored
Normal file
117
Jenkinsfile
vendored
Normal file
@@ -0,0 +1,117 @@
|
||||
//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
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user