最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Jenkins自动部署Ubuntu应用
时间:2026-07-05 09:48:47 编辑:袖梨 来源:一聚教程网
在 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.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,包含镜像构建、推送与远程运行。
- 将 jenkins 用户加入 docker 组:
四 部署方式二 直接发布可执行 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 推送事件触发(需公网可达或内网隧道)。
- 轮询 SCM:如
- 常见问题与要点:
- 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。这些策略与排错项覆盖了常见的网络、权限与进程生命周期问题,可显著提升流水线的稳定性与可维护性。
- Permission denied(Docker):
相关文章
- 大周列国志单田复国剧本田齐复国怎么完成 07-05
- cctv5app如何投屏 操作方法介绍 07-05
- 鄂汇通如何查中考成绩 鄂汇办中考成绩查询教程 07-05
- 潇湘高考缴费app志愿填报怎么填报 潇湘高考填报志愿方法指南 07-05
- 今日相机如何设置广角 今日水印相机广角镜头使用教程 07-05
- dnf手游助手app怎么隐藏个人游戏信息 详细操作方法介绍 07-05