Jenkins maven git 多模块自动部署

某一模块提交更改只打包发布这个模块和他相关的依赖

考虑下面的场景:

一个Git repository中有6个Java项目A,B,C,D,E,F.

A是最底层模块。B依赖A, C,D,E,F又同时依赖A和B。 这时候项目可以分成三层关系。

最近看到这个场景 深思熟虑后发布这个教程,大家多多指教

  1. 下载jenkins
    官网下载地址 https://www.jenkins.io/download/
    nohup java -jar jenkins.war & 后台运行war包
  2. jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_jenkins


  3. 登录Jenkins, 点击左侧的新建,创建新的构建任务。

jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_jenkins_02


进入这个页面

输入工程名称

选择构建一个maven项目(没有这个选项需要下载一个 maven插件)

选择确定

jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_java_03


3.配置这个项目

首页选择 配置

jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_git_04


4.重点来了 ! 精华就在这个配置

描述可以不填

看个人爱好

选择 Discard old builds 打钩

那两个选项根据自己服务器配置与需求填写

jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_spring boot_05


这里用的是gogs git仓库 需要装 gogs 这个插件 下面会用到 不要会没有这个模块

不需要勾选任何

jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_jenkins_06


下面这里需要填写你的 git仓库地址 这里仓库不能是私有 不要会一直爆红

Credentials可以选择账号密码  
也可以使用公钥秘钥 两者都可以

jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_java_07

接下来就是构建触发器 配置后根据条件自动部署项目

这里我们选的是 Build when a change is pushed to Gogs (这就是装gogs 插件的原因)

git钩子的配置 百度有很多 我用的是 git webhook

jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_jenkins_08


构建环境 这个就是实现需求的关键 (这里需要一个插件支持 pathignore )

Add timestamps to the Console Output 勾选这个控制台会有时间

Do not build if only specified paths have changed 勾选这个 来实现第一步
Invert ignore? 勾选这个
Ignored paths 填上你需要更新构建的路径 ** 表示这个路径下的所有

jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_java_09


然后就是构建了

jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_java_10

Root POM 选择父pom

Goals and options 填上你需要打包的一个命令

clean install -pl ZuulGateway -am -amd -Pdev -Dmaven.test.skip=true

这个命令意思是 只打包 ZuulGateway 并且打包它需要的相关依赖包 跳过test

Post Steps
默认构建后的选
Run only if build succeeds

jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_git_11

将构建后的项目推送到目标服务器

这里选的是 send build artifacts over SSH 这个是装插件(SSH )才有的

Source files 文件build 后路径
Remove prefix 移除前缀
Remote directory 推送的服务器路径
Exec command 执行的命令 以及shell 脚本启动服务

jenkins多模块一次打包选择其中一个模块部署 jenkins构建maven多模块项目_git_12

最后点击保存
这种做法不好就是 我们一个项目 有6个子工程 就需要分别建6个project工程
可以 实现 某一个更新了就只发布这个服务 具体的问题可以私信