Skip to content

Commit

Permalink
updated jenkins workflow for qa builds
Browse files Browse the repository at this point in the history
  • Loading branch information
brianpeiris committed Jan 14, 2021
1 parent d185cf5 commit 8ad1657
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 32 deletions.
105 changes: 74 additions & 31 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -1,19 +1,5 @@
import groovy.json.JsonOutput

// From https://issues.jenkins-ci.org/browse/JENKINS-44231

// Given arbitrary string returns a strongly escaped shell string literal.
// I.e. it will be in single quotes which turns off interpolation of $(...), etc.
// E.g.: 1'2\3\'4 5"6 (groovy string) -> '1'\''2\3\'\''4 5"6' (groovy string which can be safely pasted into shell command).
def shellString(s) {
// Replace ' with '\'' (https://unix.stackexchange.com/a/187654/260156). Then enclose with '...'.
// 1) Why not replace \ with \\? Because '...' does not treat backslashes in a special way.
// 2) And why not use ANSI-C quoting? I.e. we could replace ' with \'
// and enclose using $'...' (https://stackoverflow.com/a/8254156/4839573).
// Because ANSI-C quoting is not yet supported by Dash (default shell in Ubuntu & Debian) (https://unix.stackexchange.com/a/371873).
'\'' + s.replace('\'', '\'\\\'\'') + '\''
}

pipeline {
agent any

Expand Down Expand Up @@ -43,14 +29,37 @@ pipeline {
def slackURL = env.SLACK_URL
def sentryDsn = env.SENTRY_DSN
def gaTrackingId = env.GA_TRACKING_ID
def buildNumber = env.BUILD_NUMBER
def gitCommit = env.GIT_COMMIT
def jobName = env.JOB_NAME
def disableDeploy = env.DISABLE_DEPLOY
def showQAPromoteCommand = env.SHOW_QA_PROMOTE_COMMAND
def qaBuildsSlackChannel = env.QA_BUILDS_SLACK_CHANNEL

def habCommand = "/bin/bash scripts/hab-build-and-push.sh \\\"${baseAssetsPath}\\\" \\\"${hubsServer}\\\" \\\"${reticulumServer}\\\" \\\"${thumbnailServer}\\\" \\\"${corsProxyServer}\\\" \\\"${nonCorsProxyDomains}\\\" \\\"${sentryDsn}\\\" \\\"${gaTrackingId}\\\" \\\"${targetS3Bucket}\\\" \\\"${isMoz}\\\" \\\"${env.BUILD_NUMBER}\\\" \\\"${env.GIT_COMMIT}\\\""
sh "/usr/bin/script --return -c ${shellString(habCommand)} /dev/null"
def habCommand = (
"/bin/bash scripts/hab-build-and-push.sh "
+ "\\\"${baseAssetsPath}\\\" "
+ "\\\"${hubsServer}\\\" "
+ "\\\"${reticulumServer}\\\" "
+ "\\\"${thumbnailServer}\\\" "
+ "\\\"${corsProxyServer}\\\" "
+ "\\\"${nonCorsProxyDomains}\\\" "
+ "\\\"${sentryDsn}\\\" "
+ "\\\"${gaTrackingId}\\\" "
+ "\\\"${targetS3Bucket}\\\" "
+ "\\\"${isMoz}\\\" "
+ "\\\"${buildNumber}\\\" "
+ "\\\"${gitCommit}\\\" "
+ "\\\"${disableDeploy}\\\" "
)
runCommand(habCommand)

def s = $/eval 'ls -rt results/*.hart | head -n 1'/$
def s = $/eval 'ls -t results/*.hart | head -n 1'/$
def hart = sh(returnStdout: true, script: "${s}").trim()
s = $/eval 'tail -n +6 ${hart} | xzcat | tar tf - | grep IDENT'/$
def identPath = sh(returnStdout: true, script: "${s}").trim()
s = $/eval 'tail -n +6 ${hart} | xzcat | tar xf - "${identPath}" -O'/$
def packageIdent = sh(returnStdout: true, script: "${s}").trim()
def packageTimeVersion = packageIdent.tokenize('/')[3]
Expand All @@ -59,22 +68,56 @@ pipeline {
def gitMessage = sh(returnStdout: true, script: "git log -n 1 --pretty=format:'[%an] %s'").trim()
def gitSha = sh(returnStdout: true, script: "git log -n 1 --pretty=format:'%h'").trim()
def text = (
"*<http://localhost:8080/job/${env.JOB_NAME}/${env.BUILD_NUMBER}|#${env.BUILD_NUMBER}>* *${env.JOB_NAME}* " +
"<https://github.com/mozilla/Spoke/commit/$gitSha|$gitSha> ${spokeVersion} " +
"Spoke: ```${gitSha} ${gitMessage}```\n" +
"<${smokeURL}?required_version=${spokeVersion}|Smoke Test> - to push:\n" +
"`/mr spoke deploy ${spokeVersion} s3://${targetS3Bucket}`"
)
def payload = 'payload=' + JsonOutput.toJson([
text : text,
channel : "#mr-builds",
username : "buildbot",
icon_emoji: ":gift:"
])
sh "curl -X POST --data-urlencode ${shellString(payload)} ${slackURL}"
if (showQAPromoteCommand == "true") {
def text = (
"*<http://localhost:8080/job/${jobName}/${buildNumber}|#${buildNumber}>* *${jobName}* " +
"<https://github.com/mozilla/Spoke/commit/$gitSha|$gitSha> ${spokeVersion} " +
"Spoke: ```${gitSha} ${gitMessage}```\n" +
"${packageIdent} built and uploaded - to promote:\n" +
"`/mr promote-spoke-qa ${packageIdent}`"
)
sendSlackMessage(text, qaBuildsSlackChannel, ":gift:", slackURL)
} else {
def text = (
"*<http://localhost:8080/job/${jobName}/${buildNumber}|#${buildNumber}>* *${jobName}* " +
"<https://github.com/mozilla/Spoke/commit/$gitSha|$gitSha> ${spokeVersion} " +
"Spoke: ```${gitSha} ${gitMessage}```\n" +
"<${smokeURL}?required_version=${spokeVersion}|Smoke Test> - to push:\n" +
"`/mr spoke deploy ${spokeVersion} s3://${targetS3Bucket}`"
)
sendSlackMessage(text, "#mr-builds", ":gift:", slackURL)
}
}
}
}
}
}
def runCommand(command) {
sh "/usr/bin/script --return -c ${shellString(command)} /dev/null"
}
def sendSlackMessage(text, channel, icon, slackURL) {
def payload = 'payload=' + JsonOutput.toJson([
text : text,
channel : channel,
username : "buildbot",
icon_emoji: icon
])
sh "curl -X POST --data-urlencode ${shellString(payload)} ${slackURL}"
}
// From https://issues.jenkins-ci.org/browse/JENKINS-44231
// Given arbitrary string returns a strongly escaped shell string literal.
// I.e. it will be in single quotes which turns off interpolation of $(...), etc.
// E.g.: 1'2\3\'4 5"6 (groovy string) -> '1'\''2\3\'\''4 5"6' (groovy string which can be safely pasted into shell command).
def shellString(s) {
// Replace ' with '\'' (https://unix.stackexchange.com/a/187654/260156). Then enclose with '...'.
// 1) Why not replace \ with \\? Because '...' does not treat backslashes in a special way.
// 2) And why not use ANSI-C quoting? I.e. we could replace ' with \'
// and enclose using $'...' (https://stackoverflow.com/a/8254156/4839573).
// Because ANSI-C quoting is not yet supported by Dash (default shell in Ubuntu & Debian) (https://unix.stackexchange.com/a/371873).
'\'' + s.replace('\'', '\'\\\'\'') + '\''
}
8 changes: 7 additions & 1 deletion scripts/hab-build-and-push.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export TARGET_S3_BUCKET=$9
export IS_MOZ=${10}
export BUILD_NUMBER=${11}
export GIT_COMMIT=${12}
export DISABLE_DEPLOY=${13}
export BUILD_VERSION="${BUILD_NUMBER} (${GIT_COMMIT})"
export SENTRY_LOG_LEVEL=debug

Expand All @@ -38,6 +39,11 @@ sudo /usr/bin/hab-pkg-install results/*.hart
hab svc load $PKG
hab svc stop $PKG

DEPLOY_TYPE="s3"
if [[ DISABLE_DEPLOY == "true" ]]; then
DEPLOY_TYPE="none"
fi

# Apparently these vars come in from jenkins with quotes already
cat > build-config.toml << EOTOML
[general]
Expand All @@ -52,7 +58,7 @@ ga_tracking_id = $GA_TRACKING_ID
is_moz = $IS_MOZ
[deploy]
type = "s3"
type = "$DEPLOY_TYPE"
target = $TARGET_S3_BUCKET
region = "us-west-1"
EOTOML
Expand Down

0 comments on commit 8ad1657

Please sign in to comment.