Skip to content
Snippets Groups Projects

Wip/martyn/u boot installer

Merged Martyn Welch requested to merge WIP/martyn/u-boot_installer into apertis/v2019dev0
All threads resolved!
Compare and Show latest version
1 file
+ 70
47
Compare changes
  • Side-by-side
  • Inline
+ 70
47
@@ -38,7 +38,6 @@ def architectures = [
boards: ['uefi'],
types: [
minimal: [
ospack: true,
image: true,
sysroot: false,
ostree: true,
@@ -46,14 +45,12 @@ def architectures = [
],
target: [
args: "-t demopack:${demopack}",
ospack: true,
image: true,
sysroot: false,
//ostree: true,
],/*
sysroot: [
args: '--scratchsize 10G',
ospack: true,
image: false,
sysroot: true,
ostree: false,
@@ -61,7 +58,6 @@ def architectures = [
sdk: [
args: "-t demopack:${demopack} -t sampleappscheckout:enabled --scratchsize 10G",
boards: [ 'sdk' ],
ospack: true,
image: true,
sysroot: false,
ostree: false,
@@ -72,7 +68,6 @@ def architectures = [
basesdk: [
args: '--scratchsize 10G',
boards: [ 'sdk' ],
ospack: true,
image: true,
sysroot: false,
ostree: false,
@@ -87,21 +82,18 @@ def architectures = [
boards: ['uboot'],
types: [
minimal: [
ospack: true,
image: true,
sysroot: false,
ostree: true,
],
target: [
args: "-t demopack:${demopack}",
ospack: true,
image: true,
sysroot: false,
//ostree: true,
],/*
sysroot: [
args: '--scratchsize 10G',
ospack: true,
image: false,
sysroot: true,
ostree: false,
@@ -112,32 +104,28 @@ def architectures = [
boards: ['uboot'],
types: [
minimal: [
ospack: true,
image: true,
sysroot: false,
ostree: true
],/*
sysroot: [
args: '--scratchsize 10G',
ospack: true,
image: false,
sysroot: true,
ostree: false
],
devroot: [
args: '--scratchsize 10G',
ospack: true,
image: false,
sysroot: false,
ostree: false
]*/
installer: [
installers: [ 'mx6qsabrelite' ]
]
]
]
]
def installers = [ 'mx6sabrelite' ]
properties([
parameters([
string(name: 'buildOnly', defaultValue: '', description: 'If set, only the selected images are built. Comma and slash separated, e.g. armhf/minimal, amd64/target', trim: true),
@@ -396,23 +384,67 @@ def buildSysroot(architecture, type, debosarguments = "") {
}
}
def buildInstaller(architecture, type, target, debosarguments = "") {
def image_name = "u-boot-installer-${target}"
def buildInstallers(installers) {
return {
node("docker-slave") {
checkout scm
docker.withRegistry("https://${docker_registry_name}") {
buildenv = docker.image(docker_image_name)
/* Pull explicitly to ensure we have the latest */
buildenv.pull()
stage("${architecture} ${target} installer image") {
sh(script: """
mkdir -p ${PIPELINE_VERSION}/${architecture}/${type}/${target}
cd ${PIPELINE_VERSION}/${architecture}/${type}/${target}
debos ${debosarguments} \
--show-boot \
-t architecture:${architecture} \
-t target:${target} \
-t mirror:${installer_repo_url} \
-t suite:${release} \
-t timestamp:${PIPELINE_VERSION} \
-t image:${image_name} \
${WORKSPACE}/uboot-installer.yaml""")
buildenv.inside("--device=/dev/kvm") {
stage("setup installers") {
env.PIPELINE_VERSION = VersionNumber(versionNumberString: '${BUILD_DATE_FORMATTED,"yyyyMMdd"}.${BUILDS_TODAY_Z}')
sh ("env ; mkdir -p ${PIPELINE_VERSION}/installer")
}
def buildStatus = [:]
try {
for(String target: installers) {
try {
stage("${target} installer image") {
sh(script: """
mkdir -p ${PIPELINE_VERSION}/installer/${target}")
cd ${PIPELINE_VERSION}/installer/${target}
debos --show-boot \
-t target:${target} \
-t mirror:${installer_repo_url} \
-t suite:${release} \
-t timestamp:${PIPELINE_VERSION} \
-t image:u-boot-installer-${target} \
${WORKSPACE}/uboot-installer.yaml""")
}
buildStatus["installer-${target}"] = true
} catch (e) {
// If image build failed -- do not fail other types but do not need to start tests for it
buildStatus["installer-${target}"] = false
}
}
// Mark the whole pipeline as failed in case of failure at any stage
if (buildStatus.containsValue(false)) {
currentBuild.result = 'FAILURE'
// mark builds where some artifacts have failed to build
dir ("${env.PIPELINE_VERSION}/meta/") {
writeFile (file: "failed-installers", text: '')
}
}
// Upload artifacts
stage("installers upload") {
uploadDirectory (env.PIPELINE_VERSION, "installers/${release}")
}
} finally {
stage("Cleanup installers") {
deleteDir()
}
}
}
}
}
}
}
@@ -422,7 +454,7 @@ def buildInstaller(architecture, type, target, debosarguments = "") {
*
* @boards -- array with board names
*/
def buildImages(architecture, type, boards, debosarguments = "", ospack = true, image = true, sysroot = false, installers = [], ostree = false, lxc = false, production = false) {
def buildImages(architecture, type, boards, debosarguments = "", image = true, sysroot = false, ostree = false, lxc = false, production = false) {
return {
node("docker-slave") {
checkout scm
@@ -447,10 +479,8 @@ def buildImages(architecture, type, boards, debosarguments = "", ospack = true,
// The real work starts here
try {
if (ospack) {
// If that fails -- do not need to build the rest
buildOSpack(architecture, type, debosarguments)
}
// If that fails -- do not need to build the rest
buildOSpack(architecture, type, debosarguments)
if (image) {
// Create apt-based images for all boards
@@ -501,17 +531,6 @@ def buildImages(architecture, type, boards, debosarguments = "", ospack = true,
}
}
// Create installer
for(String installer: installers) {
try {
buildInstaller(architecture, type, installer, debosarguments)
buildStatus["installer"] = true
} catch (e) {
// If image build failed -- do not fail other types but do not need to start tests for it
buildStatus["installer"] = false
}
}
// Mark the whole pipeline as failed in case of failure at any stage
if (buildStatus.containsValue(false)) {
currentBuild.result = 'FAILURE'
@@ -582,17 +601,21 @@ buildCandidates.each { name, arch ->
if (!params.requires) {
/* first, build all jobs which don’t have any dependencies, in parallel */
first_pass << [("$name $type"):
buildImages(name, type, merged.boards, merged.args, merged.ospack, merged.image, merged.sysroot, merged.installers, merged.ostree, merged.lxc, production)
buildImages(name, type, merged.boards, merged.args, merged.image, merged.sysroot, merged.ostree, merged.lxc, production)
]
} else {
/* second, build any jobs which depend on jobs from the first pass, also in parallel */
second_pass << [("$name $type"):
buildImages(name, type, merged.boards, merged.args, merged.ospack, merged.image, merged.sysroot, merged.installers, merged.ostree, merged.lxc, production)
buildImages(name, type, merged.boards, merged.args, merged.image, merged.sysroot, merged.ostree, merged.lxc, production)
]
}
}
}
/* Add installer */
first_pass << [("$name $type"):
buildInstallers(installers)
]
parallel first_pass
parallel second_pass
Loading