专题篇四:Linux企业级CICD持续集成交付发布(终极实战部署:gitlab++jenkins+web(tomcat)+webbook自动发布)
专题篇四:Linux企业级CICD持续集成交付发布(终极实战部署:gitlab++jenkins+web(tomcat)+webbook自动发布)
4,企业级CI/CD 持续集成/交付/发布
实验一:github+jenkins+web(tomcat)
构建的时候 网络连接超时(正常现象) githud仓库地址
1.安装对应的插件(jenkins)
Deploy to container
Git (插件比较多)
Maven Integration
Publish Over SSH
2.配置ssh
添加jenkins的私钥到key的位置
配置web-server的相关信息(name,ip地址,用户,目录)
jenkins---> web-server 免密
3.全局配置 git maven jdk 相关配置
4.创建任务
实验二:gitlab+jenkins+web(tomcat)
更换了存放项目的仓库 gitlab 私有仓库(本地) 源码的下载速度也会提升
gitlab正常使用,gitlab仓库, cloud 项目上传到仓库
注意:在提交代码
有git命令,安装git,添加全局配置(username email)
git config --global user.email "xingdianvip@gmail.com"
git config --global user.name "xingdian"
取消gitlab中cloud的仓库main分支的保护(能够向main这个分支提交代码)
如果使用域名做本地解析,在gitlab添加提交服务器的公钥
git clone git@gitlab.example.com:xingdian/cloud.git
将项目压缩包上传到服务器 .zip 解压 并把解压后的内容拷贝到仓库目录下
git提交代码到cloud仓库 main分支
项目上传到仓库(操作)
更换成gitlab仓库地址
去掉gitlab的认证
实验三:gitlab++jenkins+web(tomcat)+webbook自动发布
当我们修改仓库代码,提交的时候,提交完成他会自动触发jenkins,实验项目的自动发布
如果开发人员修改了代码;(钩子)利用webhook自动去代码仓库(gitlab)获取新的代码,在jenkins上利用
maven进行构建;
构建完成后发布到web-server(新版本的上线【新版本自动化上线】)
1.jenkins
安装插件(Generic Webhook Trigger)
配置项目(上午cloud项目,在这个基础上做的修改)
在构建触发器:
在将更改推送到 GitLab 时进行构建。GitLab webhook URL:
http://192.168.222.129:8080/jenkins/project/cloud
保证(gitlab的)webhook能够连接jenkins
配置 ---> gitlab /project 对勾去掉
全局安全配置 ----> 保证登录用户可以做任何事情(匿名用户具有可读权限)
2.gitlab
开启本地网络访问权限(目录:webhook能够连接jenkins)
menu ---> admin --->设置 --->网络 ----> 出站请求 允许即可
配置项目的webhook
项目cloud--->设置--->webhook (添加) 网址:http://192.168.222.129:8080/jenkins/project/cloud
---> 测试 200 ok
一,jenkins部署(github+jenkins+web(tomcat))
1,安装插件
1,Maven插件:Maven Integration plugin
2,发布插件:Deploy to container (支持自动化代码部署到tomcat容器)
3,插件:含Git的所有插件
4,jenkins利用Maven编译,打包所需插件:Maven Integration
5,通过ssh连接:Publish Over SSH
2,安装过程
例如:系统管理—>插件管理---->可选插件—>过滤Git---->勾选—>直接安装
其他的插件安装同上!!!
3,系统配置
ssh配置(jenkins的私钥,免密操作ssh-copy-id 192.168.222.132)
4,配置jdk和maven命令,全局配置
4,创建发布任务
构建触发器
调用maven命令
其他不做修改,最后保存
5,jenkins服务器上要下载git(yum -y install git)
6,部署jdk+tomcat
[root@java-server ~]# mkdir -p /data/application
上传jdk
[root@java-server ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/
[root@java-server ~]# cd /usr/local/
[root@java-server local]# mv jdk1.8.0_191/ java
下载tomcat
[root@java-server ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz
[root@java-server ~]# tar xzf apache-tomcat-8.5.42.tar.gz -C /data/application/
[root@java-server ~]# cd /data/application/
[root@java-server application]# mv apache-tomcat-8.5.42/ tomcat
设置环境变量
[root@192 ~]# vim /etc/profile
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME $PATH
[root@java-server ~]# source /etc/profile
测试:
[root@java-server ~]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
删除tomcat默认发布目录下面的内容:
[root@java-server ~]# rm -rf /data/application/tomcat/webapps/*
创建目录和脚本:
[root@java-server ~]# mkdir /opt/script #创建脚本目录
[root@java-server ~]# vim app-jenkins.sh #创建脚本
#!/usr/bin/bash
#本脚本适用于jenkins持续集成,实现备份war包到代码更新上线!使用时请注意全局变量。
#================
#Defining variables
export JAVA_HOME=/usr/local/java
webapp_path="/data/application/tomcat/webapps"
tomcat_run="/data/application/tomcat/bin"
updata_path="/data/update/`date +%F-%T`"
backup_path="/data/backup/`date +%F-%T`"
tomcat_pid=`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`
files_dir="easy-springmvc-maven"
files="easy-springmvc-maven.war"
job_path="/root/upload"
#Preparation environment
echo "Creating related directory"
mkdir -p $updata_path
mkdir -p $backup_path
echo "Move the uploaded war package to the update 2directory"
mv $job_path/$files $updata_pat
echo "========================================================="
cd /opt
echo "Backing up java project"
if [ -f $webapp_path/$files ];then
tar czf $backup_path/`date +%F-%H`.tar.gz $webapp_path
if [ $? -ne 0 ];then
echo "打包失败,自动退出"
exit 1
else
echo "Checking if tomcat is started"
if [ -n "$tomcat_pid" ];then
kill -9 $tomcat_pid
if [ $? -ne 0 ];then
echo "tomcat关闭失败,将会自动退出"
exit 2
fi
fi
cd $webapp_path
rm -rf $files && rm -rf $files_dir
cp $updata_path/$files $webapp_path
cd /opt
$tomcat_run/startup.sh
sleep 5
echo "显示tomcat的pid"
echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`"
echo "tomcat startup"
echo "请手动查看tomcat日志。脚本将会自动退出"
fi
else
echo "Checking if tomcat is started"
if [ -n "$tomcat_pid" ];then
kill -9 $tomcat_pid
if [ $? -ne 0 ];then
echo "tomcat关闭失败,将会自动退出"
exit 2
fi
fi
cp $updata_path/$files $webapp_path
$tomcat_run/startup.sh
sleep 5
echo "显示tomcat的pid"
echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`"
echo "tomcat startup"
echo "请手动查看tomcat日志。脚本将会自动退出"
fi
[root@java-server ~]# chmod +x app-jenkins.sh #添加执行权限
7,回到jenkins页面上开始构建任务
8,打开web服务器页面访问http://192.168.222.132:8080/easy-springmvc-maven/
界面访问成功
9,补充注意:github远程仓库代码包(生产环境提前有远程仓库和代码库)
至此,实验一的部署过程就完毕了:github+jenkins+web(tomcat)
二,jenkins部署(gitlab+jenkins+web(tomcat))
gitlab访问网址:(https://www.haha.com/)
1,在gitlab上创建一个公开的空白项目(自定义项目名称为cloud)
2,在gitlab服务器上上传java代码包(下载安装git:yum -y install git)
3,添加git全局配置
[root@gitlab ~]#git config --global user.email "chen13665026727@163.com"
[root@gitlab ~]#git config --global user.name "chenshuai"
[root@gitlab ~]#git config --global http.sslVerify false
[root@gitlab ~]# cat .gitconfig
[user]
name = chenshuai
email = chen13665026727@163.com
4,取消gitlab中cloud的仓库main分支的保护(能够向main这个分支提交代码)
在cloud仓库下–>设置–>仓库–>受保护的分支(取消)
[root@gitlab ~]#ssh-keygen
[root@gitlab ~]#cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCraymQIsIhoAdCqunTkyOKTEgLu4pVHE6bEWQX5iboWyJdWB27TMMb
F3Ujd9JTcMS7eDg68LDL08wx9ruqzUoyTCifJTjzLscaKU8vVLspuwE+Eu/ezUqKeGC+D/JvHShouyFjf/ZGonjy49vs
xrz61Pnw6dOro1CPyMeRaKnLHnhXzxaUTtc/nTen9ui2bICQyjTNs+G3N29+P+GDVJ/1+zx/VSopBd93/o6pC+wtfh8z
NAjaPCbS8EV9Qdu3fmQARFdx7rj1wXV9AYc8B0FS5RBrvu7nzamIA69KgmpTH3wO+mTFuGIq/w7fy8ZU8J5AJV/34eBG
/pqI0t8iYVVJ root@192.168.222.128
5,将创建的空白远程项目cloud下载克隆到本地
[root@gitlab ~]#git clone git@www.haha.com:plat-sp/cloud.git
[root@gitlab ~]# ls
anaconda-ks.cfg easy-springmvc-maven-master cloud
[root@gitlab ~]#cp -r easy-springmvc-maven-master/* cloud/
...y允许覆盖...
[root@gitlab ~]#git add .
[root@gitlab ~]#git commit -m "xingdian"
[root@gitlab ~]#git push -u origin main
返回到远程仓库可以看到更新的代码文件如下
5,如果使用自建的私有的ssl证书,需要在jenkins上做一下操作
[root@jenkins ~]#git config --global user.email "chen13665026727@163.com"
[root@jenkins ~]#git config --global user.name "chenshuai"
[root@jenkins ~]#git config --global http.sslVerify false
6,清理web服务器实验一留下的环境,为实验二环境做准备
web服务器IP:192.168.222.132
[root@web ~]#rm -rf /data/application/tomcat/webapps/*
[root@web ~]#rm -rf /data/backup 删除备份的目录
[root@web ~]#rm -rf /data/update 删除更新的目录
[root@web ~]#/data/application/tomcat/bin/shutdown.sh 关闭tomcat
7,来到jenkins网页中(http://192.168.222.129:8080/jenkins)
新建tem–输入项目名称:cloud–构建一个maven项目
常规–丢弃旧版本–保持构建的天数1–保持构建的最大个数5
源码管理–git–仓库地址(https://www.haha.com/plat-sp/cloud.git)–指定分支(*/main)
构建触发器
构建环境
构建Build(注意pom.xml和clean package)
配置到此就完毕了!!!
8,需要给jenkins服务器同步做gitlab的域名解析
[root@jenkins ~]# vim /etc/hosts 在行尾添加域名解析
192.168.222.128 www.haha.com
9,在jenkins(http://192.168.222.129:8080/jenkins/)上进行项目构建
10,浏览器查看web服务器http://192.168.222.132:8080/easy-springmvc-maven/
这个显示表示项目可以访问成功,实验二到此结束!!!
三,gitlab++jenkins+web(tomcat)+webbook自动发布(实验二的升级)
1,jenkins安装Generic Webhook Trigger插件
2,找到cloud项目配置–构建触发器(webhook URL: http://192.168.222.129:8080/jenkins/project/cloud )
3,实验三是基于实验二的(新增加的是一个插件webhook和修改构建触发器)
4,进入gitlab(https://www.haha.com/plat-sp/cloud)
cloud–设置–webhook–填写网址( http://192.168.222.129:8080/jenkins/project/cloud)–勾选推送事件–勾选发布时间–保存修改
4,回到jenkins(http://192.168.222.129:8080/jenkins)
5,常见错误解决方案
问题一:jenkins配置gitlab的webhook,完成配置,测试结果显示 Hook executed successfully but returned HTTP 403
解决:设置匿名用户拥有可读权限Manage jenkins->Security->Configure Global Security
去掉Gitlab enable authentication 对勾
系统管理 -> 系统设置 -> 去掉对勾Enable authentication for ‘/project’ end-point
6,自动化更新构建演示
1,gitlab更新代码
注意:看到上图结果说明自动化成功。
架构图总结
更多推荐
所有评论(0)