首页主机资讯Jenkins在Linux上如何实现持续部署

Jenkins在Linux上如何实现持续部署

时间2025-10-14 16:51:03发布访客分类主机资讯浏览870
导读:1. 环境准备:安装Jenkins与基础工具 在Linux系统(如Ubuntu/CentOS)上,首先需要安装Jenkins及持续部署所需的工具链。 安装Jenkins: Ubuntu/Debian系统:运行sudo apt updat...

1. 环境准备:安装Jenkins与基础工具

在Linux系统(如Ubuntu/CentOS)上,首先需要安装Jenkins及持续部署所需的工具链。

  • 安装Jenkins
    • Ubuntu/Debian系统:运行sudo apt update & & sudo apt install jenkins,启动服务sudo systemctl start jenkins并设置开机自启sudo systemctl enable jenkins
    • CentOS/RHEL系统:可通过YUM仓库或Docker安装(推荐)。YUM方式需先添加Jenkins仓库(wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.reporpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key),再运行sudo yum install jenkins;Docker方式更轻量,执行docker pull jenkins/jenkins:lts并启动容器(docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts)。
  • 安装基础工具:根据项目需求安装Java(sudo apt install openjdk-11-jdk)、Maven/Gradle(sudo apt install maven)、Git(sudo apt install git)、Docker(sudo yum install docker并启动服务)等。

2. 配置Jenkins:插件与权限

Jenkins的功能扩展依赖插件,需安装以下核心插件:

  • 进入Jenkins Web界面(http://< 服务器IP> :8080),完成初始设置(输入管理员密码、设置用户名/密码)。
  • 进入“Manage Jenkins”→“Manage Plugins”,安装以下插件:
    • Git Plugin:用于从Git仓库拉取代码;
    • Pipeline Plugin:支持Pipeline脚本定义流程;
    • Docker Plugin:与Docker交互(如构建、推送镜像);
    • Deploy to Container Plugin:部署应用到Tomcat、WildFly等容器;
    • SSH Agent Plugin:通过SSH连接远程服务器执行部署命令(可选)。
  • 配置全局工具:进入“Manage Jenkins”→“Global Tool Configuration”,设置Git路径(如/usr/bin/git)、Maven/Gradle安装路径(如/usr/local/maven),避免每次手动指定。

3. 创建Pipeline Job:定义持续部署流程

Pipeline是Jenkins实现持续部署的核心,通过脚本定义“代码拉取→构建→测试→部署”的全流程。

  • 进入Jenkins界面,点击“New Item”,输入Job名称(如my-app-cd),选择“Pipeline”,点击“OK”。
  • 在Pipeline配置页面,选择“Pipeline script”(或“Pipeline script from SCM”若代码托管在Git),编写Pipeline脚本。以下是一个通用示例:
    pipeline {
    
        agent any  // 使用任意可用节点执行
        stages {
    
            stage('Checkout') {
    
                steps {
    
                    git url: 'https://github.com/your-repo/your-project.git', branch: 'main'  // 从Git拉取代码
                }
    
            }
    
            stage('Build') {
    
                steps {
    
                    sh 'mvn clean package'  // 使用Maven构建(Java项目),Gradle项目替换为`./gradlew build`
                }
    
            }
    
            stage('Test') {
    
                steps {
    
                    sh 'mvn test'  // 执行单元测试
                }
    
            }
    
            stage('Deploy to Staging') {
    
                steps {
    
                    script {
    
                        docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
      // 登录Docker Hub
                            def customImage = docker.build("your-dockerhub-username/your-app:${
    env.BUILD_NUMBER}
    ")  // 构建镜像并打版本标签
                            customImage.push()  // 推送镜像到仓库
                        }
        
                        sshPublisher(  // 通过SSH连接到远程服务器,执行部署命令
                            continueOnError: false,
                            failOnError: true,
                            publishers: [
                                sshPublisherDesc(
                                    configName: 'staging-server',  // SSH服务器配置名称(需提前在Jenkins中添加)
                                    verbose: true,
                                    transfers: [
                                        sshTransfer(
                                            execCommand: 'cd /opt/app &
        &
         docker-compose pull &
        &
     docker-compose up -d',  // 拉取最新镜像并重启容器
                                            remoteDirectory: '/opt/app'
                                        )
                                    ]
                                )
                            ]
                        )
                    }
    
                }
    
            }
    
        }
    
        post {
    
            always {
    
                junit 'target/surefire-reports/*.xml'  // 收集测试报告
            }
    
            success {
    
                echo 'Deployment succeeded!'  // 构建成功通知
            }
    
            failure {
    
                echo 'Deployment failed!'  // 构建失败通知
            }
    
        }
    
    }
        
    

    注:需提前在Jenkins中配置Docker Hub凭证(“Manage Jenkins”→“Manage Credentials”→“Add Credentials”)和SSH服务器凭证(“Manage Jenkins”→“Manage Credentials”→“Add Credentials”,类型选“SSH Username with private key”)。

4. 配置触发器:实现自动化构建

为了让Jenkins在代码变更时自动触发部署,需配置触发器:

  • 轮询SCM:在Pipeline配置页面的“Build Triggers”部分,勾选“Poll SCM”,设置轮询时间(如H/5 * * * *表示每5分钟检查一次Git仓库是否有新提交)。
  • Webhook触发(推荐):更实时,需在Git仓库(如GitHub、GitLab)中配置Webhook,指向Jenkins服务器的http://< 服务器IP> :8080/github-webhook/(GitHub)或http://< 服务器IP> :8080/gitlab-webhook/(GitLab)。在Jenkins Job配置中,勾选“GitHub hook trigger for GITScm polling”(GitHub)或“GitLab hook trigger for GITScm polling”(GitLab)。

5. 部署到目标环境:常用方式

持续部署的核心是将构建产物(如JAR/WAR包、Docker镜像)推送到目标环境(测试/生产服务器)。常见方式如下:

  • Docker部署:通过Pipeline脚本构建Docker镜像,推送到Docker Hub或私有仓库,再通过SSH连接到目标服务器,执行docker pulldocker-compose up -d重启容器(如上述Pipeline示例中的“Deploy to Staging”阶段)。
  • 直接部署JAR/WAR包:若项目是Java应用,可通过Pipeline脚本将构建好的JAR/WAR包复制到目标服务器,使用scp命令(需配置SSH密钥),然后重启应用服务(如Tomcat)。示例脚本:
    stage('Deploy to Production') {
    
        steps {
        
            sshPublisher(
                configName: 'production-server',
                verbose: true,
                transfers: [
                    sshTransfer(
                        execCommand: 'systemctl stop tomcat &
        &
         rm -rf /opt/tomcat/webapps/my-app.war &
        &
         rm -rf /opt/tomcat/webapps/my-app &
        &
         scp user@jenkins-server:/opt/jenkins/workspace/my-app-cd/target/my-app.war user@production-server:/opt/tomcat/webapps/ &
        &
     systemctl start tomcat',
                        remoteDirectory: '/opt/tomcat/webapps'
                    )
                ]
            )
        }
    
    }
        
    
  • 容器编排(可选):若使用Kubernetes,可通过Pipeline脚本调用kubectl apply -f k8s-deployment.yaml命令,将应用部署到K8s集群。

6. 监控与优化:保障部署稳定性

  • 日志与通知:通过Pipeline的post section配置构建结果通知(如邮件、Slack消息),收集测试报告(junit步骤),方便快速定位问题。
  • 回滚机制:在Docker部署中,可通过保留旧镜像版本,在部署失败时快速回滚(如docker-compose pull old-image & & docker-compose up -d)。
  • 性能监控:集成Prometheus、Grafana等工具,监控应用性能指标(如CPU、内存、响应时间),及时预警异常。

通过以上步骤,即可在Linux系统上使用Jenkins实现应用的持续部署,提升开发效率和应用交付速度。需根据实际项目需求调整Pipeline脚本和部署方式(如Spring Boot、Node.js等不同技术栈的构建命令差异)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Jenkins在Linux上如何实现持续部署
本文地址: https://pptw.com/jishu/726020.html
Linux Jenkins如何实现代码质量检查 Linux Jenkins如何实现分布式构建

游客 回复需填写必要信息