找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

498

积分

0

好友

68

主题
发表于 前天 04:46 | 查看: 7| 回复: 0

通过 Jenkins、Maven 和 Git 的整合,可以构建一套高效的自动化部署流水线。其核心流程如下:

图片

  • 首先,开发人员将本地代码 git push 到远程 GitLab 服务器。
  • 然后,Jenkins 从仓库 git pull 拉取代码,并使用 Maven 将其构建成可执行的 jar 包。
  • 最后,Jenkins 通过 SSH Publisher 插件将构建产物发布到目标服务器并启动应用。

一、环境准备

本文演示需要三台独立的服务器,分别承担代码仓库、持续集成和运行环境角色。

服务器信息如下:

服务器名 IP地址 配置 安装软件
gitlab99 192.168.40.99 8C8G GitLab
jenkins98 192.168.40.98 4C4G Jenkins, JDK, Maven, Git
test97 192.168.40.97 2C2G JDK

注:GitLab与Jenkins的安装过程可参考相关文档,本文不再赘述。

二、GitLab项目配置

1. 创建空白项目

首先,在GitLab中创建一个用于存放代码的空白项目。

  • 进入“Groups”页面,点击“New group”创建一个新分组。
  • 在新建的分组内,点击“New project”,选择“Create blank project”创建空白项目。
  • 输入项目名称(如 jenkins-study),完成创建。
2. 生成访问令牌(Token)

为了能让Jenkins安全地拉取代码,需要在GitLab中生成一个访问令牌。

  • 点击页面左上角头像,进入“Settings” -> “Access Tokens”。
  • 填写令牌名称,勾选apiread_repository等必要权限,点击“Create personal access token”。
  • 妥善保存生成的Token字符串(例如 glpat-qx7VU3J219j1D4_92uqJ),关闭页面后将无法再次查看。

三、开发与提交SpringBoot应用

1. 创建SpringBoot项目

使用IDEA或任意IDE创建一个简单的SpringBoot Web项目。

  • 选择依赖时,加入“Spring Web”模块。
  • application.properties 中修改服务端口:
    server.port=8088
  • 创建一个简单的Controller用于测试:
    @RestController
    @RequestMapping("/")
    public class HelloController {
        @RequestMapping
        public String sayHello() {
            return "Hello dev";
        }
    }
  • 本地启动应用,访问 http://127.0.0.1:8088 验证是否成功返回 “Hello dev”。
2. 关联并推送代码至GitLab
  • 在IDEA中配置Git可执行文件路径(Settings -> Version Control -> Git)。
  • 将当前项目初始化为Git仓库(VCS -> Create Git Repository)。
  • 添加远程仓库地址(Git -> Manage Remotes),URL填写之前创建的GitLab项目克隆地址。
  • 推送代码时,身份验证选择“Token”,填入在GitLab生成的个人访问令牌。
  • 完成首次提交与推送后,在GitLab的Web界面合并代码至主分支。

四、Jenkins流水线配置

1. 安装必要插件

进入Jenkins的插件管理页面,安装以下插件:

  • Maven Integration:使Jenkins支持Maven项目。
  • Publish Over SSH:用于通过SSH向远程服务器传输文件并执行命令。
2. 创建并配置Maven项目
  • 在Jenkins首页点击“新建Item”,选择“构建一个Maven项目”,命名为 first
  • 源码管理:选择“Git”,填写GitLab仓库的URL,并添加凭据(用户名填写任意值,密码填写GitLab Token)。
  • 分支:指定要构建的分支,例如 */main
  • Build:在“Root POM”处保持默认的 pom.xml,Goals填写 clean package
  • 在Jenkins全局工具配置中(Manage Jenkins -> Tools),指定Maven的安装路径。
3. 测试构建

保存配置后,立即触发一次构建。在构建日志中,可以观察到Maven打包的过程。构建成功后,可以在Jenkins服务器的工作空间目录(如 /root/.jenkins/workspace/first/target/)找到生成的 jar 包。可在此目录下执行 java -jar 命令进行本地运行测试。

常见问题:若运行jar包时提示“no main manifest attribute”,需检查项目的 pom.xml,确保 spring-boot-maven-pluginskip 配置为 false

4. 配置SSH服务器与文件发布
  • 添加远程服务器:进入 Manage Jenkins -> Configure System,找到“Publish over SSH”区域,添加SSH Server。填写测试服务器(test97)的IP、SSH用户名和密码或密钥,并通过“Test Configuration”测试连接是否成功。
  • 配置构建后操作:在项目配置页面,找到“Post Steps”部分,选择“Send files or execute commands over SSH”。
    • Source files:填写 target/*.jar(表示要传输的构建产物)。
    • Remove prefix:填写 target(传输时会去掉路径中的target目录)。
    • Remote directory:填写 /root/jenkins-study(jar包在远程服务器的存放目录)。
    • Exec command:填写应用启动命令,例如:
      nohup java -jar /root/jenkins-study/*.jar >> /root/jenkins-study/log.out 2>&1 &
5. 优化:构建前清理环境

为避免多次部署时旧进程和文件造成冲突,需要在每次构建前清理测试服务器环境。

在测试服务器(test97)上创建清理脚本 /root/clean.sh

#!/bin/bash
appname=$1
if [ -z $appname ];
    then
        echo "应用名称不能为空!"
        exit -1
    else
        echo "应用名称为$1"
fi
rm -rf $appname/"${appname}"*.jar
pid=`ps -ef | grep $1 | grep 'java -jar' | awk '{printf $2}'`
echo "pid为$pid"
if [ -z $pid ];
    then
        echo "$appname is not started"
    else
        kill -9 $pid
        echo "$appname was stopped"
fi

赋予脚本执行权限:chmod +x /root/clean.sh

在Jenkins项目配置的“Pre Steps”中,增加一个“Execute shell script on remote host using ssh”步骤:

  • SSH Server:选择之前配置的test97服务器。
  • Command:填写 /root/clean.sh jenkins-study
6. 完整流程测试

保存所有配置,再次触发Jenkins构建。观察控制台输出,可以看到完整的流程:清理旧环境 -> 拉取代码 -> Maven打包 -> 传输Jar包 -> 启动新应用。最后,访问测试服务器地址 http://192.168.40.97:8088,验证应用是否成功部署并运行。

五、总结与思考

通过以上步骤,我们实现了一个基础的Jenkins CI/CD流水线,涵盖了从代码提交到自动部署的全过程。但这只是一个起点,一个成熟的生产级流水线还需要考虑更多因素,例如:

  • 多环境管理:如何区分开发、测试、生产环境的配置与部署。
  • 流水线即代码:使用Jenkinsfile将流水线配置纳入版本控制。
  • 自动化测试集成:在构建阶段加入单元测试、集成测试。
  • 镜像化部署:结合Docker,实现更高效、一致的环境交付。
  • 监控与回滚:部署后的健康检查、日志收集和快速回滚机制。

通过持续优化部署流程,可以显著提升软件交付的效率与可靠性,这正是DevOps实践的核心价值所在。




上一篇:DevOps开源项目实战指南:65k+Star学习与面试资源
下一篇:Linux系统进程管理实战指南:从基础命令到cgroups资源控制
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-11 04:41 , Processed in 0.084714 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表