首页 > 技术文章 > 第四章 Jenkins实现jar包自动化部署

jhno1 2021-07-09 17:29 原文

一、需求

在公司内部服务器配置CI/CD,实现后端本地打包,推送到远程服务器发布运行。

二、安装远程发布插件

#1.打开浏览器,登录jenkins

#2.点击系统管理,选择插件管理

#3.选择可选插件,点击搜索框输入Publish Over SSH,勾选上,然后点击直接安装

三、配置远程服务器连接信息

#1.点击系统管理,选择系统配置

#2.补充本地服务器密钥信息

#3.点击新增,添加远程服务器信息,点击高级,勾选使用密码,填入远程服务器用户的私钥,点击Test Configuration出现Success表示配置正确。

四、Jenkins添加全局凭证

1.凭证简介

有许多第三方网站和应用程序可以与Jenkins进行交互,例如代码仓库GitHub等。

此类应用程序的系统管理员可以在应用程序中配置凭证以专供Jenkins使用。通常通过将访问控制应用于这些凭证来完成这项工作,以“锁定Jenkins可用的应用程序功能区域”。一旦Jenkins管理员在Jenkins中添加/配置这些凭证,Jenkins项目就可以使用凭证与这些第三方应用程序进行交互。

Jenkins中保存的凭证可以用于:
	1)适用于Jenkins的任何地方(即全局证书)。
	2)特定的Jenkins项目。
	3)特定的Jenkins用户。

2.凭证分类

Jenkins可以保存下面几种凭证:
	1)Secret text:例如 API Token(例如GitHub的个人access token)。
	2)Username with password:指的是登录GitHub的用户名和密码,可以作为单独的组件处理,也可以作为username:password格式的冒号分割字符串来处理。
	3)Secret file:实际上是文件中的秘密内容。
	4)SSH Username with private key:即使用私钥的SSH 用户名。这是一个SSH 秘钥对。公钥配置在GitHub上面,这里添加私钥。
	5)Certificate:即证书。一个PKCS#12证书文件和可选的密码。
	6)Docker Host Certificate Authentication:即Docker主机证书身份验证凭证。

3.凭证安全

为了确保安全,Jenkins中配置的凭据在Jenkins主实例中加密存储(通过Jenkins实例的ID来加密),并且只能通过它们的凭据ID在Pipeline项目中处理。

这样就最大限度地减少了向Jenkins用户暴露实际证书本身的可能性,并且限制了将功能证书从一个Jenkins实例复制到另一个Jenkins实例的能力。

4.添加凭证

#1.Jenkins服务器生成SSH-Key
[root@staging ~]# ssh-keygen -t rsa -C "hui.jin@dataxgroup.com"
所有选项都是默认,一直回车即可生成。

#2.查看密钥
[root@staging ~]# ll .ssh/
total 12
-rw------- 1 root root 3243 Jan 19 07:57 id_rsa			#私钥
-rw-r--r-- 1 root root  748 Jan 19 07:57 id_rsa.pub		#公钥

#3.打开浏览器,登录gitlab

#4.点击右上角设置

#5.点击SSH密钥,填入jenkins用户公钥,写入自定义标题,点击添加密钥

#6.回到jenkins界面,点击系统管理 --> Manage Credentials --> 全局

#7.点击添加凭据,选择SSH Username with private key,添加自定义描述,选择jenkins登录用户,添加私钥,私钥为上面服务器生成的密钥信息,命令:cat ~/.ssh/id_rsa,最后点击确定

#8.发现全局凭证下多了一个凭证,至此添加全局凭证结束

五、编写执行脚本

#1.登录远程服务器,新建后端项目存放目录
[appdeployment@mjndev ~]$ mkdir /data/backproject/demo01/

#2.编写执行脚本
[appdeployment@mjndev ~]$ cd /data/backproject/demo01/
[appdeployment@mjndev demo01]$ vim run.sh 
#!/bin/bash
BUILD_ID=DONTKILLME
pid=$(ps -ef|grep demo-0.0.1.jar|grep -v grep | awk '{print $2}')

function stop(){
if [ -n "$pid" ]
then
echo "pid进程 :$pid"
kill -9 $pid
else
echo "进程没有启动"
fi
}

stop
sleep 5s

function start(){
cd /data/backproject/demo01/ && nohup /opt/jdk1.8.0_20/bin/java -jar -Duser.timezone=GMT+08 demo-0.0.1.jar --server.port=8888 &
exit
}

start

#3.添加执行权限
[appdeployment@mjndev demo01]$ chmod +x run.sh

六、构建maven项目

#1.新建视图略,点击新建任务

#2.输入项目名称,选择构建一个maven项目,点击确定按钮。

#3.选择源码管理,从gitlab拉取代码

#4.选择pre steps --> Add post build steps --> 执行shell  写入脚本执行打包操作

#5.选择post steps --> Add post build steps --> Send files or execute commands over SSH,填写下图中定义内容,最后保存退出。

七、测试结果

#1.点击立即构建,点击左下角正在构建的任务

#2.选择控制台输出,查看最后状态为Success

#3.进入远程服务器,查看是否有jar包进程
[appdeployment@mjndev ~]$ ps -ef |grep 8888
appdepl+  1023 24185  0 16:14 pts/6    00:00:00 grep --color=auto 8888
appdepl+ 32216 32215  1 16:03 ?        00:00:08 /opt/jdk1.8.0_20/bin/java -jar -Duser.timezone=GMT+08 demo-0.0.1.jar --server.port=8888

#4.打开浏览器,输入远程服务器ip:port/test/hz,出现想要的界面即表示成功。

推荐阅读