首页主机资讯Jenkins自动化部署Ubuntu应用

Jenkins自动化部署Ubuntu应用

时间2025-12-18 20:05:04发布访客分类主机资讯浏览1151
导读:在 Ubuntu 上使用 Jenkins 实现自动化部署的完整方案 一 环境准备与安装 准备一台 Ubuntu 22.04 LTS 服务器,安装 OpenJDK 11(Jenkins 官方推荐版本),并安装 Git、Maven、Docke...

在 Ubuntu 上使用 Jenkins 实现自动化部署的完整方案

一 环境准备与安装

  • 准备一台 Ubuntu 22.04 LTS 服务器,安装 OpenJDK 11(Jenkins 官方推荐版本),并安装 Git、Maven、Docker(按项目需要)。
  • 安装与启动 Jenkins(APT 方式,含新版签名与源):
    sudo apt update &
        &
         sudo apt install -y openjdk-11-jdk git maven docker.io
    sudo systemctl start docker &
        &
         sudo systemctl enable docker
    
    # 新版 Debian/Ubuntu 推荐 GPG 与签名源
    wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io.key
    echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list >
         /dev/null
    sudo apt update &
        &
         sudo apt install -y jenkins
    sudo systemctl start jenkins &
        &
         sudo systemctl enable jenkins
    
  • 访问 http://< 服务器IP> :8080,首次解锁密码在 /var/lib/jenkins/secrets/initialAdminPassword
  • 防火墙放行端口(如使用 UFW):sudo ufw allow 8080,22/tcp
    以上步骤覆盖了在 Ubuntu 上安装 Java、Jenkins、Docker 与基础网络配置,适用于后续流水线构建与部署。

二 Jenkins 初始化与插件配置

  • 推荐插件:Git Plugin、Pipeline、Docker Pipeline、SSH Pipeline Steps、Blue Ocean、Credentials Binding、Maven Integration
  • 安全与可用性:
    • 禁用匿名访问,创建管理员用户;在 Manage Jenkins → Configure System 配置 JDK、Maven、Git 路径。
    • 如需加速插件安装,可在 Manage Jenkins → Plugin Manager → Advanced 将 Update Site 替换为国内镜像(如清华源)。
  • 凭据管理:添加 SSH 私钥(用于目标机部署)、Docker Registry 账号(如需推送镜像)。
    这些插件与配置为流水线拉取代码、构建、容器化与远程发布提供支撑。

三 部署方式一 Docker 化 Spring Boot 应用

  • 适用场景:代码提交 → 拉取 → Maven 编译Docker 镜像打包 → 推送镜像仓库 → SSH 远程部署到目标 Ubuntu 主机。
  • 项目根目录放置 Jenkinsfile(示例):
    pipeline {
    
      agent any
      environment {
    
        IMAGE = "your-registry/your-project:${
    env.BUILD_ID}
    "
        REGISTRY = "your-registry"
      }
    
      stages {
    
        stage('Checkout') {
    
          steps {
     git url: 'git@github.com:your/project.git', branch: 'main' }
    
        }
    
        stage('Build') {
    
          steps {
     sh 'mvn -B -DskipTests clean package' }
    
        }
    
        stage('Build Docker Image') {
    
          steps {
     script {
     docker.build(IMAGE) }
     }
    
        }
    
        stage('Push Image') {
    
          steps {
    
            withCredentials([usernamePassword(credentialsId: 'docker-creds',
                                            usernameVariable: 'USER',
                                            passwordVariable: 'PASS')]) {
    
              sh "docker login -u $USER -p $PASS $REGISTRY"
              sh "docker push $IMAGE"
            }
    
          }
    
        }
    
        stage('Deploy to Server') {
    
          steps {
    
            sshPublisher(
              publishers: [
                sshPublisherDesc(
                  configName: 'prod-ubuntu',
                  transfers: [
                    sshTransfer(
                      execCommand: """
                        docker stop app-container || true
                        docker rm app-container || true
                        docker pull $IMAGE
                        docker run -d --name app-container -p 8080:8080 $IMAGE
                      """
                    )
                  ]
                )
              ]
            )
          }
    
        }
    
      }
    
      post {
    
        success {
     archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true }
    
        failure {
     echo '部署失败,请检查日志' }
    
      }
    
    }
        
    
  • 目标机权限与连通性:
    • jenkins 用户加入 docker 组:sudo usermod -aG docker jenkins & & sudo systemctl restart jenkins
    • 确保 Jenkins→目标机 SSH 免密或凭据正确,且目标机防火墙放行 22/8080
      该流程覆盖 Docker 化应用的完整 CI/CD,包含镜像构建、推送与远程运行。

四 部署方式二 直接发布可执行 JAR 到目标机

  • 适用场景:不使用容器,直接在目标 Ubuntu 主机运行 Spring Boot JAR
  • 思路:Jenkins 构建后通过 SSH 发送 JAR 并执行远程脚本启停应用。示例远程脚本 remote_run.sh(放置于目标机):
    #!/usr/bin/env bash
    APP_JAR="/opt/myapp/app.jar"
    case "$1" in
      start)
        nohup java -Xms512m -Xmx1g -jar "$APP_JAR" >
         app.log 2>
        &
        1 &
        
        echo "Started, PID: $!"
        ;
        ;
        
      stop)
        pkill -f "$APP_JAR" &
        &
         echo "Stopped"
        ;
        ;
        
      restart)
        pkill -f "$APP_JAR" || true
        nohup java -Xms512m -Xmx1g -jar "$APP_JAR" >
         app.log 2>
        &
        1 &
        
        echo "Restarted"
        ;
        ;
    
      *)
        echo "Usage: $0 {
    start|stop|restart}
        "
        exit 1
        ;
        ;
        
    esac
    
  • 在 Jenkins 的 Freestyle 任务中:
    • 源码管理:配置 Git 仓库与凭据。
    • 构建:执行 mvn clean package -DskipTests
    • 构建后操作:使用 Send build artifacts over SSHtarget/*.jar 传到目标机(如 /opt/myapp/),并 Exec command 执行:/opt/myapp/remote_run.sh restart
  • 避免 Jenkins 结束后杀掉子进程:在远程脚本启动命令前导出变量 BUILD_ID=dontKillMe(或 JENKINS_NODE_COOKIE=dontKillMe)。
    该方式适合轻量部署与物理/虚拟机环境,脚本化管理启停与回滚。

五 触发策略与常见问题处理

  • 触发策略:
    • 轮询 SCM:如 H/5 * * * *(每 5 分钟检查一次变更)。
    • Webhook:GitHub/GitLab 推送事件触发(需公网可达或内网隧道)。
  • 常见问题与要点:
    • Permission denied(Docker)sudo usermod -aG docker jenkins & & sudo systemctl restart jenkins
    • SSH 超时:检查云安全组/本机防火墙与 22 端口连通性。
    • 构建卡住:为关键阶段设置超时,例如 options { timeout(time: 30, unit: 'MINUTES') }
    • 插件安装慢:更换 Update Site 为国内镜像源。
    • 进程被杀死:在远程启动 Java 前导出 BUILD_ID=dontKillMe
      这些策略与排错项覆盖了常见的网络、权限与进程生命周期问题,可显著提升流水线的稳定性与可维护性。

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


若转载请注明出处: Jenkins自动化部署Ubuntu应用
本文地址: https://pptw.com/jishu/775433.html
Jenkins部署Ubuntu的最佳实践 Jenkins部署Ubuntu脚本示例

游客 回复需填写必要信息