Jenkins+Maven+Sonar

一、持续集成基础理论知识

1. 持续集成CI
1. 集成

在说持续集成前,我们先了解下什么是“集成”。在实际的软件开发中,常常会有如下两种场景:

  1. 现在有一个电商平台需要开发,由于电商平台某块众多,此时就需要不同的开发人员开发不同的某块,晨后将所有人开发好的代码集成到个系统中。集成完毕后需要对其进行部署上线。
  2. 随着时问的推移,该系统无论是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年使用商业BitKeeperLinus花两周编写Git分布式版本控制系统。

2. git实验准备

主机名称eth0、安装epelbase、基础软件包、关闭仿火墙,同步系统时间很重要、更改时区。

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标签

gitcommit,为什么还要引入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的区别

GitlabGitHub相同点:两者都是提供代码托管版务,在很大程度上GitLab是仿GitHub来做的。
GitlabGitHub不同点:最大的不同在于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
# 重启项目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值