自动化发布静态页面

发布时间 2023-12-18 16:22:32作者: Mrterrific

1.需求

一键部署静态页面到 web7 web8 ,且支持后续的页面更新

流程

jenkins部署流水线

1. 准备web7,web8,两个客户端,部署好nginx,支持静态页面推送
2. jenkins编写部署脚本,创建job,触发shell脚本执行
3. 确保jenkins可以拉取代码仓库
4. 确保jenkins可以和目标机器,实现免密通信(因为要远程执行命令,远程部署)

2.准备好代码仓库gitlab

1.登录码云,获取我们测试的静态文件
git@gitee.com:kangjie1209/monitor.git

2.导入到自己的gitlab

 

导入中

 

3.配置jenkins

3.1 创建自由风格job

 

3.2 配置gitlab连接

 

3.3 开发部署脚本

开发思路就是

1. 下载代码
2. 压缩代码,便于传输
3. 脚本提交到目标机器上

 

代码

#!/bin/bash
#author: www.yuchaoit.cn


# 1.进入代码目录,打包传输
DATE=$(date +%Y-%m-%d-%H-%M-%S)
web_server_list="10.0.0.7 10.0.0.8"

get_code(){
    cd ${WORKSPACE} && \
    tar czf /opt/web-${DATE}.tar.gz ./*
}


# 2.代码发送给web集群组
# 基于软连接,指向具体的文件目录,实现发版
scp_web_server(){
for hosts in $web_server_list
do
    scp /opt/web-${DATE}.tar.gz root@$hosts:/opt/
    ssh root@$hosts "mkdir -p /code/web-${DATE} && \
                                    tar -zxf /opt/web-${DATE}.tar.gz -C /code/web-${DATE}
                  rm -rf /code/web && \
                  ln -s /code/web-${DATE} /code/web"
done
}

deploy(){
        get_code
        scp_web_server
}

# 执行入口
deploy

脚本创建

[root@jenkins-100 /jenkins_shell]#chmod u+x deploy_nginx.sh 
[root@jenkins-100 /jenkins_shell]#ls
deploy_nginx.sh

3.4 jenkins调用执行shell脚本

 

4.确保web7-8环境正常

# 上述部署脚本,是将静态文件放在了 /code/web

# nginx配置
cat > /etc/nginx/conf.d/monitor.conf <<'EOF'
server{

    listen 80;
    server_name _;
    location / {
        root /code/web;
        index index.html;
    }

}
EOF

# 重启
pkill -9 nginx
systemctl restart nginx

5.测试jenkins构建

先确保和目标机器免密ssh
[root@jenkins-100 ~]#for i in 7 8 ;do ssh-copy-id root@10.0.0.$i;done

[root@jenkins-100 ~]#for i in 7 8 ;do ssh root@10.0.0.$i "hostname" ;done
web-7
web-8


确保2台机器开启nginx
for i in 7 8 ;do ssh root@10.0.0.$i 'pkill -9 nginx;systemctl restart nginx' ;done

 

6.nice页面出现了

 

7.试试代码更新

1.推送代码到代码仓库,更新
完成如下操作

- windows克隆代码(开发)
- 修改,提交版本(开发)
- 推送到gitlab(开发)
- 点击jenkins,实现页面自动更新 (运维)

7.2 模拟开发修改,提交代码

 

7.3 运维要操心什么么?点鼠标啊!

 


 

7.4 看看结果?给力呀

 

8.还有更高级的玩法吗?(构建触发器,webhook)

jenkins除了能让你鼠标一点,就实现更新,还有没有更nb的玩法?

比如连鼠标都不用点?我擦,你真是懒到家了!

8.1 jenkins触发器

 

8.2 gitlab设置webhook

 

坑记录

如果出现报错
Url is blocked: Requests to the local network are not allowed

 

添加webhook结束

 

8.3 开发又来写代码了(push请求)

 

注意于超老师这里,啥也没干,只是push推送了代码。