Jenkins+Maven+Sonar
- 一、持续集成基础理论知识
- 1. 持续集成CI
- 1. 集成
- 2. 持续集成
- 3. 持续集成带来的好处
- 4. 持续集成的目的
- 5. 什么情况下需要使用持续集成
- 2. 持续交付
- 3. 持续部署
- 4. 持续集成实施流程
- 二、分布式版本控制系统实践
- 1. 版本控制系统概述
- 1. 版本控制系统 version control system
- 2. 传统版本控制与现在版本控制
- 3. 版本控制系统解决的问题
- 4. 常见版本控制系统
- 5. 集中式版本控制系统工具SVN
- 6. 分布式版本控制系统工具Git
- 2. Git基本概述
- 1. git基本简介
- 2. git实验准备
- 3. git安装配置
- 3. Git基本命令
- 1. 实战一、git提交目录文件至本仓库
- 2. 实战二、git将文件改名并至新提交到本地仓库
- 3. 实战三、比对本地工作目录文件内容、暂存区文件内容、本地仓库文件内容之间的差异
- 4. 实战四、如何理解 git commit 提交操作
- 5. 实战五、git commit保存了状态后,回退
- 4. git分支管理
- 1. 分支
- 2. 分支在实际软件开发中的作用
- 3. 如何创建分支,又如何合并分支
- 4. 分支合并时处理冲突
- 5. git标签
- 1. git标签的作用
- 2. 为什么要使用git标签
- 3. git标签基本使用
- 6. 远程仓库
- 三、Gitlab版本控制系统实战
- 1. Gitlab版本库基本概述
- 1. Gitlab
- 2. Gitlab与GitHub的区别
- 3. Gitlab的优势和应用场景
- 2. Gitlab服务组成
- 3. Gitlab安装配置
- 4. Gitlib中文汉化
- 5. Gitlab日常使用
一、持续集成基础理论知识
1. 持续集成CI
1. 集成
在说持续集成前,我们先了解下什么是“集成”。在实际的软件开发中,常常会有如下两种场景:
- 现在有一个电商平台需要开发,由于电商平台某块众多,此时就需要不同的开发人员开发不同的某块,晨后将所有人开发好的代码集成到个系统中。集成完毕后需要对其进行部署上线。
- 随着时问的推移,该系统无论是
bug
修复、还是新功能开发,后续都需要对系统进行不断的更新迭代。
2. 持续集成
持续集成指的是,频繁地(一天多次)将代码集成到主干。(PS
:虽复如上集成工作。)
3. 持续集成带来的好处
- 快速发现误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
- 节省人力成本。
- 加快软件开发进度。
- 实时交付。
- 防分支大幅偏离主干。如果不经常集成,主干又在不断更新,会导致以后集成难度变大,或难以集成。
4. 持续集成的目的
边产品可以快速送代,同的还能保持高质量。
它的核心措施是,代码集成到干之前,先进行自动化测试。只要有一个测试用例失败,就不能集成,当然持续集成并不能完全的消除Bug
,而是让它们非常容易发现和改正。
5. 什么情况下需要使用持续集成
如果项目开发的规模比较小,软件集成不是问题。
但是如果项目很大,需要不新添加新功能,或不断的升级产品、则需要进行反复集成,这个时候就需要用到持续集成来简化我们的工作。
2. 持续交付
持续交付指的是在持续集成的环境础之上,将代码部到预生产环境。
持续交付:代码开发->
单元测试->
合并代码->
测试->
手动->
部署到生产环境。
3. 持续部署
持续部署是持续交付的下步,指代码在任何的刻都是可部部署的,最后将部署到产环境的过程自动化。
持续部署和持续交付的区别就是最终部署到生产环境是自 动化的。
持续部署:代码开发->
单元测试->
合并代码->
测试->
自动->
部署到生产。
4. 持续集成实施流程
根据持续集成的设计,代码从提交到生产,整个过程有以下几步:
二、分布式版本控制系统实践
1. 版本控制系统概述
1. 版本控制系统 version control system
将每次文件的变化,集中在一个系统中加以版本记录,以便后续查阅特定文件版本的历史记录的系统。
企业真实案例:产品要求开发a
功能,之后项目又需要修改为b
功能,开发完之后又要改c
功能,最后又说还是用a
功能。没有版本控系统之前,操作起来非常的麻烦。
2. 传统版本控制与现在版本控制
如果使用传统的版本控制是什么样子的?
现在的版本控制系统又是如何管理的?能对比版本之间的区别,同的还能实现快速回退功能。
3. 版本控制系统解决的问题
- 追溯文件历史变更。
- 多人团队协同开发。
- 代码集中统一管理。
4. 常见版本控制系统
常见的版本控制系统分为两种:svn
为集中版本控制系统的代表,git
为分布式版本控制系统的代表。
5. 集中式版本控制系统工具SVN
集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库故障,所有的使用者都无法使用SVN,因为每次进行版本控制工作都需要与远程务器建立通信,否则无法工作。
6. 分布式版本控制系统工具Git
相对于集中版本控制系统,分式式版本控制系统会将远程代码仓库完整镜像下来后,进行本地离线版本控制,每一次的提交都不依赖远程版务器,待有网络时再与远程仓库进行版本同步。
简单理解:SVN
依敕网络、Git
不依赖网络。
2. Git基本概述
1. git基本简介
Linus
在1991年创建了开源的linux
,从此,Linux
系统不断发展,已经成最大的版务器系统软件了。Linus
虽然创建linux
,但linux
的壮大是靠全世界热心的志愿青参与的,这么多人在世界各地为linus编写代码,那linux
的代码是如何管理的呢?
2002年前diff
纯手动、2005年使用商业BitKeeper
、Linus
花两周编写Git
分布式版本控制系统。
2. git实验准备
主机名称eth0
、安装epel
、base
、基础软件包、关闭仿火墙,同步系统时间很重要、更改时区。
3. git安装配置
- 安装
git
非常简单,只需一条命令即可。
[root@iz2ze0j4s19xhxuqg75l0zz ~]# yum install git -y
Loaded plugins: fastestmirror, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Loading mirror speeds from cached hostfile
base | 3.6 kB 00:00:00
docker-ce-stable | 3.5 kB 00:00:00
...
# 查看版本
[root@iz2ze0j4s19xhxuqg75l0zz ~]# git --version
git version 1.8.3.1
- 通常配置
git
,只需要配置你是谁,你的箱是什么。这样就知道是谁提交了什么的内容。
[root@iz2ze0j4s19xhxuqg75l0zz ~]# git config --global user.name "名字"
[root@iz2ze0j4s19xhxuqg75l0zz ~]# git config --global user.email "邮箱"
[root@iz2ze0j4s19xhxuqg75l0zz ~]# git config --global color.ui true
[root@iz2ze0j4s19xhxuqg75l0zz ~]# ls -a
. .bash_logout .cshrc nginx .pki .tcshrc
.. .bash_profile .docker .npm .pydistutils.cfg .viminfo
aaa .bashrc .gitconfig .oracle_jre_usage .rediscli_history .viminfo.tmp
.bash_history .cache .mysql_history .pip .ssh
[root@iz2ze0j4s19xhxuqg75l0zz ~]# cat .gitconfig
[user]
name = 名字
email = 邮箱
[color]
ui = true
3. Git基本命令
1. 实战一、git提交目录文件至本仓库
- 首先创建
git
版本库,这个目录里面的所有文件都可以被git
管理起来,每个文件的修改、删除,git
都能跟踪,以便任何时刻可以追踪历史,或者将来某个时刻可以“还原”。
# 创建git工作目录
[root@iz2ze0j4s19xhxuqg75l0zz ~]# mkdir git
[root@iz2ze0j4s19xhxuqg75l0zz ~]# cd git
[root@iz2ze0j4s19xhxuqg75l0zz git]# mkdir demo
[root@iz2ze0j4s19xhxuqg75l0zz git]# cd demo
# 初始化该目录为git仓库
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git init
Initialized empty Git repository in /root/git/demo/.git/
# 查看git状态
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
- 在
git
仓库目录中新增几个文件。
[root@iz2ze0j4s19xhxuqg75l0zz demo]# touch file1 file2 file3
# 查看状态
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# file1
# file2
# file3
nothing added to commit but untracked files present (use "git add" to track)
- 使用
git add .
将本地又件提交至暂存区。
# 也可以使用git add file 添加单个文件到暂存区
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git add .
# 再次查看状态
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: file1
# new file: file2
# new file: file3
- 最后将暂存内容提交到本地仓库,只有
git commit
提交后,git
才会对该文件进行版本的管理。
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git commit -m "添加文件file1 file2 file3"
[master (root-commit) 9845429] 添加文件file1 file2 file3
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file1
create mode 100644 file2
create mode 100644 file3
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
nothing to commit, working directory clean
2. 实战二、git将文件改名并至新提交到本地仓库
- 修改本地
file1
文件为file4
。
[root@iz2ze0j4s19xhxuqg75l0zz demo]# mv file1 file4
[root@iz2ze0j4s19xhxuqg75l0zz demo]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 24 13:16 file2
-rw-r--r-- 1 root root 0 Nov 24 13:16 file3
-rw-r--r-- 1 root root 0 Nov 24 13:16 file4
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: file1
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# file4
no changes added to commit (use "git add" and/or "git commit -a")
- 移除本地仓库中的
file1
,然后将新添加的file4
添加到暂存区。
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git rm file1
rm 'file1'
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git add file4
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: file1 -> file4
#
- 最后将暂存区内容提交到本地仓库。
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git commit -m "修改file1为file4"
[master c8b30bc] 修改file1为file4
1 file changed, 0 insertions(+), 0 deletions(-)
rename file1 => file4 (100%)
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
nothing to commit, working directory clean
- 如上的方法非常的麻烦,那么
git
提供了简单改名的方法,使用git mv
即可。
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git mv file4 file1
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: file4 -> file1
#
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git commit -m "修改file4为file1"
[master b8b0335] 修改file4为file1
1 file changed, 0 insertions(+), 0 deletions(-)
rename file4 => file1 (100%)
3. 实战三、比对本地工作目录文件内容、暂存区文件内容、本地仓库文件内容之间的差异
- 本地
file1
内容与暂存区file1
内容比较之问差异。
# 给file1新增点儿内容
[root@iz2ze0j4s19xhxuqg75l0zz demo]# echo "canying" >> file1
# 本地file1内容与暂存区file1内容进行比较
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git diff file1
diff --git a/file1 b/file1
index e69de29..6049a7d 100644
--- a/file1 #表示变动前的版本
+++ b/file1 #表示变动后的版本
@@ -0,0 +1 @@
+canying
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git add .
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git diff file1
- 暂存区
file1
内容与本地仓库file1
内容比较之间差异。
# 本地文件已经提交至暂存区,所以比较不会有任何差异
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git diff file1
#暂存区与本地仓库比较会存在差异
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git diff --cached file1
diff --git a/file1 b/file1
index e69de29..6049a7d 100644
--- a/file1
+++ b/file1
@@ -0,0 +1 @@
+canying
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git commit -m "new file1"
[master 7bc9f90] new file1
1 file changed, 1 insertion(+)
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git diff --cached file1
4. 实战四、如何理解 git commit 提交操作
我们可以将
git commt
操作与虚拟机的快照对比?简单来说就是每次commit
,相对于对文件做了次快照?
FQ:我们知道commit
相当于对文件快照,那我们如何得知该文件快照了多少次,都修改了哪些内容呢?
# 查看历史的git commit快照操作
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git log
commit 7bc9f90e526593ee82ffeb3986d0d56f1dc95884
Author: 名字 <邮箱>
Date: Tue Nov 24 14:21:44 2020 +0800
new file1
# 简单显示commit信息
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git log --oneline
7bc9f90 new file1
b8b0335 修改file4为file1
c8b30bc 修改file1为file4“
9845429 添加文件file1 file2 file3
# 显示最近一次提交
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git log -1
# 显示最近两次提交
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git log -2
5. 实战五、git commit保存了状态后,回退
如果是使用的虚拟机,直接找到要回退的快照位置点击转到即可实现,那git又是如何实现快速回功能的?
- 如果本地工作目录修改文件错误想回退怎么办?
# 误操作清空了本地file1文件
[root@iz2ze0j4s19xhxuqg75l0zz demo]# >file1
# 此时检查状态
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: file1
#
no changes added to commit (use "git add" and/or "git commit -a")
# 通过git status 提示状态进行回退
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git checkout file1
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
nothing to commit, working directory clean
# 检查文件是否恢复
[root@iz2ze0j4s19xhxuqg75l0zz demo]# cat file1
canying
- 如果文件丛本地目录提交到暂存区后,想回退怎么办?
# 误操作清空文件file1 并提交至缓存区
[root@iz2ze0j4s19xhxuqg75l0zz demo]# >file1
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git add .
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: file1
#
[root@iz2ze0j4s19xhxuqg75l0zz demo]# cat file1
# 通过提示可以使用 git reset HEAD fiLe将提交的内容撤出暂存区
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git reset HEAD file1
Unstaged changes after reset:
M file1
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: file1
#
no changes added to commit (use "git add" and/or "git commit -a")
# 再通过暂存区覆盖本地工作目录,即完成回退
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git checkout -- file1
[root@iz2ze0j4s19xhxuqg75l0zz demo]# cat file1
canying
- 如果提交多次内容至本地仓库,想回退怎么办?
# 模拟第一次提交
[root@iz2ze0j4s19xhxuqg75l0zz demo]# echo "oldbody" >>file1
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git add .
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git commit -m "新增file1文件-->oldbody"
[master 20b8d5c] 新增file1文件-->oldbody
1 file changed, 1 insertion(+)
#模拟第二次提交
[root@iz2ze0j4s19xhxuqg75l0zz demo]# echo "oldqiang" >>file1
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git add .
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git commit -m "新增file1文件-->oldqiang"
[master 9033816] 新增file1文件-->oldqiang
1 file changed, 1 insertion(+)
# 此时想回到最初的状态
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git log --oneline
9033816 新增file1文件-->oldqiang
20b8d5c 新增file1文件-->oldbody
7bc9f90 new file1
b8b0335 修改file4为file1
c8b30bc 修改file1为file4“
9845429 添加文件file1 file2 file3
# 找到想回退版本的commitID,然后进行撤回
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git reset --hard 7bc9f90
HEAD is now at 7bc9f90 new file1
# 此时想回到oldqiang那个版本
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git log --oneline
7bc9f90 new file1
b8b0335 修改file4为file1
c8b30bc 修改file1为file4“
9845429 添加文件file1 file2 file3
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git reflog
7bc9f90 HEAD@{0}: reset: moving to 7bc9f90
9033816 HEAD@{1}: commit: 新增file1文件-->oldqiang
20b8d5c HEAD@{2}: commit: 新增file1文件-->oldbody
7bc9f90 HEAD@{3}: commit: new file1
b8b0335 HEAD@{4}: commit: 修改file4为file1
c8b30bc HEAD@{5}: commit: 修改file1为file4“
9845429 HEAD@{6}: commit (initial): 添加文件file1 file2 file3
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git reset --hard 9033816
HEAD is now at 9033816 新增file1文件-->oldqiang
4. git分支管理
1. 分支
2. 分支在实际软件开发中的作用
假设你准备开发一个手机拍照功能,但是需要两周才能完成,第一周你写了50%的代码,如果立提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险,现在有了分支,就不用担心了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
3. 如何创建分支,又如何合并分支
- 创建分支。
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git branch devops
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git branch
devops
* master
- 切换分支。
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git checkout devops
Switched to branch 'devops'
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git branch
* devops
master
[root@iz2ze0j4s19xhxuqg75l0zz demo]# ls
file1 file2 file3
- 在
dev
分支添加新功能,然后提交至本地仓库。
[root@iz2ze0j4s19xhxuqg75l0zz demo]# touch file7
[root@iz2ze0j4s19xhxuqg75l0zz demo]# touch file8
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git add .
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git commit -m "new file7-8"
[devops 06482f4] new file7-8
5 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file4
create mode 100644 file5
create mode 100644 file6
create mode 100644 file7
create mode 100644 file8
- 合并分支,基于
dev
分支,将master
分支的内容合并至dev
分支上,在dev
上进行测试功能。
# 主分支新家内容
[root@iz2ze0j4s19xhxuqg75l0zz demo]# touch file9 file10
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git add .
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git commit -m "new file9-10"
[master b325b93] new file9-10
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file10
create mode 100644 file9
#devops分支合并主分支内容
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git merge master -m "devops合并master内容"
Merge made by the 'recursive' strategy.
file10 | 0
file9 | 0
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file10
create mode 100644 file9
#主分支合并devops
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git merge devops
- 删除分支。
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git branch devops --d
Deleted branch devops (was 4b5416c).
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git branch
* master
4. 分支合并时处理冲突
5. git标签
1. git标签的作用
当git
仓库内的数据有改善或者功能更新时,我们经常会打一个类似于软件版本号的标签tag,这样通过标签就可以将版本库中的某个版本给记灵下来,便于我们后续将特定时期的数据取出来用。简单来说:标签也是版本库的一个快照。
2. 为什么要使用git标签
git
有 commit
,为什么还要引入tag
?
“请把上周一的那个版本打包发,commit
号是6a5819e...
”,“一乱七八槽的数字不好找!”
如果换一个力法:
“请把上周的那个版本打包发布,版本号是v1.2
。按照tag v1.2
查找commit
就行!
所以,tag
就是一个让人容易记住的名字,它跟某个commit
绑在一起。
3. git标签基本使用
- 对当前最新提交的代码创建标签,
-a
标签名称,-m
标签描述。
# 将当前最新代码进行标签
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git tag -a "v1.0" -m "项目刚刚发布"
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git tag
v1.0
# 创建标签指定commitID
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git tag -a "v1.1" b325b93 -m "合并主分支后的内容"
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git tag
v1.0
v1.1
- 查看具体标签。
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git log -l
fatal: Option 'l' requires a value
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git show v1.0
tag v1.0
Tagger: 姓名 <邮箱>
Date: Tue Nov 24 16:52:49 2020 +0800
项目刚刚发布
...
- 删除标签
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git tag -d v1.1
Deleted tag 'v1.1' (was be3f8d2)
[root@iz2ze0j4s19xhxuqg75l0zz demo]# git tag
v1.0
6. 远程仓库
# 关联(添加)远程仓库
git remote add origin https://gitee.com/canying6/aliyun-test.git
# 将本地仓库添加到远程仓库
git add .
git commit -m "new file"
git push -u origin master
# 删除远程仓库
git remote remove origin (origin是逻辑删除)
# 新人拉取远程项目
git clone https://gitee.com/canying6/aliyun-test.git
# 更新项目;
git pull origin master
# linux生成密钥对
[root@iz2ze0j4s19xhxuqg75l0zz demo]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:A0cyr4yOP9hqiU+6nzwlsSpt0m+XupSHP2h+sLQc8bc root@iz2ze0j4s19xhxuqg75l0zz
The key's randomart image is:
+---[RSA 2048]----+
| o . |
| = |
| . o |
| . .o + |
| o.oo S |
| oo=o. .. |
| =oO=*.o . |
|=+O+Xo= E |
|+B*B**.. |
+----[SHA256]-----+
[root@iz2ze0j4s19xhxuqg75l0zz demo]#
[root@iz2ze0j4s19xhxuqg75l0zz demo]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDj8loJQI4ZNoen/iFKYf7Ce59WbtzamukCJcZwXOPpbREz5zP0pfyCTBbAl3BJmDZeGnLXkvE/MxaDEVrC4FyU6wZDiV0bbjjFKMTGoyAxBcfr+2Y50rBSy8+nXjxbtIImrTyiAhPVvSWmn/8WMQScEJpGdrYoPZZSzH5WxcwrJYv5b0x3eZnQ6B8la0TjmqBBAuWjcApn7GeRyPcPfqUtTikiDf9fIGyf7Vel8XGN5FvhA4qtv+tAPr3YGr4P38+CyRHwoT5iC+5qcEoQ1enQbCcmf2AJURIYtgPl+S1AeDEdxTqyHWtnUUG9BiqSkkvEep04IkswdY4nWv5V3OpP root@iz2ze0j4s19xhxuqg75l0zz
三、Gitlab版本控制系统实战
1. Gitlab版本库基本概述
1. Gitlab
Gitlab
是一个开源分布式的版本控制系统。Ruby语言开发完成。Gitlab
主要实现的功能、管理项目源代码、对源代码进行版本控制、以及代码复用与查找。
2. Gitlab与GitHub的区别
Gitlab
与GitHub
相同点:两者都是提供代码托管版务,在很大程度上GitLab
是仿GitHub
来做的。Gitlab
与GitHub
不同点:最大的不同在于GitHub
创建私有仓库收费、Gitlab
创建私有仓库免费。PS
:从代码私有性方面来看,公司不希望员工获取到全部的代码,这个时候Gitlab
无疑是最佳的选择。但对于开源项目而言, GitHub
依然是代码托管的首选平台。
3. Gitlab的优势和应用场景
- 开源免费,搭建简单、维护成本较低、适合中小型公司。
- 权限管理,实现代码对部分可见,确保项目的安全性。
- 离线同步,保证我们不在实时依赖网络的环境进行代码提交。
2. Gitlab服务组成
3. Gitlab安装配置
- 环境准备。
# 安装依赖
sudo yum install -y curl policycoreutils-python openssh-server postfix
# 启动SSH和postfix
sudo systemctl enable sshd
sudo systemctl start sshd
sudo systemctl enable postfix
sudo systemctl start postfix
# 开放端口
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload
yum
安装Gitlib
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install -y gitlab-ce
- 配置
Gitlab
服务,访问域名及邮箱
[root@iz2ze0j4s19xhxuqg75l0zz git]# vim /etc/gitlab/gitlab.rb
external_url 'http://gitlab.canying.com'
# 配置邮箱
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
##! If your SMTP server does not like the default 'From: gitlab@gitlab.example.com'
##! can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = '248919076@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'canying-gitlab'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "248919076@qq.com"
gitlab_rails['smtp_password'] = "qq邮箱授权码"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
#关闭(内存小)
prometheus['enable'] = false
- 初始化
Gitlab
服务器,启动Gitlab
服务器
# 初始化Gitlab服务器
[root@iz2ze0j4s19xhxuqg75l0zz git]# gitlab-ctl reconfigure
#启动
[root@iz2ze0j4s19xhxuqg75l0zz git]# gitlab-ctl start |stop| restart | status
# 每次修改 /etc/gitlab/gitlab.rb 都需要 reconfigure
# 查看gitlab的版本
[root@localhost gitlab]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
13.6.1
[root@localhost gitlab]#
4. Gitlib中文汉化
- 使用
git
下载汉化补丁要对版本(测试失败)
# 解压
[root@localhost gitlabhanhuabao]# tar -zxvf gitlab-12-3-stable-zh.tar.gz
# 停止gitlab
[root@localhost gitlab]# gitlab-clt stop
#拷贝补丁
[root@localhost gitlabhanhuabao]# \cp -r gitlab-12-3-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails
# 重启gitlab
[root@localhost opt]# gitlib-clt start
# 卸载gitlab
rpm -e gitlab-ce
# 查看gitlab进程(并杀死第一个进程,不用管日志)
ps aux | grep gitlab
# 删除所有包含gitlab文件
find / -name gitlab | xargs rm -rf
#没权限就
rm -rf /opt/gitlab
rm -rf /etc/gitlab
rm -rf /var/log/gitlab
5. Gitlab日常使用
# 备份
[root@localhost gitlab]# vim /etc/gitlab/gitlab.rb
...
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" #自定义备份路径
gitlab_rails['backup_keep_time'] = 604800 #备份保留七天
...
[root@localhost gitlab]# gitlab-rake gitlab:backup:create
2020-11-27 16:41:24 +0800 -- Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... [DONE]
2020-11-27 16:41:27 +0800 -- done
...
[root@localhost ~]# cd /var/opt/gitlab/backups
[root@localhost backups]# ll
总用量 140
-rw-------. 1 git git 143360 11月 27 16:41 1606466488_2020_11_27_12.0.3_gitlab_backup.tar
# 每天凌晨两点自动备份
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l
00 02 * * * gitlab-rake gitlab:backup:create &>/dev/null
# 备份恢复
[root@localhost ~]# gitlab-ctl stop sidekiq
[root@localhost ~]# gitlab-ctl stop unicorn
[root@localhost ~]# gitlab-rake gitlab:backup:restore BACKUP=1606466488_2020_11_27_12.0.3
# 重启项目