一、需求
在公司内部服务器配置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,出现想要的界面即表示成功。