Skip to content

Commit

Permalink
[CI] Add jenkinsfile for dubbo snapshot deployment (apache#4205)
Browse files Browse the repository at this point in the history
  • Loading branch information
htynkn authored and lovepoem committed Jun 6, 2019
1 parent 78aea48 commit 76d6562
Show file tree
Hide file tree
Showing 2 changed files with 139 additions and 0 deletions.
138 changes: 138 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
import groovy.json.JsonSlurper

pipeline {
agent {
node {
label 'ubuntu'
}
}

options {
buildDiscarder(logRotator(daysToKeepStr: '14', artifactNumToKeepStr: '10'))
}

environment {
JAVA_HOME = "${tool 'JDK 1.8 (latest)'}"
}

tools {
maven 'Maven 3 (latest)'
jdk 'JDK 1.8 (latest)'
}

triggers {
cron '''TZ=Asia/Shanghai
H 2,14 * * *'''
pollSCM '''TZ=Asia/Shanghai
H H/2 * * *'''
}


stages {
stage('Clone') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption', noTags: true, reference: '', shallow: true]], gitTool: 'Default', submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/apache/dubbo.git']]])
}
}

stage('Duplicate deploy check') {
steps {
script {
def deployedCommitId = sh(returnStdout: true, script: "curl --silent https://builds.apache.org/job/Apache%20Dubbo/job/${env.JOB_BASE_NAME}/lastSuccessfulBuild/artifact/DEPLOY_COMMIT_ID || true").trim()
env.DEPLOYED_COMMIT_ID = deployedCommitId
def commitId = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
env.COMMIT_ID = commitId

if (commitId == deployedCommitId) {
env.STATUS_CHECK = "false"
println "Latest deployed commit id is $deployedCommitId, Skip deployment this time"
} else {
env.STATUS_CHECK = "true"
println "Current commit id hasn't been deployed, continue"
}
}
}
}

stage('Commit status check') {
when {
expression {
return env.STATUS_CHECK == "true";
}
}
steps {
script {
def commitId = env.COMMIT_ID
println "Current commit id: $commitId"

def commitStatusJson = sh(script: "curl --silent https://api.github.com/repos/apache/dubbo/commits/$commitId/status", returnStdout: true).trim()
println "Commit status: \r\n$commitStatusJson"

def jsonSlurper = new JsonSlurper()
def jsonObject = jsonSlurper.parseText(commitStatusJson)

def status = jsonObject.state

println "Current commit status is $status"

if (status == "success") {
env.STATUS_CHECK = "true"
println "Continue to deploy snapshot"
} else {
env.STATUS_CHECK = "false"
println "Current commit status not allow to deploy snapshot"
}
}
}
}

stage('Snapshot version check') {
when {
expression {
return env.STATUS_CHECK == "true";
}
}
steps {
sh 'env'
sh 'java -version'
sh './mvnw clean install -pl "dubbo-dependencies-bom" && ./mvnw clean install -DskipTests=true && ./mvnw clean validate -Psnapshot-ci-deploy -pl "dubbo-all"'
}
}

stage('Deploy snapshot') {
when {
expression {
return env.STATUS_CHECK == "true";
}
}
steps {
timeout(35) {
sh './mvnw --version'
sh './mvnw clean package deploy -pl dubbo-dependencies-bom && ./mvnw clean package deploy -DskipTests=true'
}
}
}

stage('Save deployed commit id') {
steps {
script {
if (env.STATUS_CHECK != "true") {
println "Not pass status check"
env.COMMIT_ID = env.DEPLOYED_COMMIT_ID
}
}
writeFile file: 'DEPLOY_COMMIT_ID', text: "${env.COMMIT_ID}"
archiveArtifacts 'DEPLOY_COMMIT_ID'
}
}
}

post {
failure {
mail bcc: '', body: '''Project: ${env.JOB_NAME}
Build Number: ${env.BUILD_NUMBER}
URL: ${env.BUILD_URL}''', cc: '', from: '', replyTo: '', subject: 'Apache Dubbo snapshot deployment fail', to: '[email protected]'
}
}

}
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,7 @@
<exclude>PULL_REQUEST_TEMPLATE.md</exclude>
<exclude>CONTRIBUTING.md</exclude>
<exclude>README.md</exclude>
<exclude>Jenkinsfile</exclude>
<exclude>**/codestyle/*</exclude>
<exclude>**/resources/META-INF/**</exclude>
<!-- exclude the internal threadlocal files -->
Expand Down

0 comments on commit 76d6562

Please sign in to comment.