docker-amiga-gcc/Jenkinsfile

126 lines
3.7 KiB
Plaintext
Raw Normal View History

2020-06-06 14:22:28 +00:00
def notify(status){
emailext (
body: '$DEFAULT_CONTENT',
recipientProviders: [
[$class: 'CulpritsRecipientProvider'],
[$class: 'DevelopersRecipientProvider'],
[$class: 'RequesterRecipientProvider']
],
replyTo: '$DEFAULT_REPLYTO',
subject: '$DEFAULT_SUBJECT',
to: '$DEFAULT_RECIPIENTS'
);
2020-06-06 14:22:28 +00:00
}
@NonCPS
def killall_jobs() {
def jobname = env.JOB_NAME;
def buildnum = env.BUILD_NUMBER.toInteger();
def killnums = "";
def job = Jenkins.instance.getItemByFullName(jobname);
def fixed_job_name = env.JOB_NAME.replace('%2F','/');
2020-06-06 14:22:28 +00:00
for (build in job.builds) {
if (!build.isBuilding()) { continue; }
if (buildnum == build.getNumber().toInteger()) { continue; println "equals" }
if (buildnum < build.getNumber().toInteger()) { continue; println "newer" }
echo "Kill task = ${build}";
2020-06-06 14:22:28 +00:00
killnums += "#" + build.getNumber().toInteger() + ", ";
2020-06-06 14:22:28 +00:00
build.doStop();
}
if (killnums != "") {
2023-01-30 10:32:26 +00:00
//slackSend color: "danger", channel: "#jenkins", message: "Killing task(s) ${fixed_job_name} ${killnums} in favor of #${buildnum}, ignore following failed builds for ${killnums}";
2020-06-06 14:22:28 +00:00
}
echo "Done killing";
2020-06-06 14:22:28 +00:00
}
2023-05-12 11:47:25 +00:00
def buildStep(DOCKER_ROOT, DOCKERIMAGE, DOCKERTAG, DOCKERFILE, BUILD_NEXT, BUILD_OS, PREFIX) {
def fixed_job_name = env.JOB_NAME.replace('%2F','/');
2020-06-06 14:22:28 +00:00
try {
checkout scm;
def buildenv = '';
def tag = '';
if (env.BRANCH_NAME.equals('master')) {
buildenv = 'production';
tag = "${DOCKERTAG}";
} else if (env.BRANCH_NAME.equals('dev')) {
buildenv = 'development';
tag = "${DOCKERTAG}-dev";
} else {
throw new Exception("Invalid branch, stopping build!");
}
2023-05-12 11:47:25 +00:00
if (PREFIX.equals('')) {
PREFIX = "${tag}";
}
2020-06-06 14:22:28 +00:00
docker.withRegistry("https://index.docker.io/v1/", "dockerhub") {
def customImage
stage("Building ${DOCKERIMAGE}:${tag}...") {
2023-05-12 11:47:25 +00:00
customImage = docker.build("${DOCKER_ROOT}/${DOCKERIMAGE}:${tag}", "--build-arg BUILDENV=${buildenv} --build-arg BUILD_OS=${BUILD_OS} --build-arg BUILD_PFX=${tag} --build-arg PREFIX=${PREFIX} --network=host --pull -f ${DOCKERFILE} .");
2020-06-06 14:22:28 +00:00
}
stage("Pushing to docker hub registry...") {
customImage.push();
}
}
if (!BUILD_NEXT.equals('')) {
build "${BUILD_NEXT}/${env.BRANCH_NAME}";
}
} catch(err) {
2023-01-30 10:32:26 +00:00
//slackSend color: "danger", channel: "#jenkins", message: "Build Failed: ${fixed_job_name} #${env.BUILD_NUMBER} Target: ${DOCKER_ROOT}/${DOCKERIMAGE}:${DOCKERTAG} (<${env.BUILD_URL}|Open>)"
2020-06-06 14:22:28 +00:00
currentBuild.result = 'FAILURE'
2023-01-30 10:32:26 +00:00
notify("Build Failed: ${fixed_job_name} #${env.BUILD_NUMBER} Target: ${DOCKER_ROOT}/${DOCKERIMAGE}:${DOCKERTAG}")
2020-06-06 14:22:28 +00:00
throw err
}
}
2022-01-01 22:52:36 +00:00
properties([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'StringParameterDefinition', name: 'BUILD_IMAGE', defaultValue: 'all']]]])
2020-06-06 14:22:28 +00:00
node('master') {
2022-01-01 22:26:12 +00:00
if (BUILD_IMAGE.equals('all')) {
killall_jobs();
}
2020-06-06 14:22:28 +00:00
def fixed_job_name = env.JOB_NAME.replace('%2F','/');
2023-01-30 10:32:26 +00:00
//slackSend color: "good", channel: "#jenkins", message: "Build Started: ${fixed_job_name} #${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)";
2020-06-06 14:22:28 +00:00
checkout scm;
def branches = [:];
2020-06-06 14:22:28 +00:00
def project = readJSON file: "JenkinsEnv.json";
2022-01-01 22:26:12 +00:00
if (BUILD_IMAGE.equals('all')) {
project.builds.each { v ->
branches["Build ${v.DockerRoot}/${v.DockerImage}:${v.DockerTag}"] = {
node {
2023-05-12 11:47:25 +00:00
buildStep(v.DockerRoot, v.DockerImage, v.DockerTag, v.Dockerfile, v.BuildIfSuccessful, v.BuildParam, v.Prefix);
2022-01-01 22:26:12 +00:00
}
2020-06-06 14:22:28 +00:00
}
}
2022-01-01 22:26:12 +00:00
} else {
2022-01-01 23:23:48 +00:00
echo("Building: ${BUILD_IMAGE}");
project.builds.each { v ->
2022-01-01 23:46:12 +00:00
if ("${v.DockerTag}".equals("${BUILD_IMAGE}")) {
2022-01-01 23:23:48 +00:00
branches["Build ${v.DockerRoot}/${v.DockerImage}:${v.DockerTag}"] = {
node {
2023-05-12 11:47:25 +00:00
buildStep(v.DockerRoot, v.DockerImage, v.DockerTag, v.Dockerfile, v.BuildIfSuccessful, v.BuildParam, v.Prefix);
2022-01-01 23:23:48 +00:00
}
}
}
}
2020-06-06 14:22:28 +00:00
}
sh "rm -rf ./*"
parallel branches;
}