| #!/usr/bin/env groovy |
| |
| library 'functions' |
| |
| def boardName = params.boardName |
| def releaseName = params.releaseName |
| def workspacePath = "/home/jenkins/workspace" |
| def buildLabel = "image.${releaseName}.${boardName}-${UUID.randomUUID().toString()}" |
| def sourcePath = "${workspacePath}/src" |
| |
| // FIXME(jtgans): Get rid of privileged! This is a security risk! |
| def jnlpContainer = containerTemplate(name: 'jnlp', |
| image: 'jenkins/jnlp-slave:alpine') |
| def debianContainer = containerTemplate(name: 'debian', |
| image: 'gcr.io/mendel-linux-cloud-infra/mendel-builder:latest', |
| command: 'cat', |
| args: '', |
| ttyEnabled: true, |
| privileged: true) |
| def aptlyVolume = persistentVolumeClaim(claimName: 'aptly-state', mountPath: '/var/lib/aptly') |
| |
| podTemplate(label: buildLabel, containers: [jnlpContainer, debianContainer], volumes: [aptlyVolume], envVars: []) { |
| node(buildLabel) { |
| dir(sourcePath) { |
| container('debian') { |
| def envVars = [ |
| 'IS_JENKINS=true', |
| "RELEASE_NAME=${releaseName}", |
| 'USER=root' |
| ] |
| |
| withEnv(envVars) { |
| stage('Init') { |
| functions.initSourceTree(boardName, false /* needsNative */) |
| } |
| |
| stage('Build') { |
| def nprocs = sh(returnStdout: true, script: 'nproc').trim() |
| sh "bash -c 'source build/setup.sh; m -j${nprocs} prereqs dist; exit \$?'" |
| } |
| |
| stage('Deploy') { |
| def imagePath = "/var/lib/aptly/images/${boardName}/${releaseName}" |
| def files = findFiles(glob: "out/**/dist/*") |
| |
| if (files.size() == 0) { |
| error 'No dist files generated. Assuming failed build.' |
| } |
| |
| sh "mkdir -p ${imagePath}" |
| |
| for (file in files) { |
| sh "cp ${file} ${imagePath}" |
| } |
| } |
| } |
| } |
| } |
| } |
| } |