基于已安装的jenkins+web服务器+gitlab仓库进行本次实验:
jenkins—10.0.0.11
web—10.0.0.12
gitlab仓库地址:https://www.zhengshuo.com/test/cloud.git —-> 10.0.0.13
jenkins部署:
安装插件并启动:
1、Deploy to container
2、Git(以git开头的都可以下载,方便后续使用)
3、Maven Integration
4、Publish Over SSH
5、Generic Webhook Trigger
配置ssh,在管理jenkins—->cnfigure system内找到publish over SSH
在key内添加jenkins服务器你指定用户的私钥(key:指的是jenkins服务器用哪个用户去远程连接程序服务器就是那个用户的私钥)
配置完ssh后在下方找到ssh-server添加一个远程ssh-server:
name:app-1(后端标识)
hostname:10.0.0.12
username:root(远程服务器的用户,与后端服务器做免密登陆的用户)
下面一栏为指定用户的家目录:/root
点击test configuration测试是否可以连接到后端(如果多台可以继续新增)
接着配置jdk、maven命令、全局配置
找到jdk安装取消自动安装
别名:解压后jdk包的名称,如果修改填写修改后的内容
JAVA_HOME:目录所在路径
找到maven安装,取消自动安装:
name:maven解压后的目录名称
MAVEN_NAME:maven解压后的绝对路径
保存并应用
构建发布任务:
点击新建任务
选择构建一个maven项目
在策略栏选择 丢弃旧的构建
保持构建的天数(第一栏):1(视情况而定)
保持构建的最大个数(第二栏):5(视情况而定)
之后在下方源码管理点击git
第一栏url填写我们github的仓库地址:https://www.zhengshuo.com/test/cloud.git
下面的分支选择*/master
其他默认即可
构建触发器:
选择Build whenever a SNAPSHOT dependency is built即可
构建环境:
选择Send files or execute commands over SSH after the build runs
Name为你任务的名称:app-1
source files:target/*.war
Remove prefix:target
Remote directory:upload/
Exec command:/opt/script/app-jenkins.sh
设置Build:
Root POM:pom.xml
Goals and options:clean package
之后保存并应用
部署web-server服务器,做jenkins打包上线:
将jdk包及tomcat的包上传到本地服务器内
解压jdk包到/usr/local/下并改名为java
解压tomcat包到/data/application/下并改名为tomcat
设置环境变量:
vim /etc/profile
在末尾添加以下内容:
export JAVA_HOME=/usr/local/java
export PATH=JAVA_HOME/jre/bin:
JAVA_HOME/lib:
JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/data/application/tomcat
保存退出
source /etc/profile #使添加生效
测试:
java -version
删除tomcat默认发布目录下面的内容:
rm -rf /data/application/tomcat/webapps/*
创建目录和脚本:
mkdir /opt/script
vim /opt/script/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 files $updata_path
echo “=========================================================”
cd /opt
echo “Backing up java project”
if [ -f files ];then
tar czf $backup_path/date +%F-%H.tar.gz $webapp_path
if [ 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 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 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
保存退出
添加执行权限:
chmod 777 /opt/script/app-jenkins.sh
如果gitlab服务器使用的是自建的证书需要在jenkins服务器上进行以下操作:
[root@jenkins ~]# git config —global user.email “ zsvip@gmail.com“
[root@jenkins ~]# git config —global user.name “zs”
[root@jenkins ~]# git config —global http.sslVerify “false”
[root@jenkins ~]# git config —global http.sslVerify false
如果是本地服务器需要在jenkins上做本地解析以及windows端的hosts上添加本地解析
gitlab服务器进行项目包的上传:
在web界面建立一个群组设置为公开(不公开是没办法连接上的)
随后在该群组内创建mave项目同样为公开,选择自动创建初始化文件(未创建则自行创建)
将gitlab服务器端的公钥上传到该项目的web界面
如果想在main这个主分支提交数据(因为main分支默认是受保护的)那么就要取消受保护的分支
在项目里找到设置—->仓库——>受保护分支——>取消保护——>保存设置即可
将要上传的项目包上传到本地服务器,并进行解压
随后来到gitlab服务器
git clone git地址
cp 项目包/* clone下来的包/ -r
cd clone下来的包
git config —global user.email “euphoria@163.com“
git config —global user.name “zs”
git add .
git commit -m “a”
git push -u origin main
前往gitlab端查看是否上传成功
并清理web-server上面的环境,确保每个目录都是干净的
返回jenkins页面开始构建任务:
回到首页找到创建的任务后,点击开始构建(绿色开始符号)
会看到左下角有执行任务,点进去后查看控制器输出
如果没有报错error提示及成功
不需要对web再进行操作
直接访问web的ip地址加上对应的url即可访问:
ip:8080/url
接下来实现项目的自动发布:
保证我们的Generic Webhook Trigger插件是可用并已启用的
注意:输入要查找的插件后会有显示,因已安装故上图无显示,选中点击install without restart 即可
找到上面jenkins对应项目的配置—->构建触发器
勾选第一个以及 Gitee webhook 触发构建,需要在 Gitee webhook 中填写 URL: http://10.0.0.13:8080/jenkins/gitee-project/cloud
勾选推送代码,以及新建Pull Requests
将勾选项后方的网址复制下来后面会用到
其他保持不变
点击保存
来到gitlab的web界面
进入建立的项目内 点击设置—->Webhooks—->在网址栏内填入自己刚刚复制的网址,向下方看勾选发布事件选项后Add webhook即可
如果没有去提前设置创建会失败,解决方案为:
在gitlab的web界面内
菜单——>管理员——>设置——>网络——>出站请求——>展开——>勾选所有内容后保存修改即可
修改完后我们回到jenkins端web界面,还没完
设置匿名用户拥有可读权限:
系统管理——>全局安全配置——>安全域选择 JenKins专用用户数据库 ——>授权策略选择 登录用户可以做任何事 并 勾选匿名用户具有可读权限后保存退出
随后系统管理—->系统配置——>找到使用统计下方的Gitlab将Enable authentication for ‘/project’ end-point的勾选项取消即可
这个时候我们回去创建,会在设置栏里的Webhooks栏的最下方看到Project Hooks栏中有我们新添加的hooks
点击测试—->Push events,注意:看到200状态码说明设置成功。
如果报错为500可尝试以下解决方案:
来到jenkins的服务器,进入jenkins的安装目录默认在安装用户的家目录下的.jenkins
找到文件config.xml
编辑ture
将true改为false即可保存退出
重启服务再次进入测试即可
第二种解决方案:
在确保所有配置都正确的情况下,在jenkins的web服务页面进行以下操作:
项目主页——>配置——>构建触发器—->高级——>勾选允许所有分支触发此作业—->保存退出
勾选保存退出后,再次进入会发现没有勾选,这是正常情况
再回到gitlab端测试服务即可
验证项目是否更新后可以实现自动构建发布:
来到gitlab的对应项目内,对文件进行修改后保存退出
迅速来到jenkins的web端,查看对应的构建记录,控制台输出
成功则访问web-server端即可
web-server的ip:8080/对应的url (不需要手动启动tomcat)
