linux学习--week21--分布式版本控制系统Git、gitlab实战

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等安装到电脑上才能使用的工具。
  • 版本控制,类似于毕业论文、写文案、视频剪辑等,需要反复修改和保
    留原历史数据。
  • 分布式
    文件夹拷贝
    本地版本控制
    集中式版本控制
    分布式版本控制


    image.png

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 版本号 #回退到指定的提交版本记录
image.png

image.png

2.5 第四阶段:商城&紧急修复bug

2.5.1 分支

分支可以给使用者提供多个环境的可以,意味着你可以把你的工作从开发
主线上分离开来,以免影响开发主线。

2.5.2 紧急修复bug方案

image.png

2.5.3 分支命令总结

  • 查看分支
git branch
  • 创建分支
git branch 分支名称
  • 切换分支
git checkout 分支名称
  • 分支合并(可能产生冲突)
git merge 要合并的分支
注意:切换分支再合并
  • 删除分支
git branch -d 分支名称

2.5.4 工作流

有了分支后,我们的开发工作流程就可以变成如下方式


image.png

2.6 第五阶段:进军三里屯

有钱之后就要造呀,一个人在三里屯买了一层楼做办公室。


image.png

2.6.1 第一天上班前在家上传代码

首先,需要注册github账号,并创建远程仓库,然后再执行如下命令,将代码上传到github。


image.png
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
image.png

image.png

小总结

  • 添加远程连接(别名)
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 

image
#设置访问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/

image

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,请耐心等待一会,重启的时间较久

image
image

3. gitlab-用户-用户组-项目之间的关系

先创建用户组—>在基于用户组创建项目—>最后创建用户—>编辑用户组—>添加成员—>注意权限

image
image
image

※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/confnginx配置文件
/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

恢复成功

image

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远程仓库的代码。

创建普通用户 李四

image
image
#在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

image
#删除之前的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协议上传了

刷新网页查看

image
image

8. gitlab的克隆 clone

创建一个新的普通用户 王二

image
#创建一个普通用户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版本升级

参考资料1
参考资料2
参考资料3

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

image

3.3 新建gitlab项目

image

流程

image
#在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

添加秘钥

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容