美文网首页
jenkins(半自动及自动)

jenkins(半自动及自动)

作者: 肥四_F4 | 来源:发表于2020-06-19 01:47 被阅读0次

进化⼀下(半⾃动):(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上面操作


QQ截图20200618221510.png

在gitlab上操作


QQ截图20200618222304.png

在gitlab上操作


QQ截图20200618222347.png

报错


QQ截图20200618222447.png QQ截图20200618222550.png

报错


QQ截图20200618225146.png

解决方法

[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
问题:开发每次都要打标签。
先关闭自动部署的触发


QQ截图20200619001145.png QQ截图20200619003642.png QQ截图20200619003555.png QQ截图20200619003454.png

脚本

[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 
QQ图片20200619001341.png

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

QQ截图20200619003241.png

回退版

⽅案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脚本


4.png 5.png

脚本

[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

相关文章

网友评论

      本文标题:jenkins(半自动及自动)

      本文链接:https://www.haomeiwen.com/subject/xrfpxktx.html