jenkins pipeline k8s发布回滚

该博客介绍了如何在Jenkins中使用Pipeline脚本,根据用户选择的服务和输入的版本号,实现Kubernetes环境中服务的版本回滚操作。详细步骤包括设置环境变量、定义Pod模板、用户交互选择服务和输入版本、动态生成并部署更新后的YAML文件。

jenkins下pipeline 通过用户选择需要回滚的服务,输入回滚的版本号,实现k8s上发布的版本回滚

env.CREDENTIALSID = '5576057b-0a5c-4e95-9b1f-xxxxxxxx'
podTemplate(name: 'jenkins-slave',label: 'jenkins-slave', cloud: 'kubernetes-test',namespace: 'jenkins', containers: [
  containerTemplate(
      name: 'jnlp',
      image: '192.168.1.140/library/jnlp-slave-maven:latest',
      ttyEnabled: true,
      privileged: false,
      alwaysPullImage: false,
      )
  ],
  volumes:[
      hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
      hostPathVolume(mountPath: '/etc/localtime', hostPath: '/etc/localtime'),
      hostPathVolume(mountPath: '/usr/bin/docker', hostPath: '/usr/bin/docker'),
      //nfsVolume(mountPath: '/usr/local/maven',serverAddress: '192.168.1.110',serverPath: '/var/NHData/maven', readOnly: false),
      nfsVolume(mountPath: '/home/jenkins/Deployment',serverAddress: '192.168.1.110',serverPath: '/var/NHData/Deployment', readOnly: false),
      //nfsVolume(mountPath: '/root/.m2',serverAddress: '192.168.1.110',serverPath: '/var/NHData/.m2', readOnly: false),
      ]
) {
    node('jenkins-slave') {
            def app
    
     stage('准备版本回滚!') {
        //println '准备版本回滚!'  
                script {
                    env.SERVER_NAME = input message: '选择需要回滚的服务', ok: '确定回滚此服务',
                        parameters: [choice(name: 'SERVER_NAME', choices: ['无','gateway', 'inst','system'], description: '选择要回滚的服务')]

                        switch("${env.SERVER_NAME}"){
                            case 'gateway':
                                println('回滚gateway')
                                env.SERVER_PORT = 1111
                                break;
                            case 'inst':
                                println('回滚inst')
                                env.SERVER_PORT = 2222                                
                                break;
                             case 'system':
                                println('回滚system')
                                env.SERVER_PORT = 3333  
                                break;  
                            default:
                                println('error!!!!!!!')

                        }
                    }
        
        script {
                env.SERVICE_VERSION = input message: '输入需要回滚的版本号', ok: '回滚到此版本',            
                parameters: [string(name: '版本号', defaultValue: '无', description: '选择要回滚的服务')]
            
        }
        echo "回滚的服务为:${SERVER_NAME},端口号为:${SERVER_PORT}, 版本号为:${SERVICE_VERSION}"    
        sh "sed -e 's#{IMAGE_TAG}#${SERVICE_VERSION}#g;s#{APP_NAME}#${SERVER_NAME}#g;s#{APP_PORT}#${SERVER_PORT}#g;s#{SPRING_PROFILE}#test#g' /home/jenkins/Deployment/k8s-deployment.tpl > k8s-deployment.yml "
        sh 'cat k8s-deployment.yml'
        kubernetesDeploy configs: 'k8s-deployment.yml',kubeconfigId: '13a255a8-5048-4e87-8045-xxxxxxxx',enableConfigSubstitution: true
        }


    }
}

<think>好的,用户想知道如何在Kubernetes上使用Jenkins部署应用的最佳实践和教程。我需要结合提供的引用内容来组织答案。首先,系统级指令要求结构清晰,分步骤解答,同时生成相关问题,并且正确引用资料。 首先,用户提到的引用中有部署Jenkinsk8s的教程,比如引用3和4。所以第一步应该是安装和配置Jenkinsk8s集群。需要提到存储目录设置,可能参考引用3中的存储配置。然后,安装必要插件,比如Kubernetes插件,这是动态生成agent的关键,引用4提到了设置动态slave节点到k8s集群,需要详细说明如何配置Kubernetes Cloud。 接下来是配置CI/CD流水线,用户可能需要创建Pipeline项目,引用2提到立即构建和生成jar包,这里可以说明如何在Jenkinsfile中定义构建步骤,比如代码拉取、测试、打包。同时,集成kubectl工具,引用4中提到了使用kubectl命令,所以需要配置kubectl在Jenkins中的访问权限,可能通过kubeconfig或者ServiceAccount。 然后是自动化部署部分,引用5提到构建后自动创建agent pod,但这里可能需要扩展到应用的部署,比如使用kubectl apply部署到k8s集群,或者用Helm。另外,设置触发条件,如代码push触发构建,引用2中的立即构建和自动构建设置可以参考。 最佳实践部分,要包括动态资源分配,比如引用4和5的动态agent,优化资源利用。安全方面可能需要提到凭证管理和RBAC。版本控制方面,Jenkinsfile存放在代码库中,以及使用容器化构建环境确保一致性。监控和日志部分,集成Prometheus和EFK,虽然引用中没有直接提到,但属于常见实践。 最后,相关问题需要根据内容生成,可能涉及性能优化、安全配置、多环境部署、监控集成和回滚策略。确保每个问题都基于回答中的要点。 检查是否需要所有引用都被合理使用,比如引用1中的Jenkins URL配置可能不太相关,但引用2、3、4、5中的内容都需要整合到步骤中。确保LaTeX格式正确,但用户问题中数学内容较少,可能不需要太多公式。使用中文回答,结构分步骤,代码块用反引号,引用标识自然添加。</think>### 如何使用Jenkins在Kubernetes上部署应用的分步指南 #### 1. **安装与配置JenkinsK8S集群** - **部署JenkinsK8S** 通过YAML文件定义Jenkins的Deployment、Service和PersistentVolumeClaim(PVC),确保数据持久化。例如,存储目录需挂载到PVC,避免容器重启后数据丢失[^3]。 ```yaml # 示例PVC配置(引用自存储设置) volumes: - name: jenkins-home persistentVolumeClaim: claimName: jenkins-pvc ``` - **安装必要插件** 安装 `Kubernetes` 插件以实现动态Agent管理,以及 `Git`、`Maven`、`Pipeline` 等插件支持CI/CD流程。 #### 2. **配置Kubernetes动态Agent** - **连接K8S集群** 在Jenkins的 `系统管理 > 云管理` 中添加Kubernetes Cloud配置,填写API Server地址、命名空间(如 `devops`)及ServiceAccount凭据[^4]。 - **定义Pod模板** 指定Agent容器的镜像(如 `jenkins/inbound-agent`),资源限制(CPU/内存),并挂载必要的工具目录(如Maven、kubectl)。 ```groovy podTemplate( containers: [containerTemplate(name: 'jnlp', image: 'jenkins/inbound-agent')] ) ``` #### 3. **构建CI/CD流水线** - **定义Jenkins Pipeline** 创建 `Jenkinsfile`,包含代码拉取、构建、测试、打包阶段。例如Maven构建: ```groovy pipeline { agent { kubernetes { label 'k8s-agent' } } stages { stage('Build') { steps { sh 'mvn clean package' } } } } ``` - **集成kubectl部署** 在Pipeline中添加部署阶段,使用kubectl或Helm将应用部署到K8S。确保Jenkins Pod具有k8s集群操作权限(通过RBAC配置)[^5]。 ```groovy stage('Deploy') { steps { sh 'kubectl apply -f deployment.yaml' } } ``` #### 4. **自动化触发与监控** - **配置Webhook触发** 在Git仓库(如GitHub)中设置Webhook,当代码Push时自动触发流水线构建[^2]。 - **日志与状态反馈** 集成Slack或邮件通知,实时反馈构建和部署状态。 ### 最佳实践 1. **动态资源分配** 通过Kubernetes插件自动扩缩容Agent Pod,避免资源闲置[^4]。 2. **安全加固** - 使用K8S的 `Secrets` 存储敏感信息(如数据库密码)。 - 限制Jenkins ServiceAccount的RBAC权限(最小化原则)。 3. **容器化构建环境** 为不同项目定制专用构建镜像(如包含Java、Node.js工具链),确保环境一致性。 4. **回滚机制** 在Pipeline中集成版本标记与回滚脚本,例如通过 `kubectl rollout undo` 快速恢复。 ### 示例部署流程 ```text 1. 开发者Push代码到Git仓库 2. Jenkins触发Pipeline,启动K8S Agent Pod 3. 执行代码编译、单元测试、Docker镜像构建 4. 将镜像推送到私有仓库(如Harbor) 5. 更新K8S Deployment镜像版本,触发滚动更新 ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值