Skip to content

Instantly share code, notes, and snippets.

@abraverm
Created March 14, 2018 16:15
Show Gist options
  • Select an option

  • Save abraverm/b702bc7fbdca6736b4ffc55f03e7929e to your computer and use it in GitHub Desktop.

Select an option

Save abraverm/b702bc7fbdca6736b4ffc55f03e7929e to your computer and use it in GitHub Desktop.
Github integration with Jenkins using Amazon SQS
import groovy.json.JsonSlurperClassic
import static groovy.json.JsonOutput.*
@NonCPS
def parseJsonToMap(String json) {
final slurper = new JsonSlurperClassic()
return new HashMap<>(slurper.parseText(json))
}
def comment(String event, Map data, String msg) {
switch(event) {
case "push":
repo = data.repository.name
user = data.repository.owner.login
commit = data.head_commit.id
break
case "pull_request":
repo = data.pull_request.head.repo.name
commit = data.pull_request.head.sha
user = data.pull_request.head.user.login
break
default:
println "Can't comment on ${event} events"
}
sh """python <<EOF
from github import Github
g = Github('${env.GITHUB_ACCESS_TOKEN}')
user = g.get_user('${user}')
repo = user.get_repo('${repo}')
commit = repo.get_commit('${commit}')
commit.create_comment("${msg}")
EOF
"""
}
def github(String event, Map data) {
switch(event) {
case "push":
sh """
set -x
git clone --quiet ${data.repository.clone_url}
cd ${data.repository.name}
git checkout -b ${data.head_commit.id} ${data.head_commit.id}
git --no-pager log --pretty=medium -n1
"""
break
case "pull_request":
sh """
set -x
git clone --quiet ${data.pull_request.head.repo.clone_url}
cd ${data.pull_request.head.repo.name}
git checkout -b ${data.pull_request.head.sha} ${data.pull_request.head.sha}
git --no-pager log --pretty=medium -n1
"""
break
}
}
pipeline {
agent any
options {
timestamps()
}
parameters{
string( name: 'sqs_body' )
string( name: 'sqs_messageId' )
string( name: 'sqs_bodyMD5' )
string( name: 'sqs_receiptHandle' )
}
stages {
stage('Setup'){
steps{
script {
def sqs_body = parseJsonToMap(params['sqs_body'])
if ('MessageAttributes' in sqs_body.keySet()){
msg_type = sqs_body.MessageAttributes['X-Github-Event'].Value
data = parseJsonToMap(sqs_body.Message)
println prettyPrint(toJson(data))
}
else { print sqs_body.keySet() }
comment(msg_type, data, "Testing started: ${env.BUILD_URL}")
}
}
}
}
post{
success {
comment(msg_type, data, "Success: ${env.BUILD_URL} ")
}
failure {
comment(msg_type, data, "Failed: ${env.BUILD_URL} ")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment