gitlab+jenkins自动构建jar包并发布
一、背景介绍:
公司软件都是java开发的,一般都会将java代码打包成jar包发布;为了减轻运维部署的工作量,合理偷懒,就需要自动化流程一条龙服务:
开发将代码提交到gitlab--->jenkins自动触发构建--->jenkins将构建好的jar包提交到远程主机--->jenkins重启java服务--->jenkins验证服务是否起来并反馈(此过程需要运维写验证脚本让jenkins执行)
二、jenkins配置
1、安装Gitlab Hook和GitLab插件,安装完成后在构建触发器这会多出一项;记住这个生成的URL会在gitlab中用到;
1.1、点击Advanced(高级)按钮生成跟giblab交互的token;记住这个token,gitlab上要用到;
这地方注意:
Allow all branches to trigger this job 允许所有分支触发此作业(默认选项)
Filter branches by name 按分支名称过滤触发作业
Filter branches by regex 按正则表达式过滤分支触发
这地方根据自己的需求去选择,比如只允许某个分支改变则触发作业;
2、Source Code Management(源码管理)
3、Build(构建)
4、安装Publish Over SSH插件,或者在插件管理中直接搜索(Send build artifacts over SSH)也可以
这地方要讲一下,这地方我开了两个Transfers;这个Transfers的作用是在jar包构建完成之后要先做一个动作,将原来的jar包做一个备份,方便出了问题回退;
Exec command:#脚本很简单就是一个简单的备份
#!/bin/bash
. /etc/profile &> /dev/null; . ~/.bash_profile &> /dev/null;
if [ -f "/data/web/admin-api/admin.jar" ]
then
time=`date +%Y-%m-%d-%H:%M`
cp /data/web/admin-api/admin.jar /data/web/admin-api/srms-admin.jar.$time
else
echo "no file"
fi
配置第二个Transfers
这地方要注意Source files是两个**号,这是个坑,详情可以点右边的问号有详细解释,这里的两个**表示匹配目录;
这地方的Exec command就不展示了,需要事先写好放到远端主机主机上;这地方执行必须是绝对路径;
Remove predix这个地方我之前填的*/target但是我构建的时候控制台提示找不到“eladmin-system/target”然后我就果断把提示中的写到了这个地方;
Remote directory 这地方要是不写,就要在System configation SSH配置项中定义,两者二选一;我是定义在了Publish over SSH那,所以在上图中没有写,如果两个地方都写了,会目录套目录,最终使jenkins不知道该将文件copy到哪;配置路径(jenkins--->Manage Jenkins--->Configure System--->Publish over SSH),配置完ssh要点一下Test Configuration测试下是否能脸上远端主机;
注意:Manage jenkins--->Configure System--->Gitlab 下图中的配置项需要取消勾选;
三、gitlab配置
1、打开gitlab网络限制,允许web hook请求过来;
2、gitlab中具体的项目上配置钩子
注意是在具体的项目中设置;
四、通过IDEA提交修改后的代码查看jenkins具体项目的控制台
代码中随便改点不影响运行的东西,提交测试;
查看gitlab修改后的是否上传:
查看jenkins是否开始构建:
查看jenkins控制台:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!