@Library('devops') _ pipeline { agent {label 'jenkins-slave-jnlp'} environment { // https://stackoverflow.com/questions/53541489/updating-environment-global-variable-in-jenkins-pipeline-from-the-stage-level NAME="admin-tmpl" NAMESPACE="oppc-rcyj-web" SERVER_PORT="80" } options { // timestamps() //日志会有时间 skipDefaultCheckout() //删除隐式checkout scm语句 // disableConcurrentBuilds() //禁止并行,会列队式等前面的任务完才进行下一个任务 timeout(time: 1, unit: 'HOURS') //流水线超时设置1h } stages { stage('Init'){ steps { script{ // 【测试环境】变量 env.INGRESS_HOST='admin-tmpl-test.rencaiyoujia.cn' env.INGRESS_TLS_SECRET="rencaiyoujia-tls-secret" env.REPLICAS="1" //deployment的副本数 KUBECONTEXT = "k8s-test-admin" //测试环境k8s NPM_RUN_BUILD_CMD="npm run build:test" DOCKERFILE_NAME="Dockerfile" // 【生产环境】变量 if( "${BRANCH_NAME}"== "master"){ env.INGRESS_HOST='admin-tmpl.rencaiyoujia.com' env.INGRESS_TLS_SECRET="rencaiyoujia-tls-secret" env.REPLICAS="2" KUBECONTEXT="k8s-prod-admin" //生产环境k8s NPM_RUN_BUILD_CMD="npm run build:prod" DOCKERFILE_NAME="Dockerfile" } // 【开发环境】变量 if( "${BRANCH_NAME}"== "dev"){ env.INGRESS_HOST='admin-tmpl-dev.rencaiyoujia.cn' env.INGRESS_TLS_SECRET="rencaiyoujia-tls-secret" env.REPLICAS="1" KUBECONTEXT="k8s-dev-admin" //开发环境k8s NPM_RUN_BUILD_CMD="npm run build:dev" DOCKERFILE_NAME="Dockerfile" } } } } stage('Checkout') { steps { checkout scm } } stage('npm打包') { steps { script{ // sh 'npm config set registry https://registry.npm.taobao.org' sh 'npm install --registry=https://registry.npm.taobao.org' sh "${NPM_RUN_BUILD_CMD}" } } } stage('DockerBuild') { steps { script{ sh "rm -rf docker/dist;mv dist docker" devops.docker(env.NAME,dockerfile:"docker/${DOCKERFILE_NAME}",context:"docker").build().push() } } } stage('Test') { steps { echo 'Testing..' } } stage('Deploy') { parallel { stage('deploy ingress') { when { expression { env.INGRESS_HOST != null } } steps{ sh """envsubst < k8smanifests/svc.yaml | kubectl --context ${KUBECONTEXT} apply -f - ;\ envsubst < k8smanifests/ingress.yaml | kubectl --context ${KUBECONTEXT} apply -f - ;\ """ } } stage('Deploy') { steps{ sh """envsubst < k8smanifests/deploy.yaml ;\ envsubst < k8smanifests/deploy.yaml | kubectl --context ${KUBECONTEXT} apply -f - ;\ """ } } } } } post{ success{ script{ devops.dingtalk(env.NAME,env.DOCKERIMAGE,"构建成功 ✅") } } failure{ script{ devops.dingtalk(env.NAME,env.DOCKERIMAGE,"构建失败 ❌") } } unstable{ script{ devops.dingtalk(env.NAME,env.DOCKERIMAGE,"不稳定构建 ✅") } } aborted{ script{ devops.dingtalk(env.NAME,env.DOCKERIMAGE,"暂停或中断 ❌") } } } }