GitLab + Jenkins实现一键分布式项目自动化部署

分布式项目的打包部署增加了运维人员的工作量,而且工作是机械重复,极无技术含量的,说白就是打更。我们要把复杂的事情简单化,简单的事情标准化,标准的事情流程化,所以打包部署成了我们流程化里头的流水线。

该项目是一个有5台+以上的服务器分流部署的分布式项目,针对该项目的自动化部署所作的持续集成拓扑图如下所示(截图有限,只画了3台,意思到位即可,IP为虚拟IP):

GitLab + Jenkins实现一键分布式项目自动化部署_第1张图片

一. jenkins需要装的插件

Git,Pipeline,Publish Over SSH等

GitLab + Jenkins实现一键分布式项目自动化部署_第2张图片

搜索安装即可

二.配置安装jenkins的服务器与应用服务器之间的SSH连接

2.1 检查各应用服务器是否开启22端口和SSH服务

ssh localhost
netstat -ntlp          #查看ssh服务的网络连接情况

systemctl status sshd  #ssh服务启动状态

 如果没有开启,需要配置开启

打开sshd配置文件sshd_config ,执行命令:vi /etc/ssh/sshd_config

vi /etc/ssh/sshd_config

去掉监听端口、地址前的注释:

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 22
#AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::

开启远程登录:

# Authentication:

#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

开启用户密码作为连接验证,保存退出

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes

开启  sshd  服务

systemctl start sshd 或 service sshd restart 

查看22端口是否被监听,执行命令

netstat -nltp | grep 22

netstat -antp | grep sshd

GitLab + Jenkins实现一键分布式项目自动化部署_第3张图片

ssh 连接测试

ssh [email protected]

2.2 配置ssh以及jenkins的ssh配置

在jenkins所在服务器,生成公钥和私钥

ssh-keygen -t rsa

GitLab + Jenkins实现一键分布式项目自动化部署_第4张图片

把生成的公钥(/root/.ssh/id_rsa.pub)放在需要部署jar的服务器的/root/.ssh/authorized_keys文件中。然后进入jenkins系统配置 

Jenkins 系统全局配置-Publish over SSH设置: 把生成的私钥放在key那里,path to key写上私钥的路径

密钥格式

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA6Ybe0cXysqPS0R92fFW6ihbnQzrCYBBfQ1pB5xyPI63WTIj7
USniU4OLiBp5sGGoRh9pKHhkqTMBKspnn3yWW/kBJGp3bSKiZ8wj3wrGjn9hQN+q
mrG0gdYaxx2rZVD0Bf54eY2Gt2dz8I974OKibfNz09ADrwSFz4sD03wRzcK3Nife
WgzEzBy/JwyXPih66rO/qe+qQMw7uKpWiq+L6Pq5gld/yl6TobvX+0CtazpltDRq
FMm5UYe63TaB4p2xbbgK0Suked+ltWSM6rETO+BTE6xzgbEBCeTq00D9+q9nPg6P
oWO63OqKNuJdmDnNaBJ2StF+IEMBwE/956O5AwIDAQABAoIBAEPoto8mEyejwECT
9668d1yEwIeqZK/u0uURMCz2/yEPAkyLYRn/JhPHIyJXIKAMJhUOOVRNfmg9rs80
wOF+J3Nje9ONKmGQOs4YbS4FQixaGnv1DvWhS66eBnd0x0zVN8EuePZQE6bt7Kc9
8nY5MabrrvkfepLAq/Doqhor8Dl3Id6MENO1H+UsO9IgaX6WxvJFbfm6c5a3jkLf
5n36FEgJjY+cirwFL4WZOpZ4hmnzZsYbYOOcQGeU0Hv2AUvlZC4qV7FKq7u/T/P9
19AL3l8MI5ig0QJv1xIsynmB4nBIzGYrsOpYaGP/b/jRkqaJavWkWe7zq72lspt4
KqEKPfECgYEA/yQcJZscDSlXzfxyvBg2wdp24cxkDTyZIcJeJd2pNIdtMUm8IzIc
Fai2oDGP+ATmrYlsEm9IRZEDiC7k0WBiNbxS5jiUc1FijE/fd9QfSGBBvH+eQFTu
74ptEG/MoR12FaDrVdp4kyQEBGVPmZurquHc2US/eJBHjXU9GPoQ9VUCgYEA6lAh
671GehVSS1JbzVpT+ct7+FbPUr6u/cZJfDkQ8x40IS1EsHzbrzu3jDPthRbjfjmj
F/Za5nFGKjwbnpdCObDS6q3j0zszJJT3gStClnVIUJxTD4jXU1Fee8PDFDfMGhjT
El10Sv20eRS+KQaTOBwZu5sZDRgJNLbSA1mq9PcCgYBkGFeOjVao9zJCVqrwjhNV
ZA7FsPkDlGWDMAzdkCOkvwigkIvlxu/rs1/KYwdXRxz0sfgbF1tkJ2saT0NnvQdq
i3J+bW4X+7LM1z0Vdru7GkBP4kVEec2vXkBBdYrzHmrIO3R4Hxi0qSmGS/S5j6/+
f1O0TVtMwlW/8mHA3cIvbQKBgQCD2V+dFb7ox8KtG8UIwwFqGLTDw6WaPC6gIsoL
GtmM1LwkxyJV5YyBCKt6O2Y2c/DDgI9j1n7EGY2QCo7IKPldGUE2SW9f13op5aF4
j+1CWPC+W5jprujru2fdYQUPBW7WaI2tUeU0pZq+X4u57jc9ZaKdTONF2PalMRLw
S67FdQKBgGMCeJxSHNJ8FpzypgPLAuQIVLR4WghZa7RE5dKmleeMoSdzQ7jNfpSt
xGdzG0Rup0m469xb53S1a3otu65PHy2TugwQ24Zrms02NdpmZxEnLKOA7/MIYBYs
uz+GDmRQUz+SDMIGrGTOjt9jTNLgW8Wezbpv/EtOBuYmB1uTw4re
-----END RSA PRIVATE KEY-----

jenkins jar文件传输送设置

GitLab + Jenkins实现一键分布式项目自动化部署_第5张图片

echo "重启服务"
pid=$( ps -ef |grep admin.jar |grep 'java -jar'|grep -v grep|awk '{print $2}')
kill -9 $pid
sleep 5 #睡眠五秒
nohup java -jar admin.jar > logs/catalina.out &

保存配置

三.进入Jenkins工程面板,点击Build Now进行部署测试

文件成功传输到应用服务器,并成功重启服务。这里有个小插曲,jenkins的编译部署进度条不太友好,日志输出也比较少,有时候编译部署几分钟就完成了,但是进度条30分钟还没结束,这里主要看工程部署后的效果即可,将jenkins的部署超时时间设置的大一点。

你可能感兴趣的:(项目运维,jenkins,运维)