github.com/NpoolPlatform/chain-middleware@v0.0.0-20240228100535-eb1bcf896eb9/Jenkinsfile (about) 1 pipeline { 2 agent any 3 environment { 4 GOPROXY = 'https://goproxy.cn,direct' 5 } 6 tools { 7 go 'go' 8 } 9 stages { 10 stage('Clone') { 11 steps { 12 git(url: scm.userRemoteConfigs[0].url, branch: '$BRANCH_NAME', changelog: true, credentialsId: 'KK-github-key', poll: true) 13 } 14 } 15 16 stage('Prepare') { 17 steps { 18 sh 'rm -rf ./output/*' 19 sh 'make deps' 20 } 21 } 22 23 stage('Linting') { 24 when { 25 expression { BUILD_TARGET == 'true' } 26 } 27 steps { 28 sh 'make verify' 29 } 30 } 31 32 stage('Compile') { 33 when { 34 expression { BUILD_TARGET == 'true' } 35 } 36 steps { 37 sh(returnStdout: false, script: ''' 38 make verify-build 39 '''.stripIndent()) 40 } 41 } 42 43 stage('Switch to current cluster') { 44 when { 45 anyOf { 46 expression { BUILD_TARGET == 'true' } 47 expression { DEPLOY_TARGET == 'true' } 48 } 49 } 50 steps { 51 sh 'cd /etc/kubeasz; ./ezctl checkout $TARGET_ENV' 52 } 53 } 54 55 stage('Config target') { 56 when { 57 anyOf { 58 expression { BUILD_TARGET == 'true' } 59 expression { DEPLOY_TARGET == 'true' } 60 } 61 } 62 steps { 63 sh 'rm .apollo-base-config -rf' 64 sh 'git clone https://github.com/NpoolPlatform/apollo-base-config.git .apollo-base-config' 65 sh(returnStdout: false, script: ''' 66 PASSWORD=`kubectl get secret --namespace "kube-system" mysql-password-secret -o jsonpath="{.data.rootpassword}" | base64 --decode` 67 kubectl exec --namespace kube-system mysql-0 -- mysql -h 127.0.0.1 -uroot -p$PASSWORD -P3306 -e "create database if not exists chain_manager;" 68 69 username=`helm status rabbitmq --namespace kube-system | grep Username | awk -F ' : ' '{print $2}' | sed 's/"//g'` 70 for vhost in `cat cmd/*/*.viper.yaml | grep hostname | awk '{print $2}' | sed 's/"//g' | sed 's/\\./-/g'`; do 71 kubectl exec --namespace kube-system rabbitmq-0 -- rabbitmqctl add_vhost $vhost 72 kubectl exec --namespace kube-system rabbitmq-0 -- rabbitmqctl set_permissions -p $vhost $username ".*" ".*" ".*" 73 74 cd .apollo-base-config 75 ./apollo-base-config.sh $APP_ID $TARGET_ENV $vhost 76 ./apollo-item-config.sh $APP_ID $TARGET_ENV $vhost database_name chain_manager 77 cd - 78 done 79 '''.stripIndent()) 80 } 81 } 82 83 stage('Unit Tests') { 84 when { 85 expression { BUILD_TARGET == 'true' } 86 } 87 steps { 88 sh(returnStdout: false, script: ''' 89 devboxpod=`kubectl get pods -A | grep development-box | head -n1 | awk '{print $2}'` 90 servicename="chain-middleware" 91 92 kubectl exec --namespace kube-system $devboxpod -- make -C /tmp/$servicename after-test || true 93 kubectl exec --namespace kube-system $devboxpod -- rm -rf /tmp/$servicename || true 94 kubectl cp ./ kube-system/$devboxpod:/tmp/$servicename 95 96 kubectl exec --namespace kube-system $devboxpod -- make -C /tmp/$servicename deps before-test test after-test 97 kubectl exec --namespace kube-system $devboxpod -- rm -rf /tmp/$servicename 98 99 swaggeruipod=`kubectl get pods -A | grep swagger | awk '{print $2}'` 100 kubectl cp message/npool/*.swagger.json kube-system/$swaggeruipod:/usr/share/nginx/html || true 101 '''.stripIndent()) 102 } 103 } 104 105 stage('Generate docker image for development') { 106 when { 107 expression { BUILD_TARGET == 'true' } 108 } 109 steps { 110 sh 'make verify-build' 111 sh 'DOCKER_REGISTRY=$DOCKER_REGISTRY make generate-docker-images' 112 } 113 } 114 115 stage('Tag patch') { 116 when { 117 expression { TAG_PATCH == 'true' } 118 } 119 steps { 120 sh(returnStdout: false, script: ''' 121 set +e 122 revlist=`git rev-list --tags --max-count=1` 123 rc=$? 124 set -e 125 if [ 0 -eq $rc -a x"$revlist" != x ]; then 126 tag=`git describe --tags $revlist` 127 128 major=`echo $tag | awk -F '.' '{ print $1 }'` 129 minor=`echo $tag | awk -F '.' '{ print $2 }'` 130 patch=`echo $tag | awk -F '.' '{ print $3 }'` 131 132 case $TAG_FOR in 133 testing) 134 patch=$(( $patch + $patch % 2 + 1 )) 135 ;; 136 production) 137 patch=$(( $patch + 1 )) 138 git reset --hard 139 git checkout $tag 140 ;; 141 esac 142 143 tag=$major.$minor.$patch 144 else 145 tag=0.1.1 146 fi 147 git tag -a $tag -m "Bump version to $tag" 148 '''.stripIndent()) 149 150 withCredentials([gitUsernamePassword(credentialsId: 'KK-github-key', gitToolName: 'git-tool')]) { 151 sh 'git push --tag' 152 } 153 } 154 } 155 156 stage('Tag minor') { 157 when { 158 expression { TAG_MINOR == 'true' } 159 } 160 steps { 161 sh(returnStdout: false, script: ''' 162 set +e 163 revlist=`git rev-list --tags --max-count=1` 164 rc=$? 165 set -e 166 if [ 0 -eq $rc -a x"$revlist" != x ]; then 167 tag=`git describe --tags $revlist` 168 169 major=`echo $tag | awk -F '.' '{ print $1 }'` 170 minor=`echo $tag | awk -F '.' '{ print $2 }'` 171 patch=`echo $tag | awk -F '.' '{ print $3 }'` 172 173 minor=$(( $minor + 1 )) 174 patch=1 175 176 tag=$major.$minor.$patch 177 else 178 tag=0.1.1 179 fi 180 git tag -a $tag -m "Bump version to $tag" 181 '''.stripIndent()) 182 183 withCredentials([gitUsernamePassword(credentialsId: 'KK-github-key', gitToolName: 'git-tool')]) { 184 sh 'git push --tag' 185 } 186 } 187 } 188 189 stage('Tag major') { 190 when { 191 expression { TAG_MAJOR == 'true' } 192 } 193 steps { 194 sh(returnStdout: false, script: ''' 195 set +e 196 revlist=`git rev-list --tags --max-count=1` 197 rc=$? 198 set -e 199 if [ 0 -eq $rc -a x"$revlist" != x ]; then 200 tag=`git describe --tags $revlist` 201 202 major=`echo $tag | awk -F '.' '{ print $1 }'` 203 minor=`echo $tag | awk -F '.' '{ print $2 }'` 204 patch=`echo $tag | awk -F '.' '{ print $3 }'` 205 206 major=$(( $major + 1 )) 207 minor=0 208 patch=1 209 210 tag=$major.$minor.$patch 211 else 212 tag=0.1.1 213 fi 214 git tag -a $tag -m "Bump version to $tag" 215 '''.stripIndent()) 216 217 withCredentials([gitUsernamePassword(credentialsId: 'KK-github-key', gitToolName: 'git-tool')]) { 218 sh 'git push --tag' 219 } 220 } 221 } 222 223 stage('Generate docker image for testing or production') { 224 when { 225 expression { BUILD_TARGET == 'true' } 226 } 227 steps { 228 sh(returnStdout: false, script: ''' 229 set +e 230 revlist=`git rev-list --tags --max-count=1` 231 rc=$? 232 set -e 233 if [ 0 -eq $rc -a x"$revlist" != x ]; then 234 tag=`git describe --tags $revlist` 235 git reset --hard 236 git checkout $tag 237 fi 238 '''.stripIndent()) 239 sh 'make verify-build' 240 sh 'DOCKER_REGISTRY=$DOCKER_REGISTRY make generate-docker-images' 241 } 242 } 243 244 stage('Release docker image for development') { 245 when { 246 expression { RELEASE_TARGET == 'true' } 247 } 248 steps { 249 sh(returnStdout: false, script: ''' 250 branch=latest 251 if [ "x$BRANCH_NAME" != "xmaster" ]; then 252 branch=`echo $BRANCH_NAME | awk -F '/' '{ print $2 }'` 253 fi 254 set +e 255 docker images | grep chain-middleware | grep $branch 256 rc=$? 257 set -e 258 if [ 0 -eq $rc ]; then 259 DOCKER_REGISTRY=$DOCKER_REGISTRY make release-docker-images 260 fi 261 images=`docker images | grep entropypool | grep chain-middleware | grep none | awk '{ print $3 }'` 262 for image in $images; do 263 docker rmi $image -f 264 done 265 '''.stripIndent()) 266 } 267 } 268 269 stage('Release docker image for testing') { 270 when { 271 expression { RELEASE_TARGET == 'true' } 272 } 273 steps { 274 sh(returnStdout: false, script: ''' 275 set +e 276 revlist=`git rev-list --tags --max-count=1` 277 rc=$? 278 set -e 279 280 if [ 0 -eq $rc -a x"$revlist" != x ]; then 281 tag=`git tag --sort=-v:refname | grep [1\\|3\\|5\\|7\\|9]$ | head -n1` 282 set +e 283 docker images | grep chain-middleware | grep $tag 284 rc=$? 285 set -e 286 if [ 0 -eq $rc ]; then 287 DOCKER_REGISTRY=$DOCKER_REGISTRY make release-docker-images 288 fi 289 fi 290 '''.stripIndent()) 291 } 292 } 293 294 stage('Release docker image for production') { 295 when { 296 expression { RELEASE_TARGET == 'true' } 297 } 298 steps { 299 sh(returnStdout: false, script: ''' 300 set +e 301 taglist=`git rev-list --tags` 302 rc=$? 303 set -e 304 305 if [ 0 -eq $rc -a x"$taglist" != x ]; then 306 tag=`git tag --sort=-v:refname | grep [0\\|2\\|4\\|6\\|8]$ | head -n1` 307 set +e 308 docker images | grep chain-middleware | grep $tag 309 rc=$? 310 set -e 311 if [ 0 -eq $rc ]; then 312 DOCKER_REGISTRY=$DOCKER_REGISTRY make release-docker-images 313 fi 314 fi 315 '''.stripIndent()) 316 } 317 } 318 319 stage('Deploy for development') { 320 when { 321 expression { DEPLOY_TARGET == 'true' } 322 expression { TARGET_ENV ==~ /.*development.*/ } 323 } 324 steps { 325 sh(returnStdout: false, script: ''' 326 branch=latest 327 if [ "x$BRANCH_NAME" != "xmaster" ]; then 328 branch=`echo $BRANCH_NAME | awk -F '/' '{ print $2 }'` 329 fi 330 sed -i "s/chain-middleware:latest/chain-middleware:$branch/g" cmd/chain-middleware/k8s/02-chain-middleware.yaml 331 sed -i "s/uhub.service.ucloud.cn/$DOCKER_REGISTRY/g" cmd/chain-middleware/k8s/02-chain-middleware.yaml 332 sed -i "s#currency_proxy: \\\"\\\"#currency_proxy: \\\"$CURRENCY_REQUEST_PROXY\\\"#g" cmd/chain-middleware/k8s/00-configmap.yaml 333 if [ "x$REPLICAS_COUNT" == "x" ];then 334 REPLICAS_COUNT=2 335 fi 336 sed -i "s/replicas: 2/replicas: $REPLICAS_COUNT/g" cmd/chain-middleware/k8s/02-chain-middleware.yaml 337 make deploy-to-k8s-cluster 338 '''.stripIndent()) 339 } 340 } 341 342 stage('Deploy for testing') { 343 when { 344 expression { DEPLOY_TARGET == 'true' } 345 expression { TARGET_ENV ==~ /.*testing.*/ } 346 } 347 steps { 348 sh(returnStdout: false, script: ''' 349 set +e 350 revlist=`git rev-list --tags --max-count=1` 351 rc=$? 352 set -e 353 if [ ! 0 -eq $rc -o x"$revlist" == x]; then 354 exit 0 355 fi 356 tag=`git tag --sort=-v:refname | grep [1\\|3\\|5\\|7\\|9]$ | head -n1` 357 358 git reset --hard 359 git checkout $tag 360 sed -i "s/chain-middleware:latest/chain-middleware:$tag/g" cmd/chain-middleware/k8s/02-chain-middleware.yaml 361 sed -i "s/uhub.service.ucloud.cn/$DOCKER_REGISTRY/g" cmd/chain-middleware/k8s/02-chain-middleware.yaml 362 sed -i "s#currency_proxy: \\\"\\\"#currency_proxy: \\\"$CURRENCY_REQUEST_PROXY\\\"#g" cmd/chain-middleware/k8s/00-configmap.yaml 363 if [ "x$REPLICAS_COUNT" == "x" ];then 364 REPLICAS_COUNT=2 365 fi 366 sed -i "s/replicas: 2/replicas: $REPLICAS_COUNT/g" cmd/chain-middleware/k8s/02-chain-middleware.yaml 367 sed -i "s/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g" cmd/chain-middleware/k8s/02-chain-middleware.yaml 368 make deploy-to-k8s-cluster 369 '''.stripIndent()) 370 } 371 } 372 373 stage('Deploy for production') { 374 when { 375 expression { DEPLOY_TARGET == 'true' } 376 expression { TARGET_ENV ==~ /.*production.*/ } 377 } 378 steps { 379 sh(returnStdout: false, script: ''' 380 set +e 381 taglist=`git rev-list --tags` 382 rc=$? 383 set -e 384 if [ ! 0 -eq $rc -o x"$revlist" == x]; then 385 exit 0 386 fi 387 tag=`git tag --sort=-v:refname | grep [0\\|2\\|4\\|6\\|8]$ | head -n1` 388 git reset --hard 389 git checkout $tag 390 sed -i "s/chain-middleware:latest/chain-middleware:$tag/g" cmd/chain-middleware/k8s/02-chain-middleware.yaml 391 sed -i "s/uhub.service.ucloud.cn/$DOCKER_REGISTRY/g" cmd/chain-middleware/k8s/02-chain-middleware.yaml 392 if [ "x$REPLICAS_COUNT" == "x" ];then 393 REPLICAS_COUNT=2 394 fi 395 sed -i "s/replicas: 2/replicas: $REPLICAS_COUNT/g" cmd/chain-middleware/k8s/02-chain-middleware.yaml 396 sed -i "s/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g" cmd/chain-middleware/k8s/02-chain-middleware.yaml 397 make deploy-to-k8s-cluster 398 '''.stripIndent()) 399 } 400 } 401 402 stage('Post') { 403 steps { 404 // Assemble vet and lint info. 405 // warnings parserConfigurations: [ 406 // [pattern: 'govet.txt', parserName: 'Go Vet'], 407 // [pattern: 'golint.txt', parserName: 'Go Lint'] 408 // ] 409 410 // sh 'go2xunit -fail -input gotest.txt -output gotest.xml' 411 // junit "gotest.xml" 412 sh 'echo Posting' 413 } 414 } 415 } 416 post('Report') { 417 fixed { 418 script { 419 sh(script: 'bash $JENKINS_HOME/wechat-templates/send_wxmsg.sh fixed') 420 } 421 script { 422 // env.ForEmailPlugin = env.WORKSPACE 423 emailext attachmentsPattern: 'TestResults\\*.trx', 424 body: '${FILE,path="$JENKINS_HOME/email-templates/success_email_tmp.html"}', 425 mimeType: 'text/html', 426 subject: currentBuild.currentResult + " : " + env.JOB_NAME, 427 to: '$DEFAULT_RECIPIENTS' 428 } 429 } 430 success { 431 script { 432 sh(script: 'bash $JENKINS_HOME/wechat-templates/send_wxmsg.sh successful') 433 } 434 script { 435 // env.ForEmailPlugin = env.WORKSPACE 436 emailext attachmentsPattern: 'TestResults\\*.trx', 437 body: '${FILE,path="$JENKINS_HOME/email-templates/success_email_tmp.html"}', 438 mimeType: 'text/html', 439 subject: currentBuild.currentResult + " : " + env.JOB_NAME, 440 to: '$DEFAULT_RECIPIENTS' 441 } 442 } 443 failure { 444 script { 445 sh(script: 'bash $JENKINS_HOME/wechat-templates/send_wxmsg.sh failure') 446 } 447 script { 448 // env.ForEmailPlugin = env.WORKSPACE 449 emailext attachmentsPattern: 'TestResults\\*.trx', 450 body: '${FILE,path="$JENKINS_HOME/email-templates/fail_email_tmp.html"}', 451 mimeType: 'text/html', 452 subject: currentBuild.currentResult + " : " + env.JOB_NAME, 453 to: '$DEFAULT_RECIPIENTS' 454 } 455 } 456 aborted { 457 script { 458 sh(script: 'bash $JENKINS_HOME/wechat-templates/send_wxmsg.sh aborted') 459 } 460 script { 461 // env.ForEmailPlugin = env.WORKSPACE 462 emailext attachmentsPattern: 'TestResults\\*.trx', 463 body: '${FILE,path="$JENKINS_HOME/email-templates/fail_email_tmp.html"}', 464 mimeType: 'text/html', 465 subject: currentBuild.currentResult + " : " + env.JOB_NAME, 466 to: '$DEFAULT_RECIPIENTS' 467 } 468 } 469 } 470 }