73. git jenkins ------ 代码自动化上线

1. jenkins

  • 什么是jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

2.jenkins安装

java环境、插件的安装:

  • 安装
    [root@jenkins ~]# yum install java -y
    [root@jenkins ~]# yum localinstall -y jenkins-2.176.1-1.1.noarch.rpm
    [root@jenkins ~]# systemctl start jenkins
    [root@jenkins ~]# systemctl enable jenkins
    跳过插件安装后: 直接就登陆了jenkins系统了。 默认⽤户名是admin、
    密码是 cat/var/lib/jenkins/secrets/initialAdminPassword
    进入第一件事修改密码:

在这里插入图片描述

  • 插件:

在这里插入图片描述

插件安装有的几种方式:

  1. 直接搜索插件名称,通过jenkins的web界面安装。

  2. 可以直接上⽹上下载插件,然后web界面上传.hpi的⽂件,进⾏插件安装。
     (https://mirror.tuna.tsinghua.edu.cn/jenkins/plugins/)

  3. 直接将插件导⼊到 对应jenkins存储插件的⽬录。
    [root@jenkins ~]# tar xf jenkins_plugins_new.tar.gz
    [root@jenkins ~]# mv plugins/* /var/lib/jenkins/plugins/
    [root@jenkins ~]#chown -R jenkins.jenkins /var/lib/jenkins/plugins/
    [root@jenkins ~]# systemctl restart jenkins

简单操作:可以使用jenkins调⽤下Shell命令:

磁盘的空间、内存的整体信息、等等 (服务器的账号和密码。)
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

3. jenkins如何拉取gitlab上项目的代码:

  1. gitlab上需要先有⼀个项⽬ ( TreeNB )
  2. 添加⼀个插件,默认jenkins⽆法拉取gitlab上的代码,需要依赖插件完成。

在这里插入图片描述

  1. 在jenkins创建⼀个freestyle的项⽬.

jenkins免密拉取----gitlab代码:
 
3.1: 填写需要拉取的项⽬地址(ssh⽅式)
3.1:在jenkins上⽣成⼀对秘钥
3.2:将公钥存储⾄gitlab服务器的某个⽤户下,这个⽤户必须对这个项⽬有拉取权限。
3.3:在jenkins上配置Credentials,将jenkins服务器root的私钥添加上来(添加凭据-类型-ssh)。
3.4: 在jenkins上配置gitlab的域名劫持。 10.0.0.110 gitlab.oldxu.com
在这里插入图片描述

4. 发布的模式

手动—》半自动–》全自动
在这里插入图片描述

4.1手动代码上线过程:

搭建web服务了解代码上线的过程 ( ⼿动 | ansible )

#web节点配置
[root@web01 ~]# cat /etc/nginx/conf.d/monitor.xxx.com.conf

server {
listen 80;
server_name monitor.xxxx.com;
root /code/monitor;
location / {
index index.html;
}
}

#lb配置:
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_monitor.xxxx.com.conf

upstream monitor {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name monitor.xxxx.com; location / {
proxy_pass http://monitor;
include proxy_params;
}
}

[root@lb01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 ~]# systemctl reload nginx

1.在gitlab上创建⼀个项⽬。
2.模拟开发提交代码⾄gitlab服务器

#推送现有⽂件夹内容

git remote remove origin
cd existing_folder
git init
git remote add origin git@gitlab.oldxu.com:dev/web-monitor.git
git add .
git commit -m "Initial commit"
git push -u origin master

#注意,需要将你windows的公钥添加到gitlab服务器中对该项⽬有权限的⽤户下。

3.⼿动去拉取代码,并使⽤scp推送到各个web节点。
随便登陆⼀个机器,⼿动执⾏git pull 拉取代码,然后推送各个节点。
[root@lb01 ~]# echo "10.0.0.110 gitlab.oldxu.com" >> /etc/hosts
 
#克隆项⽬
[root@lb01 ~]# git clone http://gitlab.oldxu.com/dev/web-monitor.git
正克隆到 ‘web-monitor’…
Username for ‘http://gitlab.oldxu.com’: root
Password for ‘http://root@gitlab.oldxu.com’:
remote: Enumerating objects: 435, done.
remote: Counting objects: 100% (435/435), done.
remote: Compressing objects: 100% (372/372), done.
remote: Total 435 (delta 53), reused 435 (delta 53), pack-reused 0
接收对象中: 100% (435/435), 8.78 MiB | 10.41 MiB/s, done.
处理 delta 中: 100% (53/53), done.
 
#推送到各个节点:
[root@lb01 ~]# scp -rp web-monitor root@172.16.1.7:/code/monitor-v1
[root@lb01 ~]# scp -rp web-monitor root@172.16.1.8:/code/monitor-v1
 
#创建软连接(相对⾼级⼀点,这样后期有问题还能回退)
[root@lb01 ~]# ssh root@172.16.1.7 'ln -s /code/monitor-v1 /code/monitor'
root@172.16.1.7’s password:
[root@lb01 ~]# ssh root@172.16.1.8 'ln -s /code/monitor-v1 /code/monitor'
root@172.16.1.8’s password:

4.配置域名劫持,保证模拟环境可以访问
10.0.0.5 monitor.oldxu.com

5.现在开发要对项⽬更新了?接下来该如何操作了?

#1.开发修改代码,提交代码
xudeMacBook-Pro:monitor xuliangwei$ vim index.html
xudeMacBook-Pro:monitor xuliangwei$ git status
xudeMacBook-Pro:monitor xuliangwei$ git add .
xudeMacBook-Pro:monitor xuliangwei$ git commit -m "变更index.html⽂件"
xudeMacBook-Pro:monitor xuliangwei$ git push origin master
 
#2.使⽤过git pull拉取最新代码
[root@lb01 ~]#cd web-monitor/
[root@lb01 web-monitor]# git pull origin master
Username for ‘http://gitlab.oldxu.com’: root
Password for ‘http://root@gitlab.oldxu.com’:
 
#3.重新推送⼀个新的版本⾄web集群节点
[root@lb01 ~]# cd web-monitor/
[root@lb01 web-monitor]# cd ..
[root@lb01 ~]# scp -rp web-monitor root@172.16.1.7:/code/monitor-v2
[root@lb01 ~]# scp -rp web-monitor root@172.16.1.8:/code/monitor-v2
 
#4.更新软连接。
[root@lb01 ~]# ssh root@172.16.1.7 'rm -f /code/monitor && ln -s /code/monitor-v2 /code/monitor'
root@172.16.1.7’s password:
[root@lb01 ~]#ssh root@172.16.1.8 'rm -f /code/monitor && ln -s /code/monitor-v2 /code/monitor'
root@172.16.1.8’s password:
 
#5.如果想退回,很简单。(因为我做了版本的管理⽅式)
[root@lb01 ~]# ssh root@172.16.1.7 'rm -f /code/monitor && ln -s /code/monitor-v1 /code/monitor'
[root@lb01 ~]#ssh root@172.16.1.8 'rm -f /code/monitor && ln -s /code/monitor-v1 /code/monitor'

4.2 进化⼀下(半自动):

完成以下步骤:

1.模拟开发提交代码-------》gitlab服务器。
2.集群环境的搭建。站点的⽬录指定。(⼿动)
3.通过jenkins拉取代码,然后由jenkins调⽤shell脚本将代码部署⾄各个节点。(点⼀下)

错误处理:

  1. 权限不够:jenkins是由jenkins⽤户运⾏。
    [root@jenkins ~]# vim /etc/sysconfig/jenkins # 修改jenkins进程运⾏的身份为root
    JENKINS_USER=“root”
  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

4.3 再进化⼀下:全自动

(全⾃动,开发修改代码,提交代码⾄gitlab仓库,⾃动触发jenkins发布。适⽤于在我们的测
试环境 ):
在这里插入图片描述
webhook(钩⼦)
开发–>gitlab产⽣⼀个事件(push event ) —> 通知jenkins触发构建操作。
83b8c71380d2a2fff785da4e9180d506
http://jenkins.oldxu.com:8080/project/web-monitor-deploy

在这里插入图片描述
在这里插入图片描述
解决 Url is blocked: Requests to the local network are not allowed
在这里插入图片描述
在这里插入图片描述

再进化⼀下( 自动+传参方式+ 指定版本。)

如果我们才⽤tag管理的⽅式,⽐如第⼀部署时打⼀个标签v1.1 .运维在部署时给站点⽬录加⼀个v1.1的
名称在后⾯。v1.2\v1.3
问题:开发每次都要打标签。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[root@jenkins scripts]# cat /scripts/html_deploy_tag.sh

#!/usr/bin/bashDate=$(date +%F-%H-%M)
Web_Server="172.16.1.7 172.16.1.8"
Web_Name=web_monitor-${Date}-${git_version}
Web_Dir=/opt

#1.从jenkins构建的目录下打包
tar_code() {
cd ${WORKSPACE} && \
tar czf ${Web_Dir}/${Web_Name}.tar.gz ./*
}
#2.推送到web集群节点
 scp_code() {
 for ip in ${Web_Server}
 do
   #推送数据包
   scp -rp ${Web_Dir}/${Web_Name}.tar.gz root@$ip:/opt
   #登陆集群节点解压
   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

进化⼀下( 回退。)

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

-------》重新构建一个freestyle,修改本地软链接来切换代码版本

1.创建⼀个项⽬ web-monitor-rollback (不⽤配置git、使⽤的频次很低。)
2.执⾏构建时需要传递git tag版本
3.直接调⽤Shell脚本

#!/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
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
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值