Jenkins 个人搭建流程记录 集成邮件系统(qq邮箱),gitlab服务器,freestyle风格
2021-11-18
·
hexer

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服务器

Centos7安装Gitlab13.1.2

我是在虚拟机上安装的,然后改一下网络配置让本地电脑也可以通过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

Windows环境下安装Jenkins

可能的报错:

win10安装jenkins报错0x8007052e -Error logging on

邮件服务器

选择了qq

首先QQ邮箱要开启POP3/SMTP服务

jenkins配置qq邮箱

image-20211115152928401

怎么看成不成功?里面有测试,可以向邮箱发送邮件判断

image-20211115161107217

最后:

smtp协议与pop3协议

在日常构建后,需要及时将构建结果发送给相应的人员。这时就可以使用jenkins自带的邮件配置系统。

整合gitlab和jenkins

https://www.bilibili.com/video/BV1pF411Y7tq?p=12&spm_id_from=pageDriver

我看的是这个视频,gitlab的简单使用

一般给服务器的都是公钥,如果我们要clone代码的时候,服务器就可以用我们给它的公钥来匹配我们本地的私钥,如果匹配就能下载

SSH,公钥,私钥的理解

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命令进行构建

image-20211117164154754

5. 设置jenkins将本地打包好的jar包推送到远程服务器并运行

这里的远程服务器我用的是个人的阿里的云服务器

jenkins需要下载publish over ssh插件

可以看看这个:jenkins配置publish over ssh遇到的问题

和这个Jenkins部署war包和部署jar包的详细步骤

测试通过是下面这样

image-20211117164333371

手把手教你搭建Jenkins实现自动化部署Jar

我按照上面的博客进行配置但是还是出现了很多问题,改来改去的,大概是配置那里错了,我的配置就不重复放上来了,

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

image-20211117193434962

但是这里不太行的是,构建完成之后就…程序关闭了,在linux上面是有文件的(而且jenkins显示构建成功),如果单纯在linux中进行sh run.sh是可以运行的,但是用jenkins的话nohup无效(我发现问题了,模板有个地方错了)

我命令执行的是两行

export BUILD_ID=dontKillMe
sh run.sh shendun 8081

网上最开始的解决方案就是加上export BUILD_ID=dontKillMe但是我没有解决,改了run.sh的模板才解决

集成邮件系统(踩坑大全)

使用qq邮箱

我根据网上的博客来写,但是很多不一样,也没管他

Jenkins的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服务器上

image-20211118145109691

查看gitlab上面的项目,正常

image-20211118145154227

打开jenkins进行拉取和自动部署

image-20211118145347819

构建完成

image-20211118145603365

网站正常

image-20211118145626941

查看邮件

image-20211118145707173