labs/helper-files/brigade.js (60 lines of code) (raw):
const { events, Job, Group } = require('brigadier')
events.on("push", (brigadeEvent, project) => {
// setup variables
var gitPayload = JSON.parse(brigadeEvent.payload)
var brigConfig = new Map()
brigConfig.set("acrServer", project.secrets.acrServer)
brigConfig.set("acrUsername", project.secrets.acrUsername)
brigConfig.set("acrPassword", project.secrets.acrPassword)
brigConfig.set("webImage", "azureworkshop/rating-web")
brigConfig.set("gitSHA", brigadeEvent.revision.commit.substr(0,7))
brigConfig.set("eventType", brigadeEvent.type)
brigConfig.set("branch", getBranch(gitPayload))
brigConfig.set("imageTag", `${brigConfig.get("branch")}-${brigConfig.get("gitSHA")}`)
brigConfig.set("webACRImage", `${brigConfig.get("acrServer")}/${brigConfig.get("webImage")}`)
console.log(`==> gitHub webook (${brigConfig.get("branch")}) with commit ID ${brigConfig.get("gitSHA")}`)
// setup brigade jobs
var docker = new Job("job-runner-docker")
var k8s = new Job("job-runner-k8s")
dockerJobRunner(brigConfig, docker)
kubeJobRunner(brigConfig, k8s)
// start pipeline
console.log(`==> starting pipeline for docker image: ${brigConfig.get("webACRImage")}:${brigConfig.get("imageTag")}`)
var pipeline = new Group()
pipeline.add(docker)
pipeline.add(k8s)
if (brigConfig.get("branch") == "master") {
pipeline.runEach()
} else {
console.log(`==> no jobs to run when not master`)
}
})
events.on("after", (event, proj) => {
console.log("brigade pipeline finished successfully")
})
function dockerJobRunner(config, d) {
d.storage.enabled = false
d.image = "chzbrgr71/dockernd:node"
d.privileged = true
d.tasks = [
"dockerd-entrypoint.sh &",
"echo waiting && sleep 20",
"cd /src/app/web",
`docker login ${config.get("acrServer")} -u ${config.get("acrUsername")} -p ${config.get("acrPassword")}`,
`docker build --build-arg BUILD_DATE='1/1/2017 5:00' --build-arg IMAGE_TAG_REF=${config.get("imageTag")} --build-arg VCS_REF=${config.get("gitSHA")} -t ${config.get("webImage")} .`,
`docker tag ${config.get("webImage")} ${config.get("webACRImage")}:${config.get("imageTag")}`,
`docker push ${config.get("webACRImage")}:${config.get("imageTag")}`,
"killall dockerd"
]
}
function kubeJobRunner (config, k) {
k.storage.enabled = false
k.image = "lachlanevenson/k8s-kubectl:v1.8.2"
k.tasks = [
`kubectl set image deployment/heroes-web-deploy heroes-web-cntnr=<youracrhere>.azurecr.io/azureworkshop/rating-web:${config.get("imageTag")}`
]
}
function getBranch (p) {
if (p.ref) {
return p.ref.substring(11)
} else {
return "PR"
}
}