jenkins pipeline 结合 ansible 发布代码
pipeline {
agent any
options {
buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '30', numToKeepStr: '30')
disableConcurrentBuilds()
}
environment {
maven = "/home/data/jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven"
}
parameters {
gitParameter branch: '', branchFilter: '.*', defaultValue: 'master', description: '选择要发布的分支或标签或修订', name: 'revise', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_REVISION'
choice choices: [ 'gray_deploy', 'deploy', 'gray_rollback', 'rollback'], description: '''请选择发布或回滚
gray_deploy 灰度环境发布
deploy 正式环境发布
gray_rollback 灰度环境回滚
rollback 正式环境回滚''', name: 'status'
choice choices: ['gray', 'deploy'], description: '选择发布主机组', name: 'HOSTS'
string defaultValue: '', description: '请输入要回滚的ID,请看左测Build History', name: 'BUILD_ID', trim: false
text defaultValue: '', description: '代码注释', name: 'comment'
}
stages {
stage('git pull') {
steps {
//echo "revise: ${params.revise}"
checkout([$class: 'GitSCM',
branches: [[name: "${params.revise}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [],
gitTool: 'Default',
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'jenkins 生成一个id', url: 'git url']]
])
}
}
stage('gray-deploy') {
when {
anyOf {
environment name: 'status', value: 'gray_deploy'
}
}
steps {
sh "${maven}/bin/mvn -f ${WORKSPACE}/ clean package"
script {
wrap([$class: 'BuildUser']) {
def deploylog="${BUILD_USER} use pipeline '${JOB_NAME}(${BUILD_NUMBER})' "
println deploylog
buildName "#${BUILD_NUMBER}-${BUILD_USER}-$comment"
//输出最新一次提交信息
HTTPD_LOCATION= sh( returnStdout: true, script: 'git show -s |grep -vE "commit|Date" |grep -v "^$"')
//修改Description"
buildDescription "${HTTPD_LOCATION}"
}
sh '''
cd /data/jenkins/workspace/$JOB_NAME/target/
PAG_JAR=`ls *.jar`
ansible-playbook -v /etc/ansible/$JOB_NAME/init.yml -i /etc/ansible/$JOB_NAME/inventories/$HOSTS -e "HOSTS=$HOSTS JOB_NAME=${JOB_NAME} BUILD_NUMBER=${BUILD_NUMBER} PAG_JAR=$PAG_JAR"
ansible-playbook -v /etc/ansible/$JOB_NAME/gray_deploy.yml -i /etc/ansible/$JOB_NAME/inventories/$HOSTS -e "HOSTS=$HOSTS JOB_NAME=${JOB_NAME} BUILD_NUMBER=${BUILD_NUMBER} PAG_JAR=$PAG_JAR"
'''
}
}
post {
success {
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
}
}
}
stage('deploy') {
when {
anyOf {
environment name: 'status', value: 'deploy'
}
}
steps {
sh "${maven}/bin/mvn -f ${WORKSPACE}/ clean package"
script {
wrap([$class: 'BuildUser']) {
def deploylog="${BUILD_USER} use pipeline '${JOB_NAME}(${BUILD_NUMBER})' "
println deploylog
buildName "#${BUILD_NUMBER}-${BUILD_USER}-$comment"
//输出最新一次提交信息
HTTPD_LOCATION= sh( returnStdout: true, script: 'git show -s |grep -vE "commit|Date" |grep -v "^$"')
//修改Description"
buildDescription "${HTTPD_LOCATION}"
}
sh '''
cd /data/jenkins/workspace/$JOB_NAME/target/
PAG_JAR=`ls *.jar`
ansible-playbook -v /etc/ansible/$JOB_NAME/init.yml -i /etc/ansible/$JOB_NAME/inventories/$HOSTS -e "HOSTS=$HOSTS JOB_NAME=${JOB_NAME} BUILD_NUMBER=${BUILD_NUMBER} PAG_JAR=$PAG_JAR"
ansible-playbook -v /etc/ansible/$JOB_NAME/deploy.yml -i /etc/ansible/$JOB_NAME/inventories/$HOSTS -e "HOSTS=$HOSTS JOB_NAME=${JOB_NAME} BUILD_NUMBER=${BUILD_NUMBER} PAG_JAR=$PAG_JAR"
'''
}
}
post {
success {
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
}
}
}
stage ('gray-rollback') {
when {
anyOf {
environment name: 'status', value: 'gray_rollback'
}
}
steps {
script {
sh '''
cd /home/data/jenkins/jobs/$JOB_NAME/builds/${BUILD_ID}/archive/target/
PAG_JAR=`ls *.jar`
ansible-playbook -v /etc/ansible/$JOB_NAME/gray_rollback.yml -i /etc/ansible/$JOB_NAME/inventories/$HOSTS -e "HOSTS=$HOSTS PAG_JAR=$PAG_JAR BUILD_ID=${BUILD_ID}"
'''
}
}
}
stage ('rollback') {
when {
anyOf {
environment name: 'status', value: 'rollback'
}
}
steps {
script {
sh '''
cd /home/data/jenkins/jobs/$JOB_NAME/builds/${BUILD_ID}/archive/target/
PAG_JAR=`ls *.jar`
ansible-playbook -v /etc/ansible/$JOB_NAME/rollback.yml -i /etc/ansible/$JOB_NAME/inventories/$HOSTS -e "HOSTS=$HOSTS PAG_JAR=$PAG_JAR BUILD_ID=${BUILD_ID}"
'''
}
}
}
}
}