一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Jenkins自动部署Ubuntu应用

时间:2026-07-05 09:48:47 编辑:袖梨 来源:一聚教程网

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

Jenkins自动化部署Ubuntu应用

一 环境准备与安装

  • 准备一台 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.iosudo 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.keyecho "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/nullsudo apt update && sudo apt install -y jenkinssudo 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 anyenvironment {IMAGE = "your-registry/your-project:${env.BUILD_ID}"REGISTRY = "your-registry"}stages {stage('Checkout') {steps { git url: '[email protected]: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 || truedocker rm app-container || truedocker pull $IMAGEdocker 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 bashAPP_JAR="/opt/myapp/app.jar"case "$1" instart)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" || truenohup 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 SSH 将 target/*.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。这些策略与排错项覆盖了常见的网络、权限与进程生命周期问题,可显著提升流水线的稳定性与可维护性。

热门栏目