Jenkins自动部署html页面测试
- 先创建好一个gitlab项目
- 在本地配置域名解析,一定要做
- 关联远程仓库
- 提交代码
- 配置Jenkins集成gitlab
- 在Jenkins服务器配置域名解析
- 添加Jenkins的公钥到gitlab上
- 项目发布
- 在本地做域名解析
- 完成Jenkins与webservers集群的免密
- 在Jenkins上编写发布脚本
- 通过Jenkins、调用shell脚本,完成发布
先创建好一个gitlab项目
在本地配置域名解析,一定要做
vim /etc/hosts
192.168.xx.xxx gitlab.test.com
关联远程仓库
方法一:克隆项目到本地
git clone -b master http://gitlab.test.com/dev/jd.git
git remote -v
可以看到已经与该仓库建立了连接
方法二:与远程仓库建立连接
git remote add origin http://gitlab.test.com/dev/jd.git
git remote -v
可以看到已经与该仓库建立了连接
提交代码
准备好要用的html代码
git add .
git commit -m '第一次提交html代码'
git push
按照提示输入用户名密码(比较懒没有做免密操作)
在gitlab可以看到刚才提交的html代码
配置Jenkins集成gitlab
1.创建一个freestyle的项目名称-freestyle-test
2.找到源码管理–选择git–>填写我们git项目的地址
此处的Credentials(凭证)填写的是Jenkins服务器的root用户的私钥,因为我更改了启动Jenkins的用户为root
这里一定要注意,高版本jenkins的配置文件,不是以前的/etc/sysconfig/jenkins
,更改它是不起作用的,高版本Jenkins的配置文件为/usr/lib/systemd/system/jenkins.service
,改它才有效果!!!
在Jenkins服务器配置域名解析
由于我们是在做测试,所以域名用的是假的,一定要在Jenkins服务器上做劫持,不然Jenkins不知道gitlab.test.com是谁
192.168.xx.xx gitlab.test.com
添加Jenkins的公钥到gitlab上
添加Jenkins的公钥到gitlab上,添加到对项目有权限的用户下
gitlab使用公钥加密,Jenkins通过凭据的私钥解密。这样Jenkins就能获取到项目的代码了。
项目发布
接下来就该发布项目了,发布前,先准备好对应的环境。lb+两台webservers
负载均衡配置
vim proxy_html.test.com.conf
upstream web {
server 192.168.xx.xx1;
server 192.168.xx.xx2;
}
server {
listen 80;
server_name html.test.com;
location / {
proxy_pass http://web;
include proxy_params;
}
}
配置web集群
集群中的每台机器的配置都一样
vim /etc/nginx/conf.d/html.test.com.conf
server {
listen 80;
server_name html.test.com;
root /code/html;
location / {
index index.html;
}
}
web集群每台机器需要创建一个code目录
mkdir -p /code
在本地做域名解析
将负载均衡的地址解析到写好的域名
192.168.xx.xxx html.test.com
完成Jenkins与webservers集群的免密
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.xx.xx1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.xx.xx2
在Jenkins上编写发布脚本
1.进入到jenkins项目的目录中
2.将项目进行打包,打包到指定目录
3.将打包的内容推送到webservers集群
4.登陆到webservers执行解压、创建软连接等操作
#!/usr/bin/bash
webservers="192.168.xx.xx1 192.168.xx.xx2"
Date=$(date +%F-%H-%M)
Web_Dir=/opt
Web_Name=web_jd_${Date}
tar_code() { #打包项目的函数
cd /var/lib/jenkins/workspace/freestyle-test1 #进入到jenkins项目的目录中
tar czf ${Web_Dir}/${Web_Name}.tar.gz ./* #将项目的目录中的所有内容进行打包,打包到指定目录
}
scp_code() { #推送项目包的函数,将打包的内容推送到webservers集群
for host in ${webservers}
do
scp ${Web_Dir}/${Web_Name}.tar.gz root@$host:${Web_Dir} && \ #拷贝打包好的项目到集群机器的指定目录
ssh root@$host "cd ${Web_Dir} && \ #登陆到集群的机器(这就是为什么要Jenkins与webservers集群免密),进入存放项目代码包的目录
mkdir -p ${Web_Name} && \ #创建一个目录
tar xf ${Web_Name}.tar.gz -C ${Web_Name} && \ #解压项目包到刚才创建的目录
rm -f ${Web_Name}.tar.gz && \ #删除压缩包
rm -rf /code/html && \ #删除Nginx配置中,项目指定的根目录
ln -s ${Web_Dir}/${Web_Name} /code/html" #创建软连接
done
}
main() { #调用前面两个函数
tar_code
scp_code
}
main #调用main函数
通过Jenkins、调用shell脚本,完成发布
调用脚本,发布
点击构建
不报错的情况下,就可以打开浏览器查看发布结果