git、gitlab+jenkens版本控制的安装、升级与灾备_git灾备(1)

为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。

本份面试集锦涵盖了

  • 174 道运维工程师面试题
  • 128道k8s面试题
  • 108道shell脚本面试题
  • 200道Linux面试题
  • 51道docker面试题
  • 35道Jenkis面试题
  • 78道MongoDB面试题
  • 17道ansible面试题
  • 60道dubbo面试题
  • 53道kafka面试
  • 18道mysql面试题
  • 40道nginx面试题
  • 77道redis面试题
  • 28道zookeeper

总计 1000+ 道面试题, 内容 又全含金量又高

  • 174道运维工程师面试题

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


#### Git的工作区、暂存区和版本库的含义


* \*\*工作区:\*\*就是你在电脑里能看到的目录。
* \*\*暂存区:\*\*英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
* \*\*版本库:\*\*工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。



> 
> 工作区、版本库中的暂存区和版本库之间的关系:
> 
> 
> 


![在这里插入图片描述](https://img-blog.csdnimg.cn/20191028165621617.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)


![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NGvQVujG-1572252777313)(C:/Users/guanziqi/AppData/Roaming/Typora/typora-user-images/1572250118110.png)]](https://img-blog.csdnimg.cn/20191028165635565.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)


#### 1.安装和配置 git



#安装git
[root@node1 ~]# yum install git -y

#查看版本
[root@node1 ~]# git --version
git version 1.8.3.1

#git设置用户
[root@node1 ~]# git config --global user.name “douer”
[root@node1 ~]# git config --global user.email “245684979@qq.com”
[root@node1 ~]# git config --global color.ui “true”

#git仓库添加文件
git add filename --将文件添加到暂存区
git add . – 将本地仓库所有的文件添加到暂存区
git commit -m “提交说明” --使用commit将暂存区的文件进行提交到本地的分支,-m 代表本次的提交说明

#查看工作区和缓存区的状态
[root@node1 warehouse]# git status

On branch master

Initial commit

nothing to commit (create/copy files and use “git add” to track)


#### 2. 创建版本库



#创建仓库目录
[root@node1 ~]# mkdir /warehouse
[root@node1 ~]# cd /warehouse/
[root@node1 warehouse]# git init
Initialized empty Git repository in /warehouse/.git/
[root@node1 warehouse]# ls .git/
branches config description HEAD hooks info objects refs


#### 3.git仓库添加文件



git add filename --将文件添加到暂存区
git add . – 将本地仓库所有的文件添加到暂存区
git commit -m “提交说明” --使用commit将暂存区的文件进行提交到本地的分支,-m 代表本次的提交说明

#查看工作区和缓存区的状态
git status

#练习测试
[root@node1 warehouse]# echo 88888 >> file1
[root@node1 warehouse]# git add .
[root@node1 warehouse]# git commit -m ‘add one file’
[master (root-commit) 76dd535] add one file
1 file changed, 1 insertion(+)
create mode 100644 file1


#### 4. git 修改文件名称并提交



git mv file1 file3
git commit -m ‘change file name’



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019102816574248.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)
> 
> 
> 


#### 5. git的文件对比



git diff file1 #本地目录和缓冲去文件对比
git diff --cached file1 #缓冲区文件和仓库文件对比



> 
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191028165828422.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)
> 
> 
> 


#### 6. 实现回退功能



#查看回退版本
git log --oneline

#查看所有历史版本
git reflog --oneline

#回退
git reset --hard <版本ID号>



> 
> ![](https://img-blog.csdnimg.cn/20191028165848574.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)  
>  ![](https://img-blog.csdnimg.cn/20191028165900618.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)
> 
> 
> 


**撤回**



[root@node1 warehouse]# echo 888888 >> file2
[root@node1 warehouse]# git diff file2
diff --git a/file2 b/file2
index c488b79…18fb37c 100644
— a/file2
+++ b/file2
@@ -1,2 +1,3 @@
66666
豆二豆二
+888888
[root@node1 warehouse]# git checkout file2
[root@node1 warehouse]# git diff file2
[root@node1 warehouse]# cat file2
66666
豆二豆二


**撤销修改的文件**



提交到缓冲区的文件撤回
git reset HEAD file2

未add到缓冲区的文件撤回
git checkout – file2


![](https://img-blog.csdnimg.cn/2019102816591732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)


#### 7. git分支管理和策略



> 
> 分支管理的目的就是将当前已经可以发布模块放在一个分支,在另外一个分支进行进一步开发,开发完成后可以进行分支合并。
> 
> 
> 在gitlab上默认的分支是master(主分支),也只有这一个分支,其他分支需要开发人员自行建立。
> 
> 
> 



#查看分支
git branch ----> * master

#增加一个dev新分支
git branch dev01

#删除分支
git branch -d

#切换dev分支
git checkout dev01

#合并分支
git merge master

#在开发分支上合并主分支
git merge master -m ‘注释’

#切回主分支
git checkout master

#在主分支次合并开发分支
git merge dev01 -m ‘注释’


![在这里插入图片描述](https://img-blog.csdnimg.cn/20191028165933816.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)


![](https://img-blog.csdnimg.cn/2019102816594375.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)


**实际开发时,应该按照以下几个原则进行开发**


* 1、master分支应该是非常稳定的,也就是仅用来发布新版本,平时不在上面干活
* 2、开发都在dev分支,也就是说dev分支是不稳定的,到某个时候,比如发布版本的时候,将dev分支合并到master上,在master分支发布版本
* 3、开发者可以在dev分支上开发,每个人都有自己的分支,最后往dev分支合并就可以了
* 4、合并分支的时候,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,可以看出曾经做过合并,而fast forward则看不出来




---


#### 8.git查看提交历史



#查看提交历史版本
git log #详细历史记录
git log --oneline #简洁查看
git log --graph #查看历史中什么时候出现了分支、合并
git log --reverse #逆向显示版本日志
git log --author=douer --oneline -5 #查找指定用户的提交日志并只显示5行
git log --oneline --before={3.weeks.ago} --after={2019-09-28} --no-merges
#查找三周前且在九月二十八日之后的所有提交


#### 9. git标签管理



> 
> 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。我们在发布一个版本的时候,会对应有一个commit, 但是这个commit可能是比较难记的,所以选择了一个记忆简单的方式 tag,例如v1.0 与某个commit绑定。
> 
> 
> 



> 
> 标签就是给commit起一个别名,容易记忆
> 
> 
> 



> 
> 首先,切换到需要打标签的分支上
> 
> 
> 



#给当前版本打标签
git tag v1.2

#给任意版本打标签
git tag -a v1.0 -m ‘注释,优化什么 修复Bug’ <commit的ID>

#删除标签
git tag -d v1.2

[root@node1 warehouse]# git log --oneline
7af745f add file6
45d411e add file5
6f7040f add file4
ff8f205 first
d53b968 add file2
f8d3b95 change file1 name file3
76dd535 add one file
[root@node1 warehouse]# git tag
[root@node1 warehouse]# git tag v1.0
[root@node1 warehouse]# git tag
v1.0
[root@node1 warehouse]# git show v1.0
commit 90092050359637d73142254e6f9e813d2683b788
Author: douer 245684979@qq.com
Date: Mon Oct 28 14:08:07 2019 +0800

file5

diff --git a/file5 b/file5
index 3c2df07…b53bca1 100644
— a/file5
+++ b/file5
@@ -1 +1 @@
-9999
+456456
[root@node1 warehouse]# git tag -a v1.1 -m ‘v1.1 add 机器人’ 76dd535
[root@node1 warehouse]# git tag
v1.0
v1.1
[root@node1 warehouse]# git show v1.1
tag v1.1
Tagger: douer 245684979@qq.com
Date: Mon Oct 28 14:25:25 2019 +0800

v1.1 add 机器人

commit ff8f2058237206f34be4670cc5822d3b70f333b5
Author: douer 245684979@qq.com
Date: Mon Oct 28 13:46:59 2019 +0800

first

diff --git a/file4 b/file4
new file mode 100644
index 0000000…e69de29



> 
> **扩展**  
>  [Git 打补丁-- patch 和 diff 的使用]( )  
>  diff  
>  patch 打补丁,创建补丁,卸载补丁
> 
> 
> 


#### 10. git远程仓库gitee—码云


![在这里插入图片描述](https://img-blog.csdnimg.cn/20191028165957423.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)




---


**git克隆 码云网站复制项目链接**



[root@node1 warehouse]# git clone https://gitee.com/fuhai/jpress.git
Cloning into ‘jpress’…
remote: Enumerating objects: 59006, done.
remote: Counting objects: 100% (59006/59006), done.
remote: Compressing objects: 100% (18822/18822), done.
remote: Total 59006 (delta 24997), reused 55226 (delta 23282)
Receiving objects: 100% (59006/59006), 139.10 MiB | 927.00 KiB/s, done.
Resolving deltas: 100% (24997/24997), done.


![在这里插入图片描述](https://img-blog.csdnimg.cn/20191028170038782.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)



#创建ssh秘钥在码云上进行链接
ssh-keygen -t rsa
cat /root/.ssh/id_rsa.pub
cd /root/demo/
ll
git remote add origin git@gitee.com:linuxcx/linux.git
git push -u origin master


#### 11. git导出代码的方法



#git archieve
git archive --format tar.gz --output “./output.tar.gz” master

* 将master分支打包为output.tar.gz
* --format 指明打包格式,若不指明此项,则根据–output中的文件名推断文件格式。
* --output 指明输出包名

#所以也可以将上述命令简化为:
git archive --output “./output.tar.gz” master

#可以使用"-l"参数获得支持的文件格式列表
[root@node1 warehouse]# git archive -l
tar
tgz
tar.gz
zip

#打包不同的分支或commit

如果想打包不同分支,只要使用不同分支名即可。比如有一个分支名为“dev01”,可以用如下命令将其打包。
git archive --format tar.gz --output “./output.tar.gz” dev01

如果要打包某个commit,只要先使用git log找到相应的commit id, 再使用该commit id打包即可。
git archive --format tar.gz --output “./output.tar.gz” 5ca16ac0d603603

#打包某个目录

如果想打包master下的目录,可以用下面命令
git archive --format tar.gz --output “./output.tar.gz” master

#注意:打包建议在代码库的根目录下进行,不然会碰到各种问题


#### 12. git升级



> 
> 自带的git都是1.8.3.1版本的,比较老了,所以有时候需要升级一下git版本
> 
> 
> 



#测试环境
[root@node1 tools]# git --version
git version 1.8.3.1
[root@node1 tools]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

#安装依赖软件
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc -y
yum install gcc perl-ExtUtils-MakeMaker -y

#卸载低版本git
yum remove git -y

#下载最新版本
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.23.0.tar.xz

#进行编译安装最新版git
[root@node1 warehouse]# cd /usr/local/src/
[root@node1 src]# tar xf /server/tools/git-2.23.0.tar.xz
[root@node1 src]# cd git-2.23.0/
[root@node1 git-2.23.0]# make prefix=/usr/local/git all
[root@node1 git-2.23.0]# make prefix=/usr/local/git install
[root@node1 git-2.23.0]# echo “export PATH=$PATH:/usr/local/git/bin” >> /etc/profile
[root@node1 git-2.23.0]# . /etc/profile

#查看最新版本
[root@node1 git-2.23.0]# git --version
git version 2.23.0




---




---


## ☆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



> 
> ![](https://img-blog.csdnimg.cn/20191028170103247.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)
> 
> 
> 



#设置访问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’] = “”
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

#重新加载配置文件_需要等待一会
gitlab-ctl reconfigure


**浏览器访问域名**  
 http://www.douergitlab.com/  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191028171605973.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)


#### 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,请耐心等待一会,重启的时间较久  
>  ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191029142217301.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/20191029142404316.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)
> 
> 
> 


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


`先创建用户组—>在基于用户组创建项目—>最后创建用户—>编辑用户组—>添加成员—>注意权限`  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191029143233633.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191029144046943.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019102915030783.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)


#### ※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



> 
> 恢复成功![在这里插入图片描述](https://img-blog.csdnimg.cn/20191029161803276.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)
> 
> 
> 


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



> 
> 创建普通用户 李四![](https://img-blog.csdnimg.cn/20191029174609891.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)![](https://img-blog.csdnimg.cn/20191030113056961.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)
> 
> 
> 



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



> 
> ![](https://img-blog.csdnimg.cn/20191029180904393.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)
> 
> 
> 



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



> 
> **刷新网页查看**  
>  ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191030114044484.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)  
>  ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191030114546467.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjQyNTIw,size_16,color_FFFFFF,t_70)
> 
> 
> 


#### 8. gitlab的克隆 clone



> 
> 创建一个新的普通用户 王二  
>  ![](https://img-blog.csdnimg.cn/20191030134828471.png)
> 
> 
> 



#创建一个普通用户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

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

直接修改数据

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


### 最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

### 资料预览

给大家整理的视频资料:

[外链图片转存中...(img-Rk6ddmG8-1715727591318)]

给大家整理的电子书资料:

  

[外链图片转存中...(img-EgB5IU12-1715727591319)]



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618635766)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值