jenkinsfile k8s部署模板
jenkinsfile k8s部署模板
def label = "slave-${UUID.randomUUID().toString()}" podTemplate(label: label, containers: [ containerTemplate(name: 'maven', image: 'maven:3.6.3-jdk-8', command: 'cat', ttyEnabled: true), containerTemplate(name: 'docker', image: 'docker:19.03.8', command: 'cat', ttyEnabled: true), containerTemplate(name: 'kubectl', image: 'bitnami/kubectl:1.18.3', command: 'cat', ttyEnabled: true), volumes: [ hostPathVolume(mountPath: '/root/.m2', hostPath: '/var/lib/cache/.m2'), hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock') hostPathVolume(mountPath: '/.kube/config', hostPath: '/root/.kube'), ]) { node(label) { def myRepo = checkout scm def gitCommit = myRepo.GIT_COMMIT def gitBranch = myRepo.GIT_BRANCH def imageTag = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim() def dockerRegistryUrl = "registry.my.lo" def imageEndpoint = "public/spring-produce" def image = "${dockerRegistryUrl}/${imageEndpoint}" stage('单元测试') { echo "1.测试阶段" } stage('代码编译打包') { try { container('maven') { echo "2. 代码编译打包阶段" sh "mvn clean package -Dmaven.test.skip=true" } } catch (exc) { println "构建失败 - ${currentBuild.fullDisplayName}" throw(exc) } } stage('构建 Docker 镜像') { withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'dockerhub', usernameVariable: 'DOCKER_HUB_USER', passwordVariable: 'DOCKER_HUB_PASSWORD']]) { container('docker') { echo "3. 构建 Docker 镜像阶段" sh """ docker login ${dockerRegistryUrl} -u ${DOCKER_HUB_USER} -p ${DOCKER_HUB_PASSWORD} docker build -t ${image}:${imageTag} . docker push ${image}:${imageTag} """ } } } stage('运行 Kubectl') { container('kubectl') { echo "查看 K8S 集群 Pod 列表" sh "kubectl get pods" sh """ sed -i "s/<IMAGE>/${image}" deploy/k8s.yaml sed -i "s/<IMAGE_TAG>/${imageTag}" deploy/k8s.yaml kubectl apply -f deploy/k8s.yaml --namespace devops """ } } stage('快速回滚?') { withCredentials([file(credentialsId: 'kubeconfig', variable: 'KUBECONFIG')]) { container('helm') { sh "mkdir -p ~/.kube && cp ${KUBECONFIG} ~/.kube/config" def userInput = input( id: 'userInput', message: '是否需要快速回滚?', parameters: [ [ $class: 'ChoiceParameterDefinition', choices: "Y\nN", name: '回滚?' ] ] ) if (userInput == "Y") { sh "helm rollback produce-deployment --namespace devops" } } } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通