Jenkins 个人搭建流程记录
目的
学习持续集成的概念与基本知识
配熟悉gitlab的基本操作
选择一个被测试的web应用系统
环境
-
windows安装jenkins(127.0.0.1:8091)
-
虚拟机安装gitlab服务器(192.168.211.5:8092)
-
配置的邮箱直接用qq邮箱
centos版本7.8
jenkins版本2.303.3
gitlab服务器版本13.1.2
jdk版本1.8
敏捷开发与持续集成简述
- 增量(举例:房地产商每次增加一栋楼)
- 迭代(举例:造火箭小火箭到大火箭)
每次迭代都是完整的软件开发周期
好处:
- 早期交付(降低成本,例如卖10栋楼,建完一栋先卖一栋)
- 降低风险(建完10栋楼卖不出去,建完1栋卖不出去然后改进或者停建)
持续集成:持续集成指的是,频繁地(一天多次)将代码集成到主干
持续集成的好处:
- 降低软件故障风险,不断的构建可以很早发现问题
- 对系统持续性的检查,减少问题
- 减少重复性的工作
- 持续部署,提供可部署单元包?
- 持续交付可供使用的版本
- 增强团队信心
安装gitlab服务器
我是在虚拟机上安装的,然后改一下网络配置让本地电脑也可以通过ip连接到虚拟机,参考这个即可:如何使用Xshell连接VMware上的Linux虚拟机〰
可能出现的问题,安装失败,大概率是内存不够的问题,我虚拟机内存开到了8g,2g根本不够,或者你要开启swap分区,可以查看:创建swap分区,解决阿里云CentOS 8.3内存不足问题〰
一直502可以参考:Linux—gitlab访问出现502问题〰和安装调试gitlab/gitlab-ce容器时遇到的502 Whoops, GitLab is taking too much time to respond〰
我不知道为什么出现了端口冲突,换了一个端口才好
记得更改防火墙设置之后要重启防火墙,更改了gitlab配置之后也要重新配置然后再重启
可能需要:
安装jenkins
可能的报错:
win10安装jenkins报错0x8007052e -Error logging on〰
邮件服务器
选择了qq
首先QQ邮箱要开启POP3/SMTP服务
怎么看成不成功?里面有测试,可以向邮箱发送邮件判断
最后:
在日常构建后,需要及时将构建结果发送给相应的人员。这时就可以使用jenkins自带的邮件配置系统。
整合gitlab和jenkins
https://www.bilibili.com/video/BV1pF411Y7tq?p=12&spm_id_from=pageDriver〰
我看的是这个视频,gitlab的简单使用
一般给服务器的都是公钥,如果我们要clone代码的时候,服务器就可以用我们给它的公钥来匹配我们本地的私钥,如果匹配就能下载
ssh-keygen -t rsa
,即生成公钥私钥的命令
步骤
我用的是自由风格的jenkins项目
1. 配置本地的公钥到gitlab
目的:让本地可以提交代码到远程gitlab上面
过程略
2. 配置jenkins的公钥并存放到gitlab所在的服务器
大致流程:在jenkins所在的服务器生成公钥和私钥,然后把公钥copy一份
然后打开gitlab,在设置里面有个ssh keys
(凭证管理),然后把公钥放到里面去,这样jenkins就可以直接从gitlab拉取项目
3. 设置jenkins的自动构建
我们在jenkins创建项目后,在源码管理那里点击git,然后输入对应的gitlab项目的url,并选择正确的ssh凭证
这时候点击build now
就会从远程拉取代码
4. 设置jenkins的编译打包
在项目的设置里,有一个构建,这里我们可以用mvn命令进行构建
5. 设置jenkins将本地打包好的jar包推送到远程服务器并运行
这里的远程服务器我用的是个人的阿里的云服务器
jenkins需要下载publish over ssh
插件
可以看看这个:jenkins配置publish over ssh遇到的问题〰
测试通过是下面这样
我按照上面的博客进行配置但是还是出现了很多问题,改来改去的,大概是配置那里错了,我的配置就不重复放上来了,
sh ~/run.sh / 8081
这条命令是我写在Exec command
那里的,
下面是抄的run.sh模板(有一说一,这个模板挺好用的,但是需要改,可能你nohup没有用就是模板的问题)
Project_name=$1
Port_no=$2
#echo $Project_name
#echo $Port_no
. /etc/profile
# 进入到项目
cd projects/$Project_name
# 找到原进程,kill
pid=$(ps -ef | grep java| grep $Project_name|awk -F '[ ]+' '{print $2}')
kill -9 $pid
#启动jar
nohup java -jar $Project_name-1.0-SNAPSHOT.jar --server.port=$Port_no -server -Xmx1000m -Xms1000m -Xmn700m -XX:+UseParallelGC &
echo "starting service..."
sleep 20
#根据重启后是否有当前应用判断启动是否成功
pid=$(ps -ef | grep java| grep $Project_name|awk -F '[ ]+' '{print $2}')
#echo $pid
if [ -z $pid ];then
echo "启动失败"
exit 1
else
echo $Project_name : $pid "SUCCESS"
fi
但是这里不太行的是,构建完成之后就…程序关闭了,在linux上面是有文件的(而且jenkins显示构建成功),如果单纯在linux中进行sh run.sh
是可以运行的,但是用jenkins的话nohup无效(我发现问题了,模板有个地方错了)
我命令执行的是两行
export BUILD_ID=dontKillMe
sh run.sh shendun 8081
网上最开始的解决方案就是加上export BUILD_ID=dontKillMe
但是我没有解决,改了run.sh
的模板才解决
集成邮件系统(踩坑大全)
使用qq邮箱
我根据网上的博客来写,但是很多不一样,也没管他
但是最后出现一个大问题,邮箱显示正常发送,但是实际上并没有接收到邮件(可以打开debug模式来进行调试查看错误信息+)
太多报错了,我是将新版的email插件卸载换成旧版的重新配置才好,但是中间其实发生了很多报错
最开始是2.85版本的
Email Extension Plugin
,最开始的报错AuthenticationFailedException
,有人说是版本的问题,有bug,回退2.84(相同的配置不同版本报错都不同),又报错,搜出来的和jenkins没关系,那我回退到2.10,太低了报错都很奇怪,现在是2.40的版本
MessagingException message: Can't send command to SMTP host
这里可以开启Use SMTP Authentication
这个选项来开启,注意密码不是邮箱密码,是stmp的授权码,我之前的邮箱授权码是mfywusvkaxvmbagi1
,看看太长和太短都不对
结果
前提,环境都配置好了,且可以正常运行
在IDEA中集成maven和git,推送到你部署的gitlab服务器上
查看gitlab上面的项目,正常
打开jenkins进行拉取和自动部署
构建完成
网站正常
查看邮件