#!/usr/bin/env groovy pipeline{ agent any options { gitLabConnection('xiejunjie') gitlabBuilds(builds: ['checkout', 'build','publish','deploy','release']) // skipDefaultCheckout true } environment { tagName = """${sh(returnStdout: true, script: 'git describe --abbrev=0 --tags').trim()}""" shortCommit ="""${sh(returnStdout: true, script: "git log -n 1 --pretty=format:'%h'").trim()}""" registryDomain = ".gree.com" repo = "docker_proxy" port = 12971 jobName ="speech_nlu_parse" node="a-gtw-01" index="fluentd-speech_nlu_parse" } triggers{ GenericTrigger( genericVariables: [ [key: 'ref', value: '$.ref'] ], causeString: 'Triggered on $ref', token: 'speech_nlu_parse-b73b246d4bc9c5c9', printContributedVariables: true, printPostContent: true, silentResponse: false, regexpFilterText: '$ref', //regexpFilterExpression: '^refs/heads/(dev\\d*|test|master)$' ) } stages{ stage("checkout"){ steps{ updateGitlabCommitStatus name: 'checkout', state: 'running' checkout([ $class: 'GitSCM', branches: [[ name: "refs/tags/$tagName" ]], extensions: [[ $class: 'CloneOption', noTags: false, reference: '', shallow: false ]], userRemoteConfigs: [[ credentialsId: 'b56f8c12-cad2-41f0-a85f-36b3b3dc3241', // credentialsId: '4ec77ef2-5f46-4b8a-b55c-f047f6fdae7d', url: 'https://api.gree.com/gitlab/zwj/speech_nlu_parse.git' ]] ]) echo "Building shortCommit $tagName" echo "Building ref $ref" echo "get code from scm" } post { failure { updateGitlabCommitStatus name: 'checkout', state: 'failed' } aborted { updateGitlabCommitStatus name: 'checkout', state: 'canceled' } success { updateGitlabCommitStatus name: 'checkout', state: 'success' } } } stage("build"){ when { anyOf{ environment name: 'deployEnv', value: 'testnlu' environment name: 'deployEnv', value: 'nlu' } } steps{ updateGitlabCommitStatus name: 'build', state: 'running' sh """ docker build --add-host=goproxy.cn:112.54.108.85 --add-host=proxy.golang.com.cn:112.90.43.134 --add-host=mirrors.aliyun.com:182.89.221.213 --force-rm --no-cache --target runner -t $deployEnv$registryDomain/$repo/${jobName}:${tagName} -f Dockerfile . """ } post { failure { updateGitlabCommitStatus name: 'build', state: 'failed' } aborted { updateGitlabCommitStatus name: 'build', state: 'canceled' } success { updateGitlabCommitStatus name: 'build', state: 'success' } } } stage("publish"){ when { anyOf{ environment name: 'deployEnv', value: 'testnlu' environment name: 'deployEnv', value: 'nlu' } } steps{ updateGitlabCommitStatus name: 'publish', state: 'running' withDockerRegistry([url: "https://testnlu.gree.com",credentialsId: "83d26e44-426f-494a-b771-aac60d07cd7c"]){ sh "docker push $deployEnv$registryDomain/$repo/${jobName}:${tagName}" } } post { failure { updateGitlabCommitStatus name: 'publish', state: 'failed' } aborted { updateGitlabCommitStatus name: 'publish', state: 'canceled' } success { updateGitlabCommitStatus name: 'publish', state: 'success' } } } stage("deploy"){ steps{ echo "deployEnv $deployEnv" updateGitlabCommitStatus name: 'deploy', state: 'running' script{ withCredentials([usernamePassword(credentialsId: '83d26e44-426f-494a-b771-aac60d07cd7c', passwordVariable: 'passwd', usernameVariable: 'user')]) { if (env.deployEnv=='testnlu'){ sshPublisher( publishers: [sshPublisherDesc(configName: 'w-web-01', transfers: [ sshTransfer(cleanRemote: false, excludes: '', execCommand: "if [ `sudo docker service ls |grep -w ${jobName}|wc -l` -ge 1 ];then sudo docker service rm ${jobName};fi && \ sudo docker login -u ${user} -p ${passwd} https://${deployEnv}${registryDomain} && \ sudo docker service create --with-registry-auth --name ${jobName} -p mode=host,published=${port},target=${port} --network test_gree --replicas 1 --constraint node.platform.os==linux --constraint node.hostname==${node} --log-driver=fluentd --log-opt fluentd-address=10.7.82.112:24224 --log-opt mode=non-blocking --log-opt tag=${index} --restart-condition on-failure --update-delay 10s --update-parallelism 1 --mount type=bind,source=/etc/hosts,target=/etc/hosts --mount type=bind,source=/lib64,target=/lib64 --mount type=bind,source=/var/log/service/${jobName},target=/var/log/service/${jobName} ${deployEnv}${registryDomain}/${repo}/${jobName}:${tagName}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '' ) ], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true )]) }else if (env.deployEnv=='nlu'){ sshPublisher( publishers: [sshPublisherDesc(configName: 'a-gtw-01', transfers: [ sshTransfer(cleanRemote: false, excludes: '', execCommand: "if [ `sudo docker ps |grep -w ${jobName}|wc -l` -ge 1 ];then sudo docker stop ${jobName};fi && \ if [ `sudo docker ps -af status=exited|grep -w ${jobName}|wc -l` -ge 1 ];then sudo docker rm `sudo docker ps -qf status=exited`;fi && \ sudo docker login -u ${user} -p ${passwd} https://${deployEnv}${registryDomain} && \ sudo docker run -d --name ${jobName} -p ${port}:${port} ${deployEnv}${registryDomain}/${repo}/${jobName}:${tagName}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '' ) ], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true )]) } } } } post { failure { updateGitlabCommitStatus name: 'deploy', state: 'failed' } aborted { updateGitlabCommitStatus name: 'deploy', state: 'canceled' } success { updateGitlabCommitStatus name: 'deploy', state: 'success' } } } stage("release") { when { anyOf{ environment name: 'deployEnv', value: 'testnlu' environment name: 'deployEnv', value: 'nlu' } } steps { updateGitlabCommitStatus name: 'release', state: 'running' echo "Building $BRANCH_NAME" echo "shortCommit $shortCommit" //echo "Building $TAG_NAME" } post { failure { updateGitlabCommitStatus name: 'release', state: 'failed' } aborted { updateGitlabCommitStatus name: 'release', state: 'canceled' } success { updateGitlabCommitStatus name: 'release', state: 'success' } } } } }