我正在使用Jenkins为Debian和Ubuntu构建包。在我的设置中添加了新的Raspberry PI节点,以便为Raspbian构建包:
的问题是如何使管道在任意节点上构建noarch包,在每个体系结构上在节点上构建二进制包?。
对于每个发行版,我都使用修补码头图像为Debian10-11和Ubuntu20.0421.04构建包并执行测试安装。armel/aarch64版本的debian映像也出现在它的Raspberry 3/4节点上。
默认情况下,Jenkins选择一个节点,triger在此基础上构建。
stages {
stage('debian-buster') {
agent {
docker { image 'vitexsoftware/debian:buster' }
}
steps {
dir('build/debian/package') {
checkout scm
buildPackage()
installPackages()
}
stash includes: 'dist/**', name: 'dist-buster'
}
post {
success {
archiveArtifacts 'dist/debian/'
copyArtifact()
}
}
}
...
发布于 2022-02-07 21:43:31
如何使用声明式管道来解决这个问题是没有办法的。
用脚本编写的管道可以完成以下工作:
#!groovy
String[] architectures = ['amd64', 'armhf', 'aarch64']
String[] distributions = ['debian:buster', 'debian:bullseye', 'debian:bookworm', 'ubuntu:focal', 'ubuntu:hirsute', 'ubuntu:impish']
String vendor = 'vitexsoftware'
String distribution = ''
String architecture = ''
String dockerfile = ''
String buildArgs = ''
architectures.each {
architecture = it
distributions.each {
distribution = it
dockerfile = distribution + '/Dockerfile'
buildArgs = ' --platform linux/' + architecture +
/* ' -t ' + vendor + '/' + distribution + */
' -f ' + dockerfile + ' ' + distribution
def buildImage = ''
node( architecture ) {
ansiColor('xterm') {
stage('Build ' + architecture + '/' + distribution) {
checkout scm
buildImage = docker.build(vendor + '/' + distribution, buildArgs)
}
stage('Test ' + architecture + '/' + distribution) {
buildImage.inside {
sh 'whoami'
sh 'sudo apt install -y linuxlogo'
sh 'linuxlogo'
}
}
stage('Docker push ' + architecture + '/' + distribution ) {
docker.withRegistry('https://registry.hub.docker.com', 'vitex_dockerhub') {
buildImage.push( distribution + "-${env.BUILD_NUMBER}-SNAPSHOT")
}
}
}
}
}
}
[![Jenkins Buildfarm in Action][1]][1]
https://stackoverflow.com/questions/70890327
复制相似问题