You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
365 lines
13 KiB
365 lines
13 KiB
pipeline { |
|
options { |
|
disableConcurrentBuilds() |
|
preserveStashes(buildCount: 10) |
|
timestamps() |
|
} |
|
parameters { |
|
booleanParam(name: "BUILD_ALL", defaultValue: false, description: "Build all supported platform/architecture combos. Defaults to x86/x64 only") |
|
} |
|
|
|
agent none |
|
|
|
stages { |
|
stage ("Build") { |
|
steps { |
|
script { |
|
def tasks = [:] |
|
tasks << buildStaticBinaries() |
|
tasks << buildDebianNative() |
|
tasks << buildCentosNative() |
|
|
|
parallel tasks |
|
} |
|
} |
|
} |
|
stage ("Package Static") { |
|
steps { |
|
script { |
|
parallel packageStatic() |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
def buildStaticBinaries() { |
|
def tasks = [:] |
|
def dist = ["alpine"] |
|
def archs = [] |
|
if (params.BUILD_ALL == true) { |
|
archs = ["arm64", "amd64", "i386", "armhf", "armel", "ppc64le", "s390x"] |
|
} else { |
|
archs = ["amd64", "i386"] |
|
} |
|
|
|
tasks << getTasks(dist, archs, { distro, platform -> |
|
def myNode = { |
|
node ('linux-build') { |
|
dir ("build") { |
|
checkout scm |
|
} |
|
sh "echo ${distro}-${platform}" |
|
def runtime = docker.image("ztbuild/${distro}-${platform}:latest") |
|
runtime.inside { |
|
dir("build") { |
|
sh 'make -j8 ZT_STATIC=1 all' |
|
sh "file ./zerotier-one" |
|
sh "mv zerotier-one zerotier-one-static-${platform}" |
|
stash includes: 'zerotier-one-static-*', name: "static-${platform}" |
|
} |
|
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true |
|
} |
|
} |
|
} |
|
return myNode |
|
}) |
|
|
|
return tasks |
|
} |
|
|
|
def getTasks(axisDistro, axisPlatform, task) { |
|
def tasks = [:] |
|
for(int i=0; i< axisDistro.size(); i++) { |
|
def axisDistroValue = axisDistro[i] |
|
for(int j=0; j< axisPlatform.size(); j++) { |
|
def axisPlatformValue = axisPlatform[j] |
|
tasks["${axisDistroValue}/${axisPlatformValue}"] = task(axisDistroValue, axisPlatformValue) |
|
} |
|
} |
|
return tasks |
|
} |
|
|
|
def packageStatic() { |
|
def tasks = [:] |
|
|
|
def centos6 = ["centos6"] |
|
def centos6Arch = ["i386", "amd64"] |
|
tasks << getTasks(centos6, centos6Arch, { distro, arch -> |
|
def myNode = { |
|
node ('linux-build') { |
|
dir ("build") { |
|
checkout scm |
|
} |
|
def runtime = docker.image("ztbuild/${distro}-${arch}:latest") |
|
runtime.inside { |
|
dir("build") { |
|
unstash "static-${arch}" |
|
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one" |
|
sh "make redhat" |
|
sh "mkdir -p ${distro}" |
|
sh "cp -av `find ~/rpmbuild/ -type f -name \"*.rpm\"` ${distro}/" |
|
archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true |
|
} |
|
} |
|
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true |
|
} |
|
} |
|
return myNode |
|
}) |
|
|
|
def centos7 = ["centos7"] |
|
def centos7Arch = ["i386"] |
|
tasks << getTasks(centos7, centos7Arch, { distro, arch -> |
|
def myNode = { |
|
node ('linux-build') { |
|
dir ("build") { |
|
checkout scm |
|
} |
|
def runtime = docker.image("ztbuild/${distro}-${arch}:latest") |
|
runtime.inside { |
|
dir("build") { |
|
unstash "static-${arch}" |
|
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one" |
|
sh "make redhat" |
|
sh "mkdir -p ${distro}" |
|
sh "cp -av `find ~/rpmbuild/ -type f -name \"*.rpm\"` ${distro}/" |
|
archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true |
|
} |
|
} |
|
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true |
|
} |
|
} |
|
return myNode |
|
}) |
|
|
|
if (params.BUILD_ALL == true) { |
|
def clefos7 = ["clefos"] |
|
def clefos7Arch = ["s390x"] |
|
tasks << getTasks(clefos7, clefos7Arch, { distro, arch -> |
|
def myNode = { |
|
node ('linux-build') { |
|
dir ("build") { |
|
checkout scm |
|
} |
|
def runtime = docker.image("ztbuild/${distro}-${arch}:latest") |
|
runtime.inside { |
|
dir("build/") { |
|
unstash "static-${arch}" |
|
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one" |
|
sh "make redhat" |
|
sh "mkdir -p ${distro}" |
|
sh "cp -av `find ~/rpmbuild/ -type f -name \"*.rpm\"` ${distro}/" |
|
archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true |
|
} |
|
} |
|
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true |
|
} |
|
} |
|
return myNode |
|
}) |
|
} |
|
|
|
def debianJessie = ["debian-jessie"] |
|
def debianJessieArchs = [] |
|
if (params.BUILD_ALL == true) { |
|
debianJessieArch = ["armhf", "armel", "amd64", "i386"] |
|
} else { |
|
debianJessieArch = ["amd64", "i386"] |
|
} |
|
tasks << getTasks(debianJessie, debianJessieArch, { distro, arch -> |
|
def myNode = { |
|
node ('linux-build') { |
|
dir ("build") { |
|
checkout scm |
|
} |
|
def runtime = docker.image("ztbuild/${distro}-${arch}:latest") |
|
runtime.inside { |
|
sh "ls -la ." |
|
dir('build/') { |
|
sh "ls -la ." |
|
unstash "static-${arch}" |
|
sh "pwd" |
|
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one && file ./zerotier-one" |
|
sh "mv -f debian/rules.static debian/rules" |
|
sh "make debian" |
|
} |
|
sh "mkdir -p ${distro}" |
|
sh "mv *.deb ${distro}" |
|
archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true |
|
} |
|
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true |
|
} |
|
} |
|
return myNode |
|
}) |
|
|
|
def ubuntuTrusty = ["ubuntu-trusty"] |
|
def ubuntuTrustyArch = [] |
|
if (params.BUILD_ALL == true) { |
|
ubuntuTrustyArch = ["i386", "amd64", "armhf", "arm64", "ppc64le"] |
|
} else { |
|
ubuntuTrustyArch = ["i386", "amd64"] |
|
} |
|
tasks << getTasks(ubuntuTrusty, ubuntuTrustyArch, { distro, arch -> |
|
def myNode = { |
|
node ('linux-build') { |
|
dir ("build") { |
|
checkout scm |
|
} |
|
def runtime = docker.image("ztbuild/${distro}-${arch}:latest") |
|
runtime.inside { |
|
sh "ls -la ." |
|
dir('build/') { |
|
sh "ls -la ." |
|
unstash "static-${arch}" |
|
sh "pwd" |
|
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one && file ./zerotier-one" |
|
sh "mv -f debian/rules.static debian/rules" |
|
sh "make debian" |
|
} |
|
sh "mkdir -p ${distro}" |
|
sh "mv *.deb ${distro}" |
|
archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true |
|
} |
|
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true |
|
} |
|
} |
|
return myNode |
|
}) |
|
|
|
def debianWheezy = ["debian-wheezy"] |
|
def debianWheezyArchs = [] |
|
if (params.BUILD_ALL == true) { |
|
debianWheezyArchs = ["armhf", "armel", "amd64", "i386"] |
|
} else { |
|
debianWheezyArchs = ["amd64", "i386"] |
|
} |
|
tasks << getTasks(debianJessie, debianJessieArch, { distro, arch -> |
|
def myNode = { |
|
node ('linux-build') { |
|
dir ("build") { |
|
checkout scm |
|
} |
|
def runtime = docker.image("ztbuild/${distro}-${arch}:latest") |
|
runtime.inside { |
|
dir('build/') { |
|
unstash "static-${arch}" |
|
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one && file ./zerotier-one" |
|
sh "mv -f debian/rules.wheezy.static debian/rules" |
|
sh "mv -f debian/control.wheezy debian/control" |
|
sh "make debian" |
|
} |
|
sh "mkdir -p ${distro}" |
|
sh "mv *.deb ${distro}" |
|
archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true |
|
} |
|
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true |
|
} |
|
} |
|
return myNode |
|
}) |
|
|
|
return tasks |
|
} |
|
|
|
def buildDebianNative() { |
|
def tasks = [:] |
|
def buster = ["debian-buster", "debian-stretch", "debian-bullseye", "debian-sid"] |
|
def busterArchs = [] |
|
if (params.BUILD_ALL) { |
|
busterArchs = ["s390x", "ppc64le", "i386", "armhf", "armel", "arm64", "amd64"] |
|
} else { |
|
busterArchs = ["amd64", "i386"] |
|
} |
|
|
|
def build = { distro, arch -> |
|
def myNode = { |
|
node ('linux-build') { |
|
dir ("build") { |
|
checkout scm |
|
} |
|
def runtime = docker.image("ztbuild/${distro}-${arch}:latest") |
|
runtime.inside { |
|
dir("build") { |
|
sh 'make debian' |
|
} |
|
sh "mkdir -p ${distro}" |
|
sh "mv *.deb ${distro}" |
|
archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true |
|
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true |
|
} |
|
} |
|
} |
|
return myNode |
|
} |
|
|
|
tasks << getTasks(buster, busterArchs, build) |
|
|
|
// bash is broken when running under QEMU-s390x on Xenial |
|
def xenial = ["ubuntu-xenial"] |
|
def xenialArchs = [] |
|
if (params.BUILD_ALL == true) { |
|
xenialArchs = ["i386", "amd64", "armhf", "arm64", "ppc64le"] |
|
} else { |
|
xenialArchs = ["i386", "amd64"] |
|
} |
|
tasks << getTasks(xenial, xenialArchs, build) |
|
|
|
def ubuntu = ["ubuntu-bionic", "ubuntu-eoan"] |
|
def ubuntuArchs = [] |
|
if (params.BUILD_ALL == true) { |
|
ubuntuArchs = ["i386", "amd64", "armhf", "arm64", "ppc64le", "s390x"] |
|
} else { |
|
ubuntuArchs = ["i386", "amd64"] |
|
} |
|
tasks << getTasks(ubuntu, ubuntuArchs, build) |
|
|
|
def kali = ["kali-rolling"] |
|
def kaliArchs = ["amd64"] |
|
tasks << getTasks(kali, kaliArchs, build) |
|
|
|
return tasks |
|
} |
|
|
|
def buildCentosNative() { |
|
def tasks = [:] |
|
|
|
def build = { distro, arch -> |
|
def myNode = { |
|
node ('linux-build') { |
|
dir ("build") { |
|
checkout scm |
|
} |
|
def runtime = docker.image("ztbuild/${distro}-${arch}:latest") |
|
runtime.inside { |
|
dir("build") { |
|
sh 'make -j4' |
|
sh 'make redhat' |
|
sh "mkdir -p ${distro}" |
|
sh "cp -av `find ~/rpmbuild/ -type f -name \"*.rpm\"` ${distro}/" |
|
archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true |
|
} |
|
|
|
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true |
|
} |
|
} |
|
} |
|
return myNode |
|
} |
|
|
|
def centos8 = ["centos8"] |
|
def centos8Archs = [] |
|
if (params.BUILD_ALL == true) { |
|
centos8Archs = ["amd64", "arm64", "ppc64le"] |
|
} else { |
|
centos8Archs = ["amd64"] |
|
} |
|
tasks << getTasks(centos8, centos8Archs, build) |
|
|
|
def centos7 = ["centos7"] |
|
def centos7Archs = ["amd64"] |
|
tasks << getTasks(centos7, centos7Archs, build) |
|
|
|
return tasks |
|
}
|
|
|