进化⼀下(半⾃动):(jenkins Freestyle)
1.模拟开发提交代码⾄gitlab服务器。
2.集群环境的搭建,已经ok了。站点的⽬录也指定。(⼿动)
3.通过jenkins拉取代码,然后由jenkins调⽤shell脚本将代码部署⾄各个节点。(点⼀下)
初级脚本
[root@jenkins ~ 21:25:42]# cat /scripts/html_deploy.sh
#!/usr/bin/bash
Date=$(date +%F-%H-%M)
Web_Server="172.16.1.7 172.16.1.8"
#打包
tar_code() {
cd /var/lib/jenkins/workspace/web-monitor-deploy && \
tar czf /opt/web_monitor-${Date}.tar.gz ./*
}
#推送到web节点
scp_code() {
for ip in ${Web_Server}
do
#推送数据包
scp -rp /opt/web_monitor-${Date}.tar.gz root@$ip:/opt
#登录集群节点解压
ssh root@${ip} "cd /opt && \
mkdir -p web_monitor-${Date} && \
tar xf web_monitor-${Date}.tar.gz -C web_monitor-${Date} && \
rm -f wen_monitor-${Date}.tar.gz && \
rm -f /code/monitor && \
ln -s /opt/web_monitor-${Date} /code/monitor"
done
}
deploy() {
tar_code
scp_code
}
deploy
错误:
1)权限不够:jenkins是由jenkins⽤户运⾏。( 修改jenkins进程运⾏的身份为root )
[root@jenkins ~ 20:50:29]# vim /etc/sysconfig/jenkins
29 JENKINS_USER="root" #将jenkins修改为root
[root@jenkins ~ 20:56:05]# systemctl restart jenkins #重启jenkins服务
[root@jenkins ~ 20:56:15]# tail -f /var/log/jenkins/jenkins.log #查看日志。看到successful 就是成功了
2)jenkins的root⽤户没有与web集群的节点进⾏免密,所以失败。
[root@jenkins ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
[root@jenkins ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
测试
在windowns上提交代码(开发人员)
vim index.html
git add .
git commit -m "小宝"
git push origin master
在jenkins测试(运维人员)
选择项目-->Build NOW-->查看网页
升级版
[root@jenkins ~ 21:38:51]# cat /scripts/html_deploy.sh
#!/usr/bin/bash
Date=$(date +%F-%H-%M)
Web_Server="172.16.1.7 172.16.1.8"
Web_Name=web_monitor-${Date}
Web_Dir=/opt
#打包
tar_code() {
cd ${WORKSPACE} && \
tar czf ${Web_Dir}/${Web_Name}.tar.gz ./*
}
#推送到web节点
scp_code() {
for ip in ${Web_Server}
do
#推送数据包
scp -rp ${Web_Dir}/${Web_Name}.tar.gz root@$ip:${Web_Dir}
#登录集群节点解压
ssh root@${ip} "cd ${Web_Dir} && \
mkdir -p ${Web_Name} && \
tar xf ${Web_Name}.tar.gz -C ${Web_Name} && \
rm -f ${Web_Name}.tar.gz && \
rm -f /code/monitor && \
ln -s ${Web_Dir}/${Web_Name} /code/monitor"
done
}
deploy() {
tar_code
scp_code
}
deploy
全自动(gitlab+jenkins实现全自动 ){webhook}
配置-->构建环境-->Build when a change is pushed to GitLab. GitLab webhook URL: http://jenkins.oldben.com:8080/project/web-monitor-deploy-->Generate{会产生一个令牌}
40678daef6e80c46f50790eef6e754a6
http://jenkins.oldben.com:8080/project/web-monitor-deploy
在jenkins上面操作

在gitlab上操作

在gitlab上操作

报错


报错

解决方法
[root@gitlab ~ 22:50:32]# cat /etc/hosts
10.0.0.120 jenkins.oldben.com
进化⼀下( ⾃动+传参⽅式+ 指定版本。)
jenkins实现参数构建(基于git tag方式部署)
如果我们才⽤tag管理的⽅式,⽐如第⼀部署时打⼀个标签v1.1 .运维在部署时给站点⽬录加⼀个v1.1的
名称在后⾯。v1.2\v1.3
问题:开发每次都要打标签。
先关闭自动部署的触发




脚本
[root@jenkins ~ 23:45:03]# cat /scripts/html_deploy_tag.sh
#!/usr/bin/bash
Date=$(date +%F-%H-%M)
Web_Server="172.16.1.7 172.16.1.8"
Web_Name=web_monitor-${Date}-${git_version}
Web_Dir=/opt
#打包
tar_code() {
cd ${WORKSPACE} && \
tar czf ${Web_Dir}/${Web_Name}.tar.gz ./*
}
#推送到web节点
scp_code() {
for ip in ${Web_Server}
do
#推送数据包
scp -rp ${Web_Dir}/${Web_Name}.tar.gz root@$ip:${Web_Dir}
#登录集群节点解压
ssh root@${ip} "cd ${Web_Dir} && \
mkdir -p ${Web_Name} && \
tar xf ${Web_Name}.tar.gz -C ${Web_Name} && \
rm -f ${Web_Name}.tar.gz && \
rm -f /code/monitor && \
ln -s ${Web_Dir}/${Web_Name} /code/monitor"
done
}
deploy() {
tar_code
scp_code
}
deploy
测试
vim index
写点内容 v1.1
git add .
git commit -m "描述"
git push origin master
git tag -a "v1.1" -m "发布v1.1版本"
git push origin --tags
############################
vim index
写点内容 v1.2
git add .
git commit -m "描述"
git push origin master
git tag -a "v1.2" -m "发布v1.2版本"
git push origin --tags

可以列出tag列表,供你选择

回退版
⽅案1:直接通过参数传递 v1.1 重新部署⼀次就回退了。(很积累)
java项⽬:
1.获取源代码-->maven编译-->产⽣war包-->推送部署到集群节点。
2.回退 获取源代码-->--代码检测-->maven编译-->产⽣war包-->推送部署到集群节点
v1.1 v1.2 v1.3 通过shell直接改变软件的指向。 传递⼀个v1.1
rm -f /code/monitor && ln -s /opt/xxxx-v1.1 /code/monitor
1.创建⼀个项⽬ web-monitor-rollback (不⽤配置git、使⽤的频次很低。)
2.执⾏构建时需要传递git tag版本
3.直接调⽤Shell脚本


脚本
[root@jenkins ~ 01:41:52]# cat /scripts/html_rollback.tag.sh
#!/usr/bin/bash
Date=$(date +%F-%H-%M)
Web_Server="172.16.1.7 172.16.1.8"
Web_Name=web_monitor-${Date}
Web_Dir=/opt
#推送到web节点
for ip in ${Web_Server}
do
ssh root@${ip} "[ -d ${Web_Dir}/web_monitor-*-${git_version} ] && \
rm -f /code/monitor && \
ln -s ${Web_Dir}/web_monitor-*-${git_version} /code/monitor"
done
#清理垃圾
rm -f ${Web_Dir}/${Web_Name}-${git_version}.tar.gz
网友评论