Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

Build and deploy the Jenkins environment to realize automatic code release

2025-01-16 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Servers >

Share

Shulou(Shulou.com)06/02 Report--

一、jenkins代码自动部署

1.配置免密钥通信

实现自动化部署首先要解决的是免密码传输,配置jenkins至测试服务器之间免密钥ssh登录

测试免密钥ssh登录

在测试服务器上编写一个测试脚本,检测是否可以执行成功,正式环境可以写一个自动化部署的脚本

2.jenkins新建部署代码项目

在构建这里选择执行shell命令

点击立即构建

控制台输出日志:成功

这样就实现了使用jenkins代码的自动化部署

实际情况中我们通常使用版本控制系统管理代码,svn 或者 git

二、gitlab利用webhook实现push代码后jenkins自动构建

jenkins服务器:192.168.239.134

gitlab服务器: 192.168.239.136

PS:如果gitlab与jenkins在同一台服务器,需要更改其中一个的端口,默认都是8080

之前部署了gitlab的代码托管平台和jenkins代码发布平台,通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里

通过脚本构建代码发布。这种方式每次在发版的时候,需要人工去执行jenkins上的构建动作,有时显得过于繁琐

于是就想到了Gitlab的Webhook功能,通过Webhook的相关设置,可以实现代码Push后

自动去触发jenkins上的构建动作,这样就不需要人工干预去执行发版操作了

提前将jenkins本机的key添加到gitlab账户上

jenkins安装gitlab hook plugin插件

在auto_deploy项目工程里设置代码的git下载路径并关联构建的分支

查看jenkins生成回调地址,在任务构建触发器下获取回调URL

下面的URL那一行只有gitlab hook plugina插件下载成功后才能显示

设置代码发布的推送脚本

注意:这里使用192.168.239.136的test用户是与jenkins服务器已经配置了ssh免密钥登录

#!/bin/bashSOURCE_DIR=/root/.jenkins/workspace/${JOB_NAME}/DEST_DIR=/var/www/html/REMOTE_IP=192.168.239.136/usr/bin/rsync -e "ssh -p 22" -avpgolr --delete-before --exclude=.git $SOURCE_DIR test@$REMOTE_IP:$DEST_DIR

通过上面的git将代码下载到jenkins本机jobs里对应任务的workspace下,jenkins部署路径是/root/.jenkins/workspace/,脚本中${JOB_NAME}是jenkins的内置变量

也可以指定下载目录,加--exclude忽略哪些文件不需要进行rsync传输

#!/bin/bash

SOURCE_DIR=/data/git_tmpdata

再通过rsync将下载的代码分发到远程目标机器上

在192.168.239.136上创建/var/www/html/目录并授权test用户

mkdir /var/www/html/ -p && chmod -R test.test /var/www/html/

在gitlab上添加webhooks(注意这里是管理员用户才能添加)

Add Webhook添加完成后,在下方点击 test进行测试

如果返回Hook successfully executed.表示配置成功。

这样,下次push代码后,就会自动触发jenkins上相关的构建工程进行自动发布了!无需人工干预

在gitlab上push一个文件hello.py,然后测试下是否自动发布了

在jenkins上查看输出信息

在目标机器192.168.239.136的/var/www/html/目录下发现hello.py文件已经发布过来了

三、用jenkins 自动部署发布

#注意:jenkins路径会有差异,不用在意这个,同一个版本部署2次,发现了2个不同的目录结构,很诧异。

jenkins build玩war包的存放目录:/data/jenkins/workspace/simple/target

自动发布的脚本存放路径:/data/jenkins/jobs/simple

脚本的内容:

脚本使用的是scp命令,当然也可以使用wget等。

12345678910111213141516171819202122232425262728[root@localhost simple]# cat deploy_prod.sh #!/bin/bashback_time=`date +"%Y-%m-%d-%H-%M-%S"`#备份的时间all_ip=192.168.121.135for_ip=`awk 'BEGIN{iplist="'$all_ip'";split(iplist,ip,",");for (s in ip) {print ip[s]}}'` #awk数组转换for dest_ip in ${for_ip[*]};do echo $dest_ipdonesrc=/data/jenkins/workspace/simple/target#下面就是重启scp的过程war_name="SimpleWeb-1.0.1-SNAPSHOT"function stop_tomcat () { Tomcat_id=`ssh $dest_ip lsof -i:8080 | awk 'NR==2''{print $2}'`if [ ! Tomcat_id ];then echo "tomcat id 不存在"else ssh $dest_ip "/bin/kill -9 $Tomcat_id"fi}function start_tomcat () { ssh $dest_ip "cd /data/tomcat/bin && /bin/sh startup.sh"}if [ -f $src/${war_name}.war ];then stop_tomcat ssh $dest_ip "cd /data/tomcat/webapps && cp ${war_name}.war{,-${back_time}};cd /data/tomcat/webapps && /bin/rm -rf ${war_name}.war" ssh $dest_ip "cd /data/tomcat/webapps && /bin/rm -rf ${war_name}" scp $src/${war_name}.war $dest_ip:/data/tomcat/webapps start_tomcat fi

数组转换防止出现多ip发布:

1234[root@localhost simple]# all_ip=192.168.121.131,192.168.121.135[root@localhost simple]# awk 'BEGIN{iplist="'$all_ip'";split(iplist,ip,",");for (s in ip) {print ip[s]}}'192.168.121.131192.168.121.135

效果如下图:

添加构建的执行脚本(注意不是在构建完执行的那块加):

运行job,build完后会执行deploy脚本:

查看远程的tomcat是否发布完成:

当然一般也不会直接在一个工程下面直接加发布脚本,工程要是build不成功呢,或是这次build有问题

有人一直build的呢,会不会一直执行这个发布,同城都是再建一个视图,这个权限只有某些人有

build完后再执行这个deploy job 做发布,加一个视图,再加一个自由构建风格的job

(pool很多的话可以加多个)做脚本运行发布的job。

首先copy一个视图:

配置脚本路径,只做脚本发布:

再次运行发布,会直接发布现在jenkins target目录下现存的war包,发布完的效果:

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Servers

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report