1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import groovy.json.JsonOutput
- def notifyPagurePR(repo, msg, status, phase, credentials = 'pagure-auth'){
- def json = JsonOutput.toJson([name: 'pagure', url: env.JOB_NAME, build: [full_url: currentBuild.absoluteUrl, status: status, number: currentBuild.number, phase: phase]])
- println json
- withCredentials([string(credentialsId: credentials, variable: "PAGURE_PUSH_SECRET")]) {
- /* We need to notify pagure that jenkins finished but then pagure will
- wait for jenkins to be done, so if we wait for pagure's answer we're
- basically stuck in a loop where both jenkins and pagure are waiting
- for each other */
- sh "timeout 1 curl -X POST -d \'$json\' https://pagure.io/api/0/ci/jenkins/$repo/${PAGURE_PUSH_SECRET}/build-finished -H \"Content-Type: application/json\" | true"
- }
- }
- def onmyduffynode(script){
- ansiColor('xterm'){
- timestamps{
- sh 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -l root ${DUFFY_NODE}.ci.centos.org -t \"export REPO=${REPO}; export BRANCH=${BRANCH};\" "' + script + '"'
- }
- }
- }
- def syncfromduffynode(rsyncpath){
- sh 'rsync -e "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -l root " -Ha --include=' + rsyncpath + " ${DUFFY_NODE}.ci.centos.org:~/ ./"
- }
- node('pagure') {
- properties([
- parameters([
- string(defaultValue: "", description: "", name: "REPO"),
- string(defaultValue: "", description: "", name: "BRANCH"),
- ])
- ])
- stage('Allocate Node'){
- env.CICO_API_KEY = readFile("${env.HOME}/duffy.key").trim()
- duffy_rtn=sh(
- script: 'cico --debug node get -f value -c hostname -c comment',
- returnStdout: true
- ).trim().tokenize(' ')
- env.DUFFY_NODE=duffy_rtn[0]
- env.SSID=duffy_rtn[1]
- env.BRANCH=params.BRANCH
- env.REPO=params.REPO
- }
- try {
- stage('Pre Setup Node'){
- // Install EPEL
- onmyduffynode 'yum -y install epel-release git'
- }
- stage('Notify PR'){
- notifyPagurePR("pagure", "Tests running ", "BUILDING", "STARTED")
- }
- stage('Clone Test Suite') {
- onmyduffynode "git clone --single-branch --depth 1 https://pagure.io/pagure.git"
- }
- stage('Run Test Suite') {
- timeout(time: 6, unit: 'HOURS') {
- onmyduffynode 'cd pagure && sh ./run_ci_tests.sh'
- }
- }
- } catch (e) {
- currentBuild.result = "FAILURE"
- throw e
- } finally {
- stage('Sync Artifacts'){
- syncfromduffynode('pagure/results-py2/')
- syncfromduffynode('pagure/results-py3/')
- }
- stage('Deallocate Node'){
- sh 'cico node done ${SSID}'
- }
- stage('Notify PR'){
- res = currentBuild.currentResult
- notifyPagurePR("pagure", "Build " + res + "! ", res, "FINALIZED")
- }
- stage('Archive Artifacts'){
- archiveArtifacts artifacts: 'pagure/results-py2/'
- archiveArtifacts artifacts: 'pagure/results-py3/'
- }
- }
- }
|