12.分布式版本控制系统Git实战
第一章 快速入门
1.1 什么是Git
1.2 为什么要做版本控制
1.3 安装git
第二章 “抖音”创业史
2.1 第一阶段:单枪匹马开始干
2.2 第二阶段:开发新功能
2.3 第三阶段:“约XX事件”
2.4 阶段回顾:区域与总结
2.5 第四阶段:商城&紧急修复bug
2.5.1 分支
2.5.2 紧急修复bug方案
2.5.3 分支命令总结
2.5.4 工作流
2.6 第五阶段:进军三里屯
2.6.1 第一天上班前在家上传代码
2.6.2 初次在公司新电脑下载代码
2.6.3 下班回到家继续写代码
2.6.4 到公司继续开发
2.6.5 在公司约妹子忘记提交代码
2.6.6 回家继续写代码
2.6.7 到公司继续写代码
2.6.8 知识补充&总结
2.7第六阶段:其他知识补充
2.7.1 git tag标签
2.7.2 免密码登录
2.7.3 git忽略文件
第一章 快速入门
1.1 什么是Git
Git是一个分布式的版本控制软件。
- 软件,类似于QQ、office、dota等安装到电脑上才能使用的工具。
- 版本控制,类似于毕业论文、写文案、视频剪辑等,需要反复修改和保
留原历史数据。 -
分布式
文件夹拷贝
本地版本控制
集中式版本控制
分布式版本控制
1.2 为什么要做版本控制
要保留之前所有的版本,以便回滚和修改。
1.3 安装git
安装git软件有很多种方式:官网传送门
- 1.windows系统
https://git-scm.com/download/win
- 2.linux系统
yum install git -y
- 3.macos系统
https://git-scm.com/download/mac
第二章 “抖音”创业史
2.1 第一阶段:单枪匹马开始干
想要让 git 对一个目录进行版本控制需要以下步骤:
- 进入要管理的文件夹
- 执行初始化命令
git init
- 管理目录下的文件状态
git status
注:新增的文件和修改过后的文件都是红色
- 管理指定文件(红变绿)
git add 文件名
git add .
- 个人信息配置:用户名、邮箱 【一次即可】
git config --global user.email "oldxu@qq.com"
git config --global user.name "oldxu"
git config --global color.ui true
- 生成版本
git commit -m '描述信息'
- 查看版本记录
git log
2.2 第二阶段:开发新功能
git add
git commit -m '短视频'
2.3 第三阶段:“约XX事件”
- 回滚至之前版本
git log
git reset --hard 版本号
- 回滚之之后版本
git reflog
git reset --hard 版本号
2.4 阶段回顾:区域与总结
git init #初始化一个目录为git版本库
git add #将没有被管理的文件,加入git进行管理
git commit #将内容提交到版本库中,生成对应的版本记录信息
git log #查看提交的历史记录
git reflog #查看所有的历史提交记录
git reset --hard 版本号 #回退到指定的提交版本记录
2.5 第四阶段:商城&紧急修复bug
2.5.1 分支
分支可以给使用者提供多个环境的可以,意味着你可以把你的工作从开发
主线上分离开来,以免影响开发主线。
2.5.2 紧急修复bug方案
2.5.3 分支命令总结
- 查看分支
git branch
- 创建分支
git branch 分支名称
- 切换分支
git checkout 分支名称
- 分支合并(可能产生冲突)
git merge 要合并的分支
注意:切换分支再合并
- 删除分支
git branch -d 分支名称
2.5.4 工作流
有了分支后,我们的开发工作流程就可以变成如下方式
2.6 第五阶段:进军三里屯
有钱之后就要造呀,一个人在三里屯买了一层楼做办公室。
2.6.1 第一天上班前在家上传代码
首先,需要注册github账号,并创建远程仓库,然后再执行如下命令,将代码上传到github。
1. 给远程仓库起别名
git remote add origin 远程仓库地址
2. 向远程推送代码
git push -u origin 分支
2.6.2 初次在公司新电脑下载代码
1. 克隆远程仓库代码
git clone 远程仓库地址 (内部已实现git remote add origin
远程仓库地址)
2. 切换分支
git checkout 分支
在公司下载完代码后,继续开发
1.切换到dev分支进行开发
git checkout dev
2.把master分支合并到dev [仅一次]
git merge master
3.修改代码
4.提交代码
git add .
git commit -m 'xx'
git push origin dev
2.6.3 下班回到家继续写代码
1.切换到dev分支进行开发
git checkout dev
2.拉代码
git pull origin dev
3.继续开发
4.提交代码
git add .
git commit -m 'xx'
git push origin dev
2.6.4 到公司继续开发
1.切换到dev分支进行开发
git checkout dev
2.拉最新代码(不必再clone,只需要通过pull获取最新代码即可)
git pull origin dev
3.继续开发
4.提交代码
git add .
git commit -m 'xx'
git push origin dev
开发完毕,要上线
1. 将dev分支合并到master,进行上线
git checkout master
git merge dev
git push origin master
2. 把dev分支也推送到远程
git checkout dev
git merge master
git push origin dev
2.6.5 在公司约妹子忘记提交代码
1.拉代码
git pull origin dev
2.继续开发
3.提交代码
git add .
git commit -m 'xx'
注:忘记push了
2.6.6 回家继续写代码
1.拉代码,发现在公司写的代码忘记提交...
git pull origin dev
2.继续开发其他功能
3.把dev分支也推送到远程
git add .
git commit -m 'xx'
git push origin dev
2.6.7 到公司继续写代码
1.拉代码,把晚上在家写的代码拉到本地(有合并、可能产生冲突)
git pull origin dev
2.如果有冲突,手动解决冲突
3.继续开发其他功能
4.把dev分支也推送到远程
git add .
git commit -m 'xx'
git push origin dev
2.6.8 知识补充&总结
git pull origin dev
等价于
git fetch origin
git merge origin/dev
小总结
- 添加远程连接(别名)
git remote add origin 地址
git remote -v
- 推送代码
git push origin dev
- 下载代码
git clone 地址
- 拉取代码
git pull origin dev
等价于
git fetch origin dev
git merge origin/dev
- 记录图形展示
git log --graph --pretty=format:"%h %s"
2.7第六阶段:其他知识补充
2.7.1 git tag标签
1.git标签作什么用?
当Git仓库内的数据有改善或者功能更新时,我们经常会打一个类似于软件
版本号的标签tag,这样通过标签就可以将版本库中的某次commit给记录下
来,便于我们后续将特定时期的数据取出来用。简单来说:标签也是版本
库的一个快照。
2.为什么要使用git标签?
Git有commit,为什么还要引入tag?“请把上周一的那个版本打包发布,
commit号是6a5819e...”, “一串乱七八糟的数字不好找!”如果换一个办
法:
“请把上周一的那个版本打包发布,版本号是v1.2”。按照 tag v1.2查找
commit就行!”所以,tag就是一个让人容易记住的名字,它跟某个commit
绑在一起。
3.git标签基本使用
- 对当前最新提交的代码创建标签,-a标签名称,-m标签描述
git tag -a "v1.1" -m "描述信息"
- 创建标签,指定commitID
git tag -a v1.2 CommitID -m "Messages"
- 查看标签详情
git tag
git show 标签名
git push origin --tags 推送标签到gitee码云
2.7.2 免密码登录
- URL中体现
原来的地址:https://github.com/oldxu/treenb.git
修改的地址:https://用户名:密码
@github.com/oldxu/treenb.git
git remote add origin https://用户名:密码
@github.com/oldxu/treenb.git
git push origin master
- SSH实现
1. 生成公钥和私钥(默认放在 ~/.ssh目录下,id_rsa.pub公钥、
id_rsa私钥)
ssh-keygen
2. 拷贝公钥的内容,并设置到github中。
3. 在git本地中配置ssh地址
git remote add origin
git@github.com:WuPeiqi/dbhot.git
4. 以后使用
git push origin master
- git自动管理凭证
2.7.3 git忽略文件
让Git不再管理当前目录下的某些文件。.gitignore
通常情况下有如下文件可能需要忽略
- 1.程序运行时产生的垃圾文件
- 2.程序运行时产生的缓存文件
- 3.程序本地开发使用的图片文件
- 4.程序连接数据一类的配置文件
*.h
!a.h
files/
*.py[c|a|d]
更多参考:https://github.com/github/gitignore
☆2. GitLab分布式版本控制器
GitLab简介
GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
由于Git的分布式特性,即使Gitlab不可用,开发人员仍然可以在本地提交代码。
1. gitlab安装
#配置base源和epel源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#下载并安装gitlab
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
#设置访问url和关闭prometheus
[root@node1 tools]# vim /etc/gitlab/gitlab.rb
external_url 'http://douergitlab.com'
prometheus_monitoring['enable'] = false
#配置gitlab通过smtp发送邮件
[root@node1 tools]# vim /etc/gitlab/gitlab.rb
52 gitlab_rails['gitlab_email_enabled'] = true
53 gitlab_rails['gitlab_email_from'] = '245684979@qq.com'
54 gitlab_rails['gitlab_email_display_name'] = 'linux_gitlab'
#配置mail邮件服务
517 gitlab_rails['smtp_enable'] = true
518 gitlab_rails['smtp_address'] = "smtp.qq.com"
519 gitlab_rails['smtp_port'] = 25
520 gitlab_rails['smtp_user_name'] = "245684979@qq.com"
521 gitlab_rails['smtp_password'] = "<passwd>"
522 gitlab_rails['smtp_domain'] = "smtp.qq.com"
523 gitlab_rails['smtp_authentication'] = "login"
524 gitlab_rails['smtp_enable_starttls_auto'] = true
525 gitlab_rails['smtp_tls'] = true
#关闭一些不用的组件
grafana['enable'] = false
node_exporter['enable'] = false
redis_exporter['enable'] = false
postgres_exporter['enable'] = false
gitlab_monitor['enable'] = false
gitlab_monitor['probe_sidekiq'] = false
prometheus_monitoring['enable'] = false
prometheus['enable'] = false
alertmanager['enable'] = false
#重新加载配置文件_需要等待一会
gitlab-ctl reconfigure
gitlab基本启动与停止
gitlab-ctl start | restart | stop | status
注意:每次修改gitlab的配置文件,都需要进行一次初始化操作(非常快)
gitlab日常使用?
如果有新成员需要加入该项目该怎么办?
1.创建用户
2.加入组
3.为其分配权限
4.用户拿Windows将公钥放入对应的用户ssh下,
5.使用git clone 下载代码
6.使用git pull或git push 更新或者上传代码
浏览器访问域名
http://www.douergitlab.com/
2.gitlab汉化
#下载汉化包
https://gitlab.com/xhang/gitlab
gitlab-ctl stop
tar xf gitlab-12-0-stable-zh.tar.gz
\cp -a gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
gitlab-ctl restart
页面显示502,请耐心等待一会,重启的时间较久
3. gitlab-用户-用户组-项目之间的关系
先创建用户组—>在基于用户组创建项目—>最后创建用户—>编辑用户组—>添加成员—>注意权限
※4. gitlab灾备措施_备份恢复和迁移※
备份恢复与迁移
非常简单. 使用一条命令即可创建完整的Gitlab备份:
4.1 备份
[root@node1 ~]# gitlab-rake gitlab:backup:create
[root@node1 ~]# ls /var/opt/gitlab/backups/
1572333106_2019_10_29_11.9.12_gitlab_backup.tar
/etc/gitlab/gitlab.rb
配置文件须备份
/var/opt/gitlab/nginx/conf
nginx配置文件
/etc/postfix/main.cfpostfix
邮件配置备份
1. 设置Gitlab备份目录
[root@node1 ~]# vim /etc/gitlab/gitlab.rb
...
gitlab_rails['manage_backup_path'] = true #管理备份路径
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" #备份路径
gitlab_rails['backup_archive_permissions'] = 0644 #备份的默认权限为644
gitlab_rails['backup_keep_time'] = 604800 #允许删除备份之前保留备份的持续时间(以秒为单位 默认7天)
...
2.手动备份
[root@node1 ~]# gitlab-rake gitlab:backup:create
3.自动备份
[root@node1 ~]# crontab -e
#每天凌晨2点进行一次自动备份:通过crontab使用备份命令实现
00 02 * * * /usr/bin/gitlab-rake gitlab:backup:create
4.2 恢复
# 停止相关数据连接服务
[root@node1 ~]# gitlab-ctl stop unicorn
[root@node1 ~]# gitlab-ctl stop sidekiq
#编号备份中恢复,只需复制到日期即可
[root@node1 ~]# gitlab-rake gitlab:backup:restore BACKUP=1572333106_2019_10_29_11.9.12
#启动Gitlab
[root@node1 ~]# gitlab-ctl start
恢复成功
4.3 迁移
迁移如同备份与恢复的步骤一样, 只需要
将老服务器/var/opt/gitlab/backups目录
下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups
即可
需要注意的是新服务器上的Gitlab的版本必须与创建备份时的Gitlab
版本号相同
. 比如新服务器安装的是最新的11.9.11版本的Gitlab那么迁移之前, 最好将老服务器的Gitlab升级为11.9.11,基于最新版本的状态在进行备份
/etc/gitlab/gitlab.rb gitlab
配置文件须迁移,迁移后需要调整数据存放目录
/var/opt/gitlab/nginx/conf
nginx配置文件目录须迁移
#迁移到云主机的方法
先备份,云主机要安装相同版本,恢复(记得把软件包留下来)
#将旧机器上的备份文件同步过来后的操作步骤
[root@node1 ~]# gitlab-ctl stop unicorn
[root@node1 ~]# gitlab-ctl stop sidekiq
[root@node1 ~]# chmod 777 /var/opt/gitlab/backups/1572333106_2019_10_29_11.9.12_gitlab_backup.tar
[root@node1 ~]# gitlab-rake gitlab:backup:restore BACKUP=1572333106_2019_10_29_11.9.12
5. gitlab常用命令
gitlab-ctl start # 启动所有 gitlab 组件;
gitlab-ctl stop # 停止所有 gitlab 组件;
gitlab-ctl restart # 重启所有 gitlab 组件;
gitlab-ctl status #查看服务状态;
gitlab-ctl reconfigure # 启动服务;
vim /etc/gitlab/gitlab.rb # 修改默认的配置文件;
gitlab-rake gitlab:check SANITIZE=true --trace #检查gitlab;
gitlab-ctl tail # 查看日志;
6. gitlab主要配置文件目录
主配置文件: /etc/gitlab/gitlab.rb
文档根目录: /opt/gitlab
默认存储库位置: /var/opt/gitlab/git-data/repositories
Nginx配置文件: /var/opt/gitlab/nginx/conf/gitlab-http.conf
Postgresql数据目录: /var/opt/gitlab/postgresql/data
7. Gitlab普通用户通过ssh协议上传
我们在clone代码的时候可以选择http协议,当然我们亦可以选择ssh协议来拉取代码。
在本地git客户端生成ssh key,然后配置在gitlab里,而后使用ssh协议进行提交和拉取git远程仓库的代码。
创建普通用户 李四
#在root用户下添加hosts解析
[root@node1 ~]# vim /etc/hosts
10.0.0.11 douergitlab.com
#创建普通用户 lisi
useradd lisi
su - lisi
mkdir zx
cd zx/
git config --global user.name "李四"
git config --global user.email "lichenxing0430@163.com"
cp /etc/services . # 用来测试的文件放到当前目录下
#将生成ssh秘钥后添加
[lisi@node1 zx]$ ssh-keygen -t rsa
[lisi@node1 zx]$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDoBLv83m/JtEu7Kst47qwmYsCepkjcbl3OaBUvr0/47TmHfJ1fBFaQUOKMG61vAKuqKaQaoLGakpFQo8jyqe6XbgX0tKOgJs9IcoZegYLdNeRmqfUDoBqefurHitquNHnUhJCywvXgmzUQfnh+Ub07qTE0BIvbA2NLC1DloaJdsHbj8SsN0FasCcImu7wGlVol55tD+JdROy9SzFWD+bTeFROEPAV/3E4MCXAiZ4cpWoJe+3k2coxayKvmjdfFp/+fqOYtGmjkS4tUe3jZs8UJCvf5jwLZrXe2njAp4bDD2xGXqk9j1cWFnYLiqadCBIjf9M8EHlJRU19pb+p7Zf+N lisi@node1
#删除之前的origin配置
git remote remove origin
#生成origin传输协议为ssh,ssh协议地址到项目的详情页进行复制
[lisi@node1 zx]$ git remote add origin git@douergitlab.com:lisi/zxzn.git
[lisi@node1 zx]$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@douergitlab.com:lisi/zxzn.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
#上传代码 V_1版本
git init
git remote add origin git@douergitlab.com:lisi/zxzn.git
git add .
git commit -m "V_1"
git push -u origin master #这里直接通过SSH协议上传了
刷新网页查看
8. gitlab的克隆 clone
创建一个新的普通用户 王二
#创建一个普通用户wanger并生成ssh秘钥
[root@node1 ~]# useradd wanger
[root@node1 ~]# su - wanger
[wanger@node1 ~]$ ssh-keygen -t rsa
[wanger@node1 ~]$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyGDctK6P41EnTvn+ubVGyTMpa77zU7h4HUF7XhJirrp+8LUXe6HwdXWDKtzz88Eqd/OISh+ihMqsF9Wrs6TBL09Mda7YkxHZAHKlprJF3sfAmgCb6GYjHKj/mw+teYcg3Mu1YGr3GnR5q0sQvWcCBqwJCMZmaK8a0gVmsbJ5Jq+6d9N5Peko/m+U7MY9iX/kWPaiNHJ9l2UoDwelV5UCaU0hfTYNspgVTFlAZbSoTsjnMenHJFhWmzXytjJh3KyU9GKq1VErcMhjR0Px601IHtj1uprkqs9MfF62SLSYtMG348IGHxcWA5UhIL8b9Zhxlg1UrHK/YKpAwfI+24dyj wanger@node1
#使用李四用户的SSH克隆链接 第一次需要输入 yes
[wanger@node1 ~]$ git clone git@douergitlab.com:lisi/zxzn.git
[wanger@node1 ~]$ tree
.
└── zxzn
└── services
找到王二用户的个人邮箱
lichenxing@in365robot.com
9.gitlab版本升级
gitlab升级,最好要小版本跨,不要直接跳级
官方规定在主要版本系列中首先到达最后一个次要版本,才能升级至下一个主要版本。
V10--->V11.8---V11.11--->V12.0
#关闭gitlab核心服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
#备份
gitlab-rake gitlab:backup:create
#查看当前版本
[root@node1 ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
11.9.12
#下载gitlab的rpm安装包进行升级
cd /server/tools
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.11.8-ce.0.el7.x86_64.rpm
rpm -Uvh gitlab-ce-11.11.8-ce.0.el7.x86_64.rpm
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
11.11.8
#访问重启后的gitlab,查看是否成功,继而升到最新版本
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm
rpm -Uvh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
#更新配置
gitlab-ctl reconfigure
gitlab-ctl restart
#查看新版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.0.3
10. svn迁移到Gitlab
1.安装svn服务器,将svn中的数据迁移到git仓库
git-svn
git clone svn
svn是一个中心化的版本控制工具,git是分布式的,每个人都可以有完整的代码仓库
#安装svn
yum install subversion -y
mkdir /svn/repo -p
#初始化仓库
svnadmin create /svn/repo
cd /svn/repo/conf
vim svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = /svn/repo
[sasl]
vim passwd
[users]
admin = 123456
vim authz
[/]
admin = rw
test = r
启动svn服务
svnserve -d -r /svn/repo
#svn迁移到git
yum install git-svn -y
git svn clone svn://10.0.0.11 --username=admin --no-metadata --authors-file=password.txt git
cat password.txt
admin=<245684979@qq.com>
11. 忘记gitlab
的root密码
甚至也忘记了邮箱,或许是默认邮箱无法使用
需要在服务器上面直接修改数据
gitlab-rails console production
user = User.where(id: 1).first
user.password = 'secret_pass'
user.password_confirmation = 'secret_pass'
user.save!
如下提示代表成功:
irb(main):004:0> user.save!
Enqueued ActionMailer::DeliveryJob (Job ID: 7dc9cc44-0296-4a62-8b9a-335d4d5da11b) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1
=> true
☆3. 持续部署
3.1 用脚本实现html类型自动化代码上线
脚本需求:
假设1一个集群有5个节点
a:实现一键部署5个节点
b:实现一键回滚到上个版本(秒级回滚) web web_v0.1 web_v0.2
gitlab 拉取代码
本地打包
for 循环
do
scp 目标主机 传输压缩包
从负载均衡上摘下来
ssh 目标主机 解压压缩包, 删除软连接,新建软连接
curl 访问 200
从负载均衡上加回去
done
3.2 准备环境
gitlab 10.0.0.11
lb01负载均衡 10.0.0.5
web01 10.0.0.7
web02 10.0.0.8
#lb01,web01,web02都安装nginx
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install nginx -y
grep -Ev '^$|#' nginx.conf.default > nginx.conf
配置lb01负载均衡
#修改nginx.conf配置文件
[root@lb01 nginx]# vim nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream monitor {
include /etc/nginx/upstream_monitor;
}
server {
listen 80;
server_name www.in365robot.com;
location / {
proxy_pass http://monitor;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
#创建upstream资源池文件
vim /etc/nginx/upstream_monitor
server 10.0.0.7;
server 10.0.0.8;
#检查语法并重启nginx
nginx -t
systemctl restart nginx
systemctl enable nginx
配置web01和web02,文件配置内容相同
vim /etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name in365robot.com;
location / {
root /usr/share/nginx/html/web;
index index.html index.htm;
}
}
}
#检查语法并重启nginx
nginx -t
systemctl restart nginx
systemctl enable nginx
在web01上创建首页并创建软连接
mkdir /usr/share/nginx/html/web_v1
cd /usr/share/nginx/html/
echo 'web01' >/usr/share/nginx/html/web_v1/index.html
ln -s /usr/share/nginx/html/web_v1 /usr/share/nginx/html/web
ls
web web_v1
在web02上创建首页并创建软连接
mkdir /usr/share/nginx/html/web_v1
cd /usr/share/nginx/html/
echo 'web02' >/usr/share/nginx/html/web_v1/index.html
ln -s /usr/share/nginx/html/web_v1 /usr/share/nginx/html/web
ls
web web_v1
在windows上做hosts解析
C:\Windows\System32\drivers\etc\hosts
10.0.0.5 www.in365robot.com
3.3 新建gitlab项目
流程
#在gitlab上
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
mkdir /code
cd /code/
ls
wget http://192.168.37.202/linux59/monitor_html.tar.gz
ls
tar xf monitor_html.tar.gz
cd monitor/
ls
ls .git/
git branch
git log --oneline
[root@k8s-node2 monitor]# mkdir -p /server/scripts
[root@k8s-node2 monitor]# cd /server/scripts/
============================================================
[root@lb scripts]# cat auto_deploy.sh
#!/bin/bash
serverlist="10.0.0.7 10.0.0.8"
#代码更新
fabu() {
cd /code/monitor/ && \
git pull -u origin
version=`git tag|tail -1`
echo $version
tar zcf /code/monitor_${version}.tar.gz *
for ip in $serverlist
do
scp -rp /code/monitor_${version}.tar.gz root@${ip}:/code
ssh root@${ip} "mkdir -p /code/web_${version} &&
tar xf /code/monitor_${version}.tar.gz -C /code/web_${version} && \
rm -fr /code/web && ln -s /code/web_${version} /code/web && rm -fr /code/monitor_${version}.tar.gz "
done
}
huigun() {
cd /code/monitor/
version=`git tag|tail -1`
last_version=`git tag|tail -2|head -1`
for ip in $serverlist
do
ssh root@${ip} "rm -fr /code/web && ln -s /code/web_${last_version} /code/web"
done
}
case $1 in
deploy)
fabu;
;;
rollback)
huigun;
;;
*)
echo '无效的参数';
esac
========================================================
[root@lb ~]# ssh-keygen -t rsa
[root@lb ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsPPhatOoCoYEt/PBoKeC6Kd8Uj+Ll+dD0Bnrw3aiYsL7fWc83bCyp45wub31Wqt7sCcoqxuqwbidk6vlsZyb3CbGKxVcroMln91ASD+bmaYIJkl4KINAqktTzBIIDLRG0GUYRZw9npNq5d0MCc1XLTSmoAWpWpvuwIEpCFJcSYwSlUWkEXWtEFkJX5oWCNJX77iCfCp00JJI7TF59gReUojZ2YcXzxBSNz/lAvcvudcflJvu/rc9nBXMnwtXEYiY/QfXk2I9igqfR1lfU2FnfptJOKHKHHibajkuGVaovMypiBQxm66fHG88z7ZL+05+IDk/+LBj5In/tkYi1VWi5 root@lb
添加秘钥