pipeline { agent { label 'linux' } options { timestamps() timeout(time: 20, unit: 'MINUTES') buildDiscarder(logRotator( numToKeepStr: '10', daysToKeepStr: '30', )) } parameters { string( name: 'MAKE_TARGET', description: 'Makefile target to build. Optional Parameter.', defaultValue: params.MAKE_TARGET ?: 'wakunode2', ) string( name: 'IMAGE_TAG', description: 'Name of Docker tag to push. Optional Parameter.', defaultValue: params.IMAGE_TAG ?: 'deploy-wakuv2-test', ) string( name: 'IMAGE_NAME', description: 'Name of Docker image to push.', defaultValue: params.IMAGE_NAME ?: 'statusteam/nim-waku', ) string( name: 'NIMFLAGS', description: 'Flags for Nim compilation.', defaultValue: params.NIMFLAGS ?: [ '--colors:off', '-d:disableMarchNative', '-d:chronicles_colors:none', '-d:insecure', ].join(' ') ) string( name: "LOG_LEVEL", description: "Chronicles log level (default: TRACE)", ) booleanParam( name: 'EXPERIMENTAL', description: 'Enable experimental features.', defaultValue: true ) booleanParam( name: 'DEBUG', description: 'Enable debug features (heaptrack).', defaultValue: false ) } stages { stage('Build') { steps { script { image = docker.build( "${params.IMAGE_NAME}:${env.GIT_COMMIT.take(8)}" + (params.EXPERIMENTAL ? "-experimental": ""), "--label=commit='${env.GIT_COMMIT.take(8)}' " + "--build-arg=MAKE_TARGET='${params.MAKE_TARGET}' " + "--build-arg=NIMFLAGS='${params.NIMFLAGS}' " + "--build-arg=EXPERIMENTAL='${params.EXPERIMENTAL}' " + (params.LOG_LEVEL != null ? "--build-arg=LOG_LEVEL='${params.LOG_LEVEL}' ": "") + "--target=${params.DEBUG ? "debug" : "prod"} ." ) } } } stage('Push') { steps { script { withDockerRegistry([credentialsId: "dockerhub-statusteam-auto", url: ""]) { image.push() image.push(env.IMAGE_TAG) } } } } } // stages post { success { script { discordNotify( header: 'Nim-Waku deployment successful!', cred: 'discord-waku-deployments-webhook', ) } } always { sh 'docker image prune -f' } } // post } // pipeline def discordNotify(Map args=[:]) { def opts = [ header: args.header ?: 'Deployment successful!', cred: args.cred ?: null, ] def repo = [ url: GIT_URL.minus('.git'), branch: GIT_BRANCH.minus('origin/'), commit: GIT_COMMIT.take(8), prev: ( env.GIT_PREVIOUS_SUCCESSFUL_COMMIT ?: env.GIT_PREVIOUS_COMMIT ?: 'master' ).take(8), ] wrap([$class: 'BuildUser']) { BUILD_USER_ID = env.BUILD_USER_ID } withCredentials([ string( credentialsId: opts.cred, variable: 'DISCORD_WEBHOOK', ), ]) { discordSend( link: env.BUILD_URL, result: currentBuild.currentResult, webhookURL: env.DISCORD_WEBHOOK, title: "${env.JOB_NAME}#${env.BUILD_NUMBER}", description: """ ${opts.header} Image: [`${IMAGE_NAME}:${IMAGE_TAG}`](https://hub.docker.com/r/${IMAGE_NAME}/tags?name=${IMAGE_TAG}) Branch: [`${repo.branch}`](${repo.url}/commits/${repo.branch}) Commit: [`${repo.commit}`](${repo.url}/commit/${repo.commit}) Diff: [`${repo.prev}...${repo.commit}`](${repo.url}/compare/${repo.prev}...${repo.commit}) By: [`${BUILD_USER_ID}`](${repo.url}/commits?author=${BUILD_USER_ID}) """, ) } }