From 76768df3591afda654554de78c6c0db2da9e7f27 Mon Sep 17 00:00:00 2001 From: Andy Thompson Date: Thu, 2 Nov 2023 09:32:17 +0000 Subject: [PATCH] Reorganise jenkinsfile twig templates and extract slack notification script --- application/overlay/Jenkinsfile.twig | 44 +------------------ .../_twig/Jenkinsfile/slack-notification.twig | 43 ++++++++++++++++++ .../overlay/_twig/Jenkinsfile/stages.twig | 16 +++---- .../_twig/Jenkinsfile/{ => stages}/build.twig | 0 .../Jenkinsfile/{ => stages}/deploy.twig | 0 .../Jenkinsfile/{ => stages}/publish.twig | 0 .../_twig/Jenkinsfile/{ => stages}/setup.twig | 0 .../{ => stages}/test-end-to-end.twig | 0 .../_twig/Jenkinsfile/{ => stages}/test.twig | 0 9 files changed, 52 insertions(+), 51 deletions(-) create mode 100644 application/overlay/_twig/Jenkinsfile/slack-notification.twig rename application/overlay/_twig/Jenkinsfile/{ => stages}/build.twig (100%) rename application/overlay/_twig/Jenkinsfile/{ => stages}/deploy.twig (100%) rename application/overlay/_twig/Jenkinsfile/{ => stages}/publish.twig (100%) rename application/overlay/_twig/Jenkinsfile/{ => stages}/setup.twig (100%) rename application/overlay/_twig/Jenkinsfile/{ => stages}/test-end-to-end.twig (100%) rename application/overlay/_twig/Jenkinsfile/{ => stages}/test.twig (100%) diff --git a/application/overlay/Jenkinsfile.twig b/application/overlay/Jenkinsfile.twig index 1b421d3..e1a7e34 100644 --- a/application/overlay/Jenkinsfile.twig +++ b/application/overlay/Jenkinsfile.twig @@ -17,49 +17,7 @@ pipeline { post { {% if @('jenkins.notifications.slack.channel') and @('jenkins.notifications.slack.token_credential_id') %} failure { - script { - def message = "{% if @('jenkins.notifications.global.full_build_name') %}${env.JOB_NAME}{% else %}${env.JOB_BASE_NAME}{% endif %} #${env.BUILD_NUMBER} - Failure after ${currentBuild.durationString.minus(' and counting')} (<${env.RUN_DISPLAY_URL}|View Build>)" - def fallbackMessages = [ message ] - def fields = [] - -{% if @('jenkins.notifications.global.branch_link_template') and @('jenkins.notifications.global.commit_link_template') %} - def shortCommitHash = "${GIT_COMMIT}".substring(0, 7) - def commitLink = "commit <{{ @('jenkins.notifications.global.commit_link_template') }}".replace('GIT_COMMIT', GIT_COMMIT) + "|${shortCommitHash}>" - def gitMessage = "Branch <{{ @('jenkins.notifications.global.branch_link_template') }}".replace('GIT_BRANCH', GIT_BRANCH) + "|${GIT_BRANCH}> at ${commitLink}" - - if (env.CHANGE_URL) { - // Jenkins builds pull requests by merging the pull request branch into the pull request's target branch, - // so we build on commits that do not technically exist and can't link to them. - gitMessage = "<${env.CHANGE_URL}|{{ @('jenkins.notifications.global.change_request_name') }} #${env.CHANGE_ID}> ${env.CHANGE_TITLE}{% if @('jenkins.notifications.global.change_request_build_on_merge') %} - merged into target branch " + "<{{ @('jenkins.notifications.global.branch_link_template') }}".replace('GIT_BRANCH', CHANGE_TARGET) + "|${CHANGE_TARGET}>{% endif %}" - } - fields << [ - title: 'Source', - value: gitMessage, - short: false - ] - fallbackMessages << gitMessage -{% endif %} - - def failureMessage = failureMessages.join("\n") - if (failureMessage) { - fields << [ - title: 'Reason(s)', - value: failureMessage, - short: false - ] - fallbackMessages << failureMessage - } - def attachments = [ - [ - text: message, - fallback: fallbackMessages.join("\n"), - color: 'danger', - fields: fields - ] - ] - - slackSend (channel: '{{ @('jenkins.notifications.slack.channel') }}', color: 'danger', attachments: attachments, tokenCredentialId: '{{ @('jenkins.notifications.slack.token_credential_id') }}') - } +{% include blocks ~ 'slack-notification.twig' %} } {% endif %} always { diff --git a/application/overlay/_twig/Jenkinsfile/slack-notification.twig b/application/overlay/_twig/Jenkinsfile/slack-notification.twig new file mode 100644 index 0000000..5be4640 --- /dev/null +++ b/application/overlay/_twig/Jenkinsfile/slack-notification.twig @@ -0,0 +1,43 @@ + script { + def message = "{% if @('jenkins.notifications.global.full_build_name') %}${env.JOB_NAME}{% else %}${env.JOB_BASE_NAME}{% endif %} #${env.BUILD_NUMBER} - Failure after ${currentBuild.durationString.minus(' and counting')} (<${env.RUN_DISPLAY_URL}|View Build>)" + def fallbackMessages = [ message ] + def fields = [] + +{% if @('jenkins.notifications.global.branch_link_template') and @('jenkins.notifications.global.commit_link_template') %} + def shortCommitHash = "${GIT_COMMIT}".substring(0, 7) + def commitLink = "commit <{{ @('jenkins.notifications.global.commit_link_template') }}".replace('GIT_COMMIT', GIT_COMMIT) + "|${shortCommitHash}>" + def gitMessage = "Branch <{{ @('jenkins.notifications.global.branch_link_template') }}".replace('GIT_BRANCH', GIT_BRANCH) + "|${GIT_BRANCH}> at ${commitLink}" + + if (env.CHANGE_URL) { + // Jenkins builds pull requests by merging the pull request branch into the pull request's target branch, + // so we build on commits that do not technically exist and can't link to them. + gitMessage = "<${env.CHANGE_URL}|{{ @('jenkins.notifications.global.change_request_name') }} #${env.CHANGE_ID}> ${env.CHANGE_TITLE}{% if @('jenkins.notifications.global.change_request_build_on_merge') %} - merged into target branch " + "<{{ @('jenkins.notifications.global.branch_link_template') }}".replace('GIT_BRANCH', CHANGE_TARGET) + "|${CHANGE_TARGET}>{% endif %}" + } + fields << [ + title: 'Source', + value: gitMessage, + short: false + ] + fallbackMessages << gitMessage +{% endif %} + + def failureMessage = failureMessages.join("\n") + if (failureMessage) { + fields << [ + title: 'Reason(s)', + value: failureMessage, + short: false + ] + fallbackMessages << failureMessage + } + def attachments = [ + [ + text: message, + fallback: fallbackMessages.join("\n"), + color: 'danger', + fields: fields + ] + ] + + slackSend (channel: '{{ @('jenkins.notifications.slack.channel') }}', color: 'danger', attachments: attachments, tokenCredentialId: '{{ @('jenkins.notifications.slack.token_credential_id') }}') + } \ No newline at end of file diff --git a/application/overlay/_twig/Jenkinsfile/stages.twig b/application/overlay/_twig/Jenkinsfile/stages.twig index 0fe13d4..24030f0 100644 --- a/application/overlay/_twig/Jenkinsfile/stages.twig +++ b/application/overlay/_twig/Jenkinsfile/stages.twig @@ -1,14 +1,14 @@ {% set blocks = 'application/overlay/_twig/Jenkinsfile/' %} {% if @('jenkins.tests.isolated') %} -{% include blocks ~ 'setup.twig' %} -{% include blocks ~ 'test.twig' %} -{% include blocks ~ 'build.twig' %} -{% include blocks ~ 'test-end-to-end.twig' %} +{% include blocks ~ 'stages/setup.twig' %} +{% include blocks ~ 'stages/test.twig' %} +{% include blocks ~ 'stages/build.twig' %} +{% include blocks ~ 'stages/test-end-to-end.twig' %} {% else %} -{% include blocks ~ 'build.twig' %} -{% include blocks ~ 'test.twig' %} +{% include blocks ~ 'stages/build.twig' %} +{% include blocks ~ 'stages/test.twig' %} {% endif %} -{% include blocks ~ 'publish.twig' %} -{% include blocks ~ 'deploy.twig' %} \ No newline at end of file +{% include blocks ~ 'stages/publish.twig' %} +{% include blocks ~ 'stages/deploy.twig' %} diff --git a/application/overlay/_twig/Jenkinsfile/build.twig b/application/overlay/_twig/Jenkinsfile/stages/build.twig similarity index 100% rename from application/overlay/_twig/Jenkinsfile/build.twig rename to application/overlay/_twig/Jenkinsfile/stages/build.twig diff --git a/application/overlay/_twig/Jenkinsfile/deploy.twig b/application/overlay/_twig/Jenkinsfile/stages/deploy.twig similarity index 100% rename from application/overlay/_twig/Jenkinsfile/deploy.twig rename to application/overlay/_twig/Jenkinsfile/stages/deploy.twig diff --git a/application/overlay/_twig/Jenkinsfile/publish.twig b/application/overlay/_twig/Jenkinsfile/stages/publish.twig similarity index 100% rename from application/overlay/_twig/Jenkinsfile/publish.twig rename to application/overlay/_twig/Jenkinsfile/stages/publish.twig diff --git a/application/overlay/_twig/Jenkinsfile/setup.twig b/application/overlay/_twig/Jenkinsfile/stages/setup.twig similarity index 100% rename from application/overlay/_twig/Jenkinsfile/setup.twig rename to application/overlay/_twig/Jenkinsfile/stages/setup.twig diff --git a/application/overlay/_twig/Jenkinsfile/test-end-to-end.twig b/application/overlay/_twig/Jenkinsfile/stages/test-end-to-end.twig similarity index 100% rename from application/overlay/_twig/Jenkinsfile/test-end-to-end.twig rename to application/overlay/_twig/Jenkinsfile/stages/test-end-to-end.twig diff --git a/application/overlay/_twig/Jenkinsfile/test.twig b/application/overlay/_twig/Jenkinsfile/stages/test.twig similarity index 100% rename from application/overlay/_twig/Jenkinsfile/test.twig rename to application/overlay/_twig/Jenkinsfile/stages/test.twig