1ae935cf by KevinWang

gloable jenkins file

1 parent 2afaaf19
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 gitParameter branch:'',
11 branchFilter: '.*',
12 defaultValue: 'origin/master',
13 description: '请选择要发布的tag',
14 name: 'taghName',
15 quickFilterEnabled: false,
16 selectedValue: 'NONE',
17 sortMode: 'NONE',
18 tagFilter: '*',
19 type: 'PT_TAG',
20 useRepository: "${repo_url}"
21 }
22 //环境定义
23 environment {
24 //日志映射路径
25 LOG_PATH = "/mnt/log/"
26 //服务名称
27 SVN_FOLD = readMavenPom().getArtifactId()
28 SSH_PATH = "csbr5.4"
29 //镜像版本号
30 image_tag = readMavenPom().getVersion()
31 //docker私服ip
32 ip = "192.168.5.4:82"
33 PROJECT_NAME = "${JOB_NAME.substring(0,JOB_NAME.lastIndexOf('/'))}"
34 PROMETHEUS_PARAMS_STRING = "-javaagent:/jmx_prometheus_javaagent-0.17.0.jar=8088:/jmx/prometheus-jmx-config.yaml"
35 }
36 options {
37 // 设置保留的最大历史构建数为6
38 buildDiscarder(logRotator(numToKeepStr: '2'))
39 }
40 //全局定义工具
41 tools {
42 //工具名称必须在Jenkins 管理Jenkins → 全局工具配置中预配置。
43 maven 'maven3'
44 }
45 stages {
46 stage('release-test') {
47 when {
48 expression { return params.deploy_env == 'release-test' }
49 }
50 steps {
51 script {
52 env.SVN_TYPE = "test"
53 }
54 }
55 }
56 stage('release-integration') {
57 when {
58 expression { return params.deploy_env == 'release-integration' }
59 }
60 steps {
61 script {
62 env.SVN_TYPE = "pre-test"
63 }
64 }
65 }
66 stage('pre-release') {
67 when {
68 expression { return params.deploy_env == 'pre-release' }
69 }
70 steps {
71 script {
72 env.SVN_TYPE = "pre-release"
73 env.PROMETHEUS_PARAMS = "${PROMETHEUS_PARAMS_STRING}"
74 }
75 }
76 }
77 stage('production') {
78 when {
79 expression { return params.deploy_env == 'production' }
80 }
81 steps {
82 script {
83 env.SVN_TYPE = "temp"
84 env.PROMETHEUS_PARAMS = "${PROMETHEUS_PARAMS_STRING}"
85 }
86 }
87 }
88 stage('springboot-qzc') {
89 when {
90 expression { return params.deploy_env == 'springboot-qzc' }
91 }
92 steps {
93 script {
94 env.SVN_TYPE = "qzc"
95 }
96 }
97 }
98 stage('Choice tags'){
99 steps {
100 sh "echo ${params.useRepository}"
101 checkout([$class: 'GitSCM',
102 branches: [[name: "${params.TAG}"]],
103 doGenerateSubmoduleConfigurations: false,
104 extensions: [],
105 gitTool: 'Default',
106 submoduleCfg: [],
107 userRemoteConfigs: [[url: "${params.useRepository}"]]
108 ])
109 }
110 }
111 //构建
112 stage('Maven Build') {
113 steps {
114 //sh './gradlew build'
115 //执行shell命令
116 sh 'echo ${JAVA_HOMOE}'
117 sh "mvn -f ./pom.xml clean package -Dmaven.test.skip=true -X -P${params.deploy_env}"
118 //sh 'mvn -f ${SVN_FOLD}/pom.xml clean package'
119 }
120 }
121 stage('Docker Build') {
122 steps {
123 //分分支构建
124 script {
125
126 //develop分支环境
127 echo 'start to deploy ${SVN_FOLD} on ${params.deploy_env} ...'
128 sh '''
129 CID=$(docker ps -a | grep "${SVN_FOLD}" | awk '{print $1}')
130 IID=$(docker images | grep "none" | awk '{print $3}')
131 cp "$WORKSPACE"/target/"${SVN_FOLD}".jar "$WORKSPACE"
132 if [ -n "$IID" ]; then
133 echo "存在'${SVN_FOLD}'镜像,IID='$IID'"
134 cd "$WORKSPACE"
135 ##构建镜像到远程仓库
136 docker login "${ip}" -u admin -p E6w611g864wQ2
137 docker build -t "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}" . --build-arg CE="${SVN_TYPE}" --build-arg PROMETHEUS_PARAMS="${PROMETHEUS_PARAMS}"
138 docker push "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}"
139 else
140 echo "不存在'${SVN_FOLD}'镜像,开始构建镜像"
141 ##构建镜像到远程仓库
142 docker login "${ip}" -u admin -p E6w611g864wQ2
143 docker build -t "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}" . --build-arg CE="${SVN_TYPE}" --build-arg PROMETHEUS_PARAMS="${PROMETHEUS_PARAMS}"
144 docker push "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}"
145 fi
146 '''
147 echo 'Depoly ${SVN_FOLD} develop success ...'
148 }
149 }
150
151 }
152 //部署
153 stage('Deploy') {
154 steps {
155 echo 'Deploying'
156 //分分支部署
157 script {
158
159 //develop分支环境
160 echo 'start to deploy ${SVN_FOLD} on ${params.deploy_env} ...'
161 //调用Publish Over SSH插件,上传docker-compose.yaml文件并且执行deploy脚本
162 sshPublisher(publishers: [sshPublisherDesc(configName: "csbr5.3", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: """
163 echo "日志路径 '$LOG_PATH''$SVN_FOLD'"
164 #使用k8s构建
165 kubectl delete -f /mnt/k8s/${params.deploy_env}/${PROJECT_NAME}.yaml
166 kubectl apply -f /mnt/k8s/${params.deploy_env}/${PROJECT_NAME}.yaml
167 """, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/mnt/csbr/data', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'output/*.*')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
168 echo 'Depoly ${SVN_FOLD} success ...'
169
170 }
171 //sh './build.sh'
172 }
173 }
174 }
175 //归档
176 post {
177 always {
178 echo 'Archive artifacts'
179 archiveArtifacts artifacts: "**/target/*.jar", excludes: "**/target"
180 }
181 }
182 }
...\ 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!