pipeline { environment { PROJECT_NAME = "test" DOCKER_REPOSITORY_CREDENTIAL_ID = "7cc63152-c727-40fc-b177-d8397396f1ba" HARBOR_HOST = "registry.cn-hangzhou.aliyuncs.com" NAMESPACE_NAME = "newrain_wang" REPOSITORY_NAME = "my-web-app" TAG = "v2.0" REPLICAS = 4 YAML_PATH = "k8s/" DEPLOYMENT_NAME = "deploy.yml" STATUS_URL = "http://qf.jenkins.vip:30210/job/test/${BUILD_NUMBER}" CONSOLE_URL = "http://qf.jenkins.vip:30210/job/test/${BUILD_NUMBER}/console" } agent { kubernetes { cloud "kubernetes" yaml """ apiVersion: v1 kind: Pod spec: containers: - name: jnlp image: jenkins/inbound-agent:3107.v665000b_51092-15 args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)'] imagePullPolicy: IfNotPresent volumeMounts: - mountPath: "/etc/localtime" name: "volume-2" readOnly: false - name: kubectl image: kubesphere/kubectl:v1.22.0 imagePullPolicy: IfNotPresent tty: true command: ["cat"] volumeMounts: - mountPath: "/etc/localtime" name: "volume-2" readOnly: false - mountPath: "/var/run/docker.sock" name: "volume-docker" readOnly: false - mountPath: "/root/.kube/config" subPath: config name: "kubeconfig" readOnly: false - name: docker image: docker:19.03.15-git command: ['cat'] tty: true volumeMounts: - mountPath: "/var/run/docker.sock" name: "volume-docker" readOnly: false volumes: - name: volume-2 hostPath: path: "/usr/share/zoneinfo/Asia/Shanghai" - name: volume-docker hostPath: path: "/var/run/docker.sock" - name: kubeconfig secret: secretName: kubeconfig items: - key: config path: config """ } } stages { stage('构建镜像') { steps { withCredentials([usernamePassword(credentialsId: env.DOCKER_REPOSITORY_CREDENTIAL_ID, passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) { container('docker') { sh """ docker build -t ${env.HARBOR_HOST}/${env.NAMESPACE_NAME}/${env.REPOSITORY_NAME}:${env.TAG} . docker login ${env.HARBOR_HOST} --username ${env.USERNAME} --password ${env.PASSWORD} docker push ${env.HARBOR_HOST}/${env.NAMESPACE_NAME}/${env.REPOSITORY_NAME}:${env.TAG} """ } } } post { success { dingtalk ( robot: '4eabbd09-a21a-40a9-84db-6440c0daebec', type: 'MARKDOWN', title: '镜像构建成功 ${PROJECT_NAME}', text: [ '### 项目 ${PROJECT_NAME}', '---', '- 状态:成功', '- 阶段:构建镜像', '- 版本:${BUILD_NUMBER}', '- [查看部署详情](${STATUS_URL})', '- [查看日志Console](${CONSOLE_URL})' ], at: ['17694993496'] ) } failure { dingtalk ( robot: '4eabbd09-a21a-40a9-84db-6440c0daebec', type: 'MARKDOWN', title: '镜像构建失败 ${PROJECT_NAME}', text: [ '### 项目 ${PROJECT_NAME}', '---', '- 状态:失败', '- 阶段:构建镜像', '- 版本:${BUILD_NUMBER}', '- [查看部署详情](${STATUS_URL})', '- [查看日志Console](${CONSOLE_URL})' ], at: ['17694993496'] ) } } } stage('部署到kubernetes') { steps { container('kubectl') { sh """ sed -i "s/REPLICAS/${env.REPLICAS}/;s/HARBOR_HOST/${env.HARBOR_HOST}/;s/NAMESPACE_NAME/${env.NAMESPACE_NAME}/;s/REPOSITORY_NAME/${env.REPOSITORY_NAME}/;s/TAG/${env.TAG}/" ${env.YAML_PATH}${env.DEPLOYMENT_NAME} kubectl apply -f ${env.YAML_PATH}${env.DEPLOYMENT_NAME} """ } } post { success { dingtalk ( robot: '4eabbd09-a21a-40a9-84db-6440c0daebec', type: 'MARKDOWN', title: '部署成功 ${PROJECT_NAME}', text: [ '### 项目 ${PROJECT_NAME}', '---', '- 状态:成功', '- 阶段:部署到kubernetes', '- 版本:${BUILD_NUMBER}', '- [查看部署详情](${STATUS_URL})', '- [查看日志Console](${CONSOLE_URL})' ], at: ['17694993496'] ) } failure { dingtalk ( robot: '4eabbd09-a21a-40a9-84db-6440c0daebec', type: 'MARKDOWN', title: '部署失败 ${PROJECT_NAME}', text: [ '### 项目 ${PROJECT_NAME}', '---', '- 状态:失败', '- 阶段:部署到kubernetes', '- 版本:${BUILD_NUMBER}', '- [查看部署详情](${STATUS_URL})', '- [查看日志Console](${CONSOLE_URL})' ], at: ['17694993496'] ) } } } } }