58061240 by KevinWang

Jenkins-Springboot-2.0-bkg

1 parent 1ae935cf
1 pipeline {
2 agent any
3
4 parameters {
5 choice(
6 description: '你需要选择哪个环境部署?',
7 name: 'deploy_env',
8 choices: ['release-test', 'release-integration', 'pre-release', 'production', 'springboot-qzc']
9 )
10 }
11 //环境定义
12 environment {
13 //日志映射路径
14 LOG_PATH = "/mnt/log/"
15 //服务名称
16 SVN_FOLD = readMavenPom().getArtifactId()
17 SSH_PATH = "csbr5.4"
18 //镜像版本号
19 image_tag = readMavenPom().getVersion()
20 //docker私服ip
21 ip = "192.168.5.4:82"
22 PROJECT_NAME = "${JOB_NAME.substring(0,JOB_NAME.lastIndexOf('/'))}"
23 PROMETHEUS_PARAMS_STRING = "-javaagent:/jmx_prometheus_javaagent-0.17.0.jar=8088:/jmx/prometheus-jmx-config.yaml"
24 }
25 options {
26 // 设置保留的最大历史构建数为6
27 buildDiscarder(logRotator(numToKeepStr: '2'))
28 }
29 //全局定义工具
30 tools {
31 //工具名称必须在Jenkins 管理Jenkins → 全局工具配置中预配置。
32 maven 'maven3'
33 }
34 stages {
35 stage('release-test') {
36 when {
37 expression { return params.deploy_env == 'release-test' }
38 }
39 steps {
40 script {
41 env.SVN_TYPE = "test"
42 }
43 }
44 }
45 stage('release-integration') {
46 when {
47 expression { return params.deploy_env == 'release-integration' }
48 }
49 steps {
50 script {
51 env.SVN_TYPE = "pre-test"
52 }
53 }
54 }
55 stage('pre-release') {
56 when {
57 expression { return params.deploy_env == 'pre-release' }
58 }
59 steps {
60 script {
61 env.SVN_TYPE = "pre-release"
62 env.PROMETHEUS_PARAMS = "${PROMETHEUS_PARAMS_STRING}"
63 }
64 }
65 }
66 stage('production') {
67 when {
68 expression { return params.deploy_env == 'production' }
69 }
70 steps {
71 script {
72 env.SVN_TYPE = "temp"
73 env.PROMETHEUS_PARAMS = "${PROMETHEUS_PARAMS_STRING}"
74 }
75 }
76 }
77 stage('springboot-qzc') {
78 when {
79 expression { return params.deploy_env == 'springboot-qzc' }
80 }
81 steps {
82 script {
83 env.SVN_TYPE = "qzc"
84 }
85 }
86 }
87 //构建
88 stage('Maven Build') {
89 steps {
90 //sh './gradlew build'
91 //执行shell命令
92 sh 'echo ${JAVA_HOMOE}'
93 sh "mvn -f ./pom.xml clean package -Dmaven.test.skip=true -X -P${params.deploy_env}"
94 //sh 'mvn -f ${SVN_FOLD}/pom.xml clean package'
95 }
96 }
97 stage('Docker Build') {
98 steps {
99 //分分支构建
100 script {
101
102 //develop分支环境
103 echo 'start to deploy ${SVN_FOLD} on ${params.deploy_env} ...'
104 sh '''
105 CID=$(docker ps -a | grep "${SVN_FOLD}" | awk '{print $1}')
106 IID=$(docker images | grep "none" | awk '{print $3}')
107 cp "$WORKSPACE"/target/"${SVN_FOLD}".jar "$WORKSPACE"
108 if [ -n "$IID" ]; then
109 echo "存在'${SVN_FOLD}'镜像,IID='$IID'"
110 cd "$WORKSPACE"
111 ##构建镜像到远程仓库
112 docker login "${ip}" -u admin -p E6w611g864wQ2
113 docker build -t "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}" . --build-arg CE="${SVN_TYPE}" --build-arg PROMETHEUS_PARAMS="${PROMETHEUS_PARAMS}"
114 docker push "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}"
115 else
116 echo "不存在'${SVN_FOLD}'镜像,开始构建镜像"
117 ##构建镜像到远程仓库
118 docker login "${ip}" -u admin -p E6w611g864wQ2
119 docker build -t "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}" . --build-arg CE="${SVN_TYPE}" --build-arg PROMETHEUS_PARAMS="${PROMETHEUS_PARAMS}"
120 docker push "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}"
121 fi
122 '''
123 echo 'Depoly ${SVN_FOLD} develop success ...'
124 }
125 }
126
127 }
128 //部署
129 stage('Deploy') {
130 steps {
131 echo 'Deploying'
132 //分分支部署
133 script {
134
135 //develop分支环境
136 echo 'start to deploy ${SVN_FOLD} on ${params.deploy_env} ...'
137 //调用Publish Over SSH插件,上传docker-compose.yaml文件并且执行deploy脚本
138 sshPublisher(publishers: [sshPublisherDesc(configName: "csbr5.3", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: """
139 echo "日志路径 '$LOG_PATH''$SVN_FOLD'"
140 #使用k8s构建
141 kubectl delete -f /mnt/k8s/${params.deploy_env}/${SVN_FOLD}.yaml
142 kubectl apply -f /mnt/k8s/${params.deploy_env}/${SVN_FOLD}.yaml
143 """, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/mnt/csbr/data', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'output/*.*')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
144 echo 'Depoly ${SVN_FOLD} success ...'
145
146 }
147 //sh './build.sh'
148 }
149 }
150 }
151 //归档
152 post {
153 always {
154 echo 'Archive artifacts'
155 archiveArtifacts artifacts: "**/target/*.jar", excludes: "**/target"
156 }
157 }
158 }
...\ No newline at end of file ...\ No newline at end of file
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!