
Story: 2010226 Task: 46011 Change-Id: I721f1509637b910c05e4151eeb7ad7e1cb8db119 Signed-off-by: Davlet Panech <davlet.panech@windriver.com>
270 lines
7.6 KiB
Plaintext
270 lines
7.6 KiB
Plaintext
// vim: syn=groovy
|
|
|
|
//
|
|
// Copyright (c) 2022 Wind River Systems, Inc.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
library "common@${params.JENKINS_SCRIPTS_BRANCH}"
|
|
|
|
def parseProps(text) {
|
|
def x = {}
|
|
for (line in text.split (/\n+/)) {
|
|
if (line.matches (/\s*(?:#.*)?#/)) {
|
|
continue
|
|
}
|
|
parts = line.split ("=", 2)
|
|
key = parts[0]
|
|
value = parts[1]
|
|
x."${key}" = value
|
|
}
|
|
return x
|
|
}
|
|
|
|
def loadEnv() {
|
|
def data = {}
|
|
data.NEED_BUILD = false
|
|
ws(params.BUILD_HOME) {
|
|
if (fileExists ("NEED_BUILD")) {
|
|
data.NEED_BUILD = true
|
|
}
|
|
}
|
|
final String configText = sh (script: "${Constants.SCRIPTS_DIR}/print-config.sh", returnStdout: true)
|
|
final props = parseProps (configText)
|
|
data.BUILD_OUTPUT_HOME_URL = props.BUILD_OUTPUT_HOME_URL
|
|
data.PUBLISH_URL = props.PUBLISH_URL
|
|
return data
|
|
}
|
|
|
|
def PROPS = null
|
|
def IMG_PARAMS = null
|
|
|
|
def partJobName (name) {
|
|
final String folder = env.JOB_NAME.replaceAll (/(.*\/).+$/, '$1');
|
|
if (folder == env.JOB_NAME) {
|
|
error "This job must be in a Jenkins folder!"
|
|
}
|
|
return "/" + folder + "parts/" + name
|
|
}
|
|
|
|
def runPart (name, params = []) {
|
|
build job: partJobName (name), parameters: copyCurrentParams() + params
|
|
}
|
|
|
|
def printBuildFooter(final props) {
|
|
if (props) {
|
|
String msg = ""
|
|
msg += "\n"
|
|
msg += "========================================\n"
|
|
msg += "\n"
|
|
if (props.NEED_BUILD) {
|
|
msg += "Build output: ${props.BUILD_OUTPUT_HOME_URL}\n"
|
|
if (props.PUBLISH_URL) {
|
|
msg += "Publish output: ${props.PUBLISH_URL}\n"
|
|
}
|
|
}
|
|
else {
|
|
echo "*** NO CHANGES - BUILD NOT REQUIRED"
|
|
}
|
|
msg += "\n"
|
|
msg += "========================================\n"
|
|
msg += "\n"
|
|
echo (msg)
|
|
}
|
|
}
|
|
|
|
setBuildDescr()
|
|
|
|
pipeline {
|
|
agent any
|
|
options {
|
|
timestamps()
|
|
}
|
|
parameters {
|
|
string (
|
|
name: 'MASTER_JOB_NAME'
|
|
)
|
|
string (
|
|
name: 'MASTER_BUILD_NUMBER'
|
|
)
|
|
string (
|
|
name: 'BUILD_HOME'
|
|
)
|
|
string (
|
|
name: 'TIMESTAMP',
|
|
)
|
|
string (
|
|
name: 'PUBLISH_TIMESTAMP'
|
|
)
|
|
booleanParam (
|
|
name: 'REBUILD_BUILDER_IMAGES'
|
|
)
|
|
booleanParam (
|
|
name: 'REFRESH_SOURCE'
|
|
)
|
|
booleanParam (
|
|
name: 'BUILD_PACKAGES'
|
|
)
|
|
string (
|
|
name: 'BUILD_PACKAGES_LIST'
|
|
)
|
|
booleanParam (
|
|
name: 'BUILD_ISO'
|
|
)
|
|
booleanParam (
|
|
name: 'BUILD_RT'
|
|
)
|
|
booleanParam (
|
|
name: 'DRY_RUN'
|
|
)
|
|
booleanParam (
|
|
name: 'CLEAN_PACKAGES'
|
|
)
|
|
booleanParam (
|
|
name: 'CLEAN_ISO'
|
|
)
|
|
booleanParam (
|
|
name: 'CLEAN_REPOMGR'
|
|
)
|
|
booleanParam (
|
|
name: 'CLEAN_DOWNLOADS'
|
|
)
|
|
booleanParam (
|
|
name: 'CLEAN_DOCKER'
|
|
)
|
|
booleanParam (
|
|
name: 'FORCE_BUILD'
|
|
)
|
|
booleanParam (
|
|
name: 'FORCE_BUILD_WHEELS'
|
|
)
|
|
string (
|
|
name: 'DOCKER_IMAGE_LIST'
|
|
)
|
|
booleanParam (
|
|
name: 'BUILD_DOCKER_IMAGES'
|
|
)
|
|
booleanParam (
|
|
name: 'PUSH_DOCKER_IMAGES'
|
|
)
|
|
booleanParam (
|
|
name: 'BUILD_HELM_CHARTS'
|
|
)
|
|
booleanParam (
|
|
name: 'IMPORT_BUILD'
|
|
)
|
|
string (
|
|
name: 'IMPORT_BUILD_DIR'
|
|
)
|
|
booleanParam (
|
|
name: 'USE_DOCKER_CACHE',
|
|
)
|
|
string (
|
|
name: 'JENKINS_SCRIPTS_BRANCH'
|
|
)
|
|
|
|
}
|
|
stages {
|
|
stage('INIT') {
|
|
steps {
|
|
script {
|
|
runPart ("init-env")
|
|
runPart ("stop-containers")
|
|
runPart ("clone-source")
|
|
runPart ("create-changelog")
|
|
PROPS = loadEnv()
|
|
if (!PROPS.NEED_BUILD) {
|
|
println "*** NO CHANGES, BUILD NOT REQUIRED ***"
|
|
}
|
|
IMG_PARAMS = [ string (name: 'BUILD_STREAM', value: 'stable') ]
|
|
}
|
|
}
|
|
}
|
|
stage('X0') {
|
|
when { expression { PROPS.NEED_BUILD } }
|
|
stages {
|
|
stage('PREPARE') {
|
|
steps {
|
|
runPart ("clean-build")
|
|
runPart ("configure-build")
|
|
runPart ("start-containers")
|
|
runPart ("docker-login")
|
|
}
|
|
}
|
|
stage('DOWNLOAD') {
|
|
steps {
|
|
runPart ("download-prerequisites")
|
|
}
|
|
}
|
|
stage('PACKAGES') {
|
|
when { expression { params.BUILD_PACKAGES } }
|
|
steps {
|
|
runPart ("build-packages")
|
|
runPart ("publish-packages")
|
|
}
|
|
}
|
|
stage('X1') { parallel {
|
|
stage('ISO') {
|
|
when { expression { params.BUILD_ISO } }
|
|
steps {
|
|
runPart ("build-iso")
|
|
runPart ("publish-iso")
|
|
}
|
|
} // stage('ISO')
|
|
stage('IMAGES') {
|
|
when { expression { params.BUILD_DOCKER_IMAGES } }
|
|
stages {
|
|
stage('IMAGES:wheels') { steps { script {
|
|
runPart ("build-wheels", IMG_PARAMS)
|
|
runPart ("publish-wheels", IMG_PARAMS)
|
|
} } }
|
|
stage('IMAGES:base') { steps { script {
|
|
runPart ("build-docker-base", IMG_PARAMS)
|
|
runPart ("build-docker-images", IMG_PARAMS)
|
|
} } }
|
|
stage('IMAGES:images') { steps { script {
|
|
runPart ("build-docker-images", IMG_PARAMS)
|
|
runPart ("publish-docker-images", IMG_PARAMS)
|
|
} } }
|
|
stage('IMAGES:helm') {
|
|
when { expression { params.BUILD_HELM_CHARTS } }
|
|
steps { script {
|
|
runPart ("build-helm-charts", IMG_PARAMS)
|
|
runPart ("publish-helm-charts", IMG_PARAMS)
|
|
} }
|
|
}
|
|
}
|
|
} // stage('IMAGES')
|
|
} }// stage('X1')
|
|
} // stages
|
|
|
|
post {
|
|
always {
|
|
runPart ("stop-containers")
|
|
notAborted {
|
|
runPart ("archive-misc")
|
|
}
|
|
}
|
|
success {
|
|
sh ("BUILD_STATUS=success ${Constants.SCRIPTS_DIR}/record-build-status.sh")
|
|
}
|
|
unsuccessful {
|
|
sh ("BUILD_STATUS=fail ${Constants.SCRIPTS_DIR}/record-build-status.sh")
|
|
}
|
|
}
|
|
} // stage X0
|
|
} // stages
|
|
|
|
post {
|
|
cleanup {
|
|
saveCurrentJenkinsBuildInfo()
|
|
notAborted {
|
|
runPart ("publish-logs")
|
|
}
|
|
printBuildFooter (PROPS)
|
|
}
|
|
}
|
|
}
|
|
|