123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- #!/usr/bin/env groovy
- pipeline {
- options {
- //禁止并发构建
- disableConcurrentBuilds()
- //持久化工件和控制台输出,用于保存Pipeline最近几次运行的数据
- buildDiscarder(logRotator(numToKeepStr: '20'))
- preserveStashes(buildCount: 5)
- //设置Pipeline运行的超时时间,之后Jenkins应该中止Pipeline
- timeout(time: 1, unit: 'HOURS')
- }
- agent {
- kubernetes {
- label "slave-${UUID.randomUUID().toString()}"
- cloud "Kubernetes"
- }
- }
- environment {
- PROJECT_NAME = 'hk-boa'
- IMAGE_NAME = 'services'
- CONTAINER_PORT = '8081'
- ENV = 'test'
- }
- parameters {
- string(name: 'REPLICAS', defaultValue: '1', description: '部署副本数')
- string(name: 'JVM_OPTS', defaultValue: '-Xmx500m -Xms500m -Xmn200m ', description: 'JVM信息')
- string(name: 'NODE_PORT', defaultValue: '30710', description: '发布端口')
- string(name: 'CPU', defaultValue: '500', description: '限制最大能使用的CPU,1000为1核')
- string(name: 'MEMORY', defaultValue: '600', description: '限制最大能使用的内存数量单位M')
- string(name: 'EMAILS', defaultValue: 'fengsw@bjrrtx.com', description: '企业微信通知人员,多个使用逗号隔开')
- booleanParam(name: 'FIRST_BUILD', defaultValue: false, description: '是否是首次构建')
- }
- stages {
- stage('拉取代码') {
- steps {
- checkout scm
- }
- }
- stage('构建应用') {
- steps {
- echo "构建应用"
- sh 'mvn clean package -U -Dmaven.test.skip=true --settings /data/nfs/maven/settings.xml'
- }
- }
- // stage("测试应用") {
- // steps {
- // withSonarQubeEnv('sonar') {
- // sh 'mvn clean sonar:sonar --settings /data/nfs/maven/settings.xml'
- // }
- // }
- // }
- // stage("代码质量检查") {
- // steps {
- // timeout(time: 1, unit: 'HOURS') {
- // waitForQualityGate abortPipeline: true
- // }
- // }
- // }
- stage('构建镜像') {
- steps {
- echo "构建镜像"
- sh "docker build -t reg.bjrrtx.com:5000/${env.PROJECT_NAME}/${env.IMAGE_NAME}-${ENV}:v${env.BUILD_NUMBER} -f deploy/Dockerfile ."
- }
- }
- stage('推送镜像') {
- steps {
- echo "推送镜像"
- sh '/opt/accessAuth.sh'
- sh "docker push reg.bjrrtx.com:5000/${env.PROJECT_NAME}/${env.IMAGE_NAME}-${ENV}:v${env.BUILD_NUMBER}"
- }
- }
- stage('部署应用') {
- steps {
- sh "sed -i \"s/{PROJECT_NAME}/${PROJECT_NAME}/g\" deploy/deploy.yaml"
- sh "sed -i \"s/{IMAGE_NAME}/${IMAGE_NAME}/g\" deploy/deploy.yaml"
- sh "sed -i \"s/{CONTAINER_PORT}/${CONTAINER_PORT}/g\" deploy/deploy.yaml"
- sh "sed -i \"s/{REPLICAS}/${params.REPLICAS}/g\" deploy/deploy.yaml"
- sh "sed -i \"s/{JVM_OPTS}/${params.JVM_OPTS}/g\" deploy/deploy.yaml"
- sh "sed -i \"s/{ENV}/${ENV}/g\" deploy/deploy.yaml"
- sh "sed -i \"s/{NODE_PORT}/${params.NODE_PORT}/g\" deploy/deploy.yaml"
- sh "sed -i \"s/{CPU}/${params.CPU}/g\" deploy/deploy.yaml"
- sh "sed -i \"s/{MEMORY}/${params.MEMORY}/g\" deploy/deploy.yaml"
- sh "sed -i \"s/{BUILD_NUMBER}/${env.BUILD_NUMBER}/g\" deploy/deploy.yaml"
- script {
- if (FIRST_BUILD == 'true') {
- sh 'kubectl create -f deploy/deploy.yaml'
- } else {
- sh 'kubectl delete -f deploy/deploy.yaml'
- sh 'kubectl create -f deploy/deploy.yaml'
- }
- }
- }
- }
- stage('发送企业微信通知') {
- steps {
- script {
- def info = "发版工程:${env.JOB_NAME} \\n发版结果:<font color=\\\"info\\\">成功!</font>\\n发布版本:V${env.BUILD_NUMBER} \\n更新记录:\\n" + getChanges()
- sh "curl -X GET http://mb.test.bjrrtx.com/magpie-bridge/jenkinsNotify -H \'Content-Type: application/json\' --data-binary \'{\"emails\":[\"${params.EMAILS}\"], \"content\":\"${info} \" }\' "
- }
- }
- }
- }
- post {
- always {
- echo 'This will always run'
- }
- success {
- echo "This will run if success"
- }
- failure {
- script {
- def info = "发版工程:${env.JOB_NAME} \\n发版结果:<font color=\\\"warning\\\">失败!</font>\\n发布版本:V${env.BUILD_NUMBER} \\n更新记录:\\n" + getChanges()
- sh "curl -X GET http://mb.test.bjrrtx.com/magpie-bridge/jenkinsNotify -H \'Content-Type: application/json\' --data-binary \'{\"emails\":[\"${params.EMAILS}\"], \"content\":\"${info} \" }\' "
- }
- }
- unstable {
- echo 'This will run only if the run was marked as unstable'
- }
- changed {
- echo 'This will run only if the state of the Pipeline has changed'
- echo 'For example, if the Pipeline was previously failing but is now successful'
- }
- }
- }
- @NonCPS
- def getChanges() {
- MAX_MSG_LEN = 100
- def changeString = ""
- def changeLogSets = currentBuild.changeSets
- for (int i = 0; i < changeLogSets.size(); i++) {
- def entries = changeLogSets[i].items
- for (int j = 0; j < entries.length; j++) {
- def entry = entries[j]
- change_msg = entry.msg.take(MAX_MSG_LEN)
- change_author = entry.author.fullName
- changeString += " ${change_msg}" + "---" + "${change_author}\\n"
- }
- }
- if (!changeString) {
- changeString = " No changes "
- }
- return changeString
- }
|