一、Git、Github、Gitlab的区别

Git是版本控制系统,Github是在线的基于Git的代码托管服务。 GitHub是2008年由Ruby on Rails编写而成。GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,只有付费账户可以创建私有的代码仓库。 Gitlab解决了这个问题, 可以在上面创建免费的私人repo。

二、Git 介绍

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。


1、Git 与 SVN 区别

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。

Git 与 SVN 区别点:

  • 1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。

  • 2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。

  • 3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。

  • 4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。

  • 5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

2、Git工作流程

git工作流程

  一般工作流程如下:

  • 克隆 Git 资源作为工作目录。

  • 在克隆的资源上添加或修改文件。

  • 如果其他人修改了,你可以更新资源。

  • 在提交前查看修改。

  • 提交修改。

  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

  Git 的工作流程示意图:企业 CI/CD 持续集成/交付/发布(001)_第1张图片

git的工作区、暂存区和版本库

  基本概念:

  • 工作区:就是你在电脑里能看到的目录。

  • 暂存区:英文叫stage, 或index。一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

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

企业 CI/CD 持续集成/交付/发布(001)_第2张图片

图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。

  图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

  图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

  当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

  当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

  当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

  当执行 "git rm --cached " 命令时,会直接从暂存区删除文件,工作区则不做出改变。

  当执行 "git checkout ." 或者 "git checkout -- " 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

  当执行 "git checkout HEAD ." 或者 "git checkout HEAD " 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

三、Git 常用方法

1、 客户端安装 git

1、CentOS7 yum安装 Git

如果你使用的系统是 Centos/RedHat 安装命令为:

yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum -y install git-core

git --version
git version 1.7.1
2、CentOS7源码安装

我们也可以在官网下载源码包来安装,最新源码包下载地址:https://git-scm.com/download

安装指定系统的依赖包:

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

解压安装下载的源码包:

tar -zxf git-1.7.2.2.tar.gz
cd git-1.7.2.2
make prefix=/usr/local all
make prefix=/usr/local install

3、Windows 平台上安装

在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行:

安装包下载地址:https://gitforwindows.org/

企业 CI/CD 持续集成/交付/发布(001)_第3张图片

完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。

在开始菜单里找到"Git"->"Git Bash",会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作。


4、Mac 平台上安装

在 Mac 平台上安装 Git 最容易的当属使用图形化的 Git 安装工具,下载地址为:

http://sourceforge.net/projects/git-osx-installer/

安装界面如下所示:

企业 CI/CD 持续集成/交付/发布(001)_第4张图片

2、Git 配置

Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。

这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。

  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。

  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings$USER。

此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。

3、Git 用户信息

配置个人的用户名称和电子邮件地址:

git config --global user.name "luoyinsheng"
git config --global user.email [email protected]

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

4、文本编辑器

设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::

git config --global core.editor emacs

5、差异分析工具

还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:

git config --global merge.tool vimdiff

Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。

当然,你也可以指定使用自己开发的工具,具体怎么做可以参阅第七章。

6、查看配置信息

要检查已有的配置信息,可以使用 git config --list 命令:

$ git config --list
http.postbuffer=2M
user.name=runoob
[email protected]

有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。

这些配置我们也可以在 ~/.gitconfig/etc/gitconfig 看到,如下所示:

vim ~/.gitconfig

显示内容如下所示:

[http]
   postBuffer = 2M
[user]
   name = git
   email = [email protected]

也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:

$ git config user.name
git

2、客户机连接gitlab的方式

1、ssh链接

客户机上产生公钥上传到gitlab的SSH-Keys里,git clone下载和git push上传都没问题,这种方式很安全

2、http链接(两种方式实现)

(1) 修改代码里的.git/config文件添加登录用户名密码
cd .git
cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://username:password@[email protected]:sauser/ansible.git
[branch "master"]
remote = origin
merge = refs/heads/master
(2) 执行命令设置登录用户和密码
1.cd到根目录,执行git config --global credential.helper store命令
 执行之后会在.gitconfig文件中多添加以下选项
 [credential]        
   helper = store
2.之后cd到项目目录,执行git pull命令,会提示输入账号密码。
 输完这一次以后就不再需要,并且会在根目录生成一个.git-credentials文件
 git pull
 Username for 'http://172.17.0.39:sauser/ansible.git':
 [email protected] Password for 'https://[email protected]@172.17.0.39:sauser/ansible.git':
3.cat .git-credentials
 https://Username:[email protected]
4.之后pull/push代码都不再需要输入账号密码了

3、设定本机用户名,绑定邮箱,让远程服务器知道机器的身份

git config --global user.name "user_name" 
git config --global user.email "[email protected]"

4、本地项目与远程服务器项目之间的交互

1、如果你没有最新的代码,希望从头开始

Create a new repository
git clone [email protected]     // 这里是项目的地址(可从项目主页复制),将远程服务器的内容完全复制过来
cd BGBInspector_V01       // clone 之后进入该项目的文件夹
touch README.md          // 新建readme文件
git add README.md         // 将新的文件添加到git的暂存区
git commit -m ‘Its note:add a readme file’ // 将暂存区的文件提交到某一个版本保存下来,并加上注释
git push -u origin master // 将本地的更改提交到远程服务器

2、如果你已经有一个新版代码,希望直接把本地的代码替换到远程服务器

Existing folder or git repository
cd existing_folder          // 进入代码存在的文件夹,或者直接在该文件夹打开
git bash git init           // 初始化
git remote add origin [email protected]  // 添加远程项目地址(可从项目主页复制)
git add .                   // 添加该文件夹中所有的文件到git的暂存区
git commit -m ‘note’        // 提交所有代码到本机的版本库
git push -u origin master   // 将本地的更改提交到远程服务器
git 中clone过来的时候,git不会对比本地和服务器的文件,也就不会有冲突,
建议确定完全覆盖本地的时候用clone,不确定会不会有冲突的时候用 git pull,将远程服务器的代码download下来

3、常用的git 命令

git init                      //初始化 
git add main.cpp              //将某一个文件添加到暂存区
git add .                     //将文件夹下的所有的文件添加到暂存区
git commit -m ‘note‘          //将暂存区中的文件保存成为某一个版本
git log                       //查看所有的版本日志
git status                    //查看现在暂存区的状况
git diff                      //查看现在文件与上一个提交-commit版本的区别
git reset --hard HEAD^        //回到上一个版本
git reset --hard XXXXX        //XXX为版本编号,回到某一个版本
git pull origin master        //从主分支pull到本地
git push -u origin master     //从本地push到主分支
git pull                      //pull默认主分支
git push                      //push默认主分支 ...

5、版本穿梭

1、版本回退

用git log命令查看:
每一个提交的版本都唯一对应一个commit版本号,
使用git reset命令退到上一个版本:
git reset --hard HEAD^
git reflog                    //查看命令历史,以便确定要回到哪个版本
git reset --hard commit_id    //比如git reset --hard 3628164(不用全部输入,输入前几位即可)

2、git分支管理

1、创建分支
git checkout -b dev     // 创建dev分支,然后切换到dev分支
git checkout            // 命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev git checkout dev
git branch              // 命令查看当前分支,
git branch              // 命令会列出所有分支,当前分支前面会标一个*号
git branch * dev   master
git add readme.txt git commit -m "branch test"  //  在dev分支上正常提交.
2、分支切换:
git checkout master     // 切换回master分支
查看一个readme.txt文件,刚才添加的内容不见了,因为那个提交是在dev分支上,而master分支此刻的提交点并没有变  
3、合并分支
git merge dev           // 把dev分支的工作成果合并到master分支上
git merge               // 命令用于合并指定分支到当前分支。
合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。
git branch -d dev       // 删除dev分支了:
删除后,查看branch,就只剩下master分支了.

3、解决冲突

git checkout -b feature1        //  创建新的feature1分支
修改readme.txt最后一行,改为:
Creating a new branch is quick AND simple.
git add readme.txt             //  在feature1分支上提交
git commit -m "AND simple"
git checkout master            // 切换到master分支
Switched to branch 'master' Your branch is ahead of 'origin/master' by 1 commit.
Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。
在master分支上把readme.txt文件的最后一行改为:
Creating a new branch is quick & simple.
git add readme.txt
git commit -m "& simple"
现在,master分支和feature1分支各自都分别有新的提交
这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:
git merge feature1 Auto-merging readme.txt CONFLICT (content):
Merge conflict in readme.txt Automatic merge failed;
fix conflicts and then commit the result.
readme.txt文件存在冲突,必须手动解决冲突后再提交。
git status 可以显示冲突的文件;
直接查看readme.txt的内容:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD Creating a new branch is quick & simple. ======= Creating a new branch is quick AND simple. >>>>>>> feature1
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改后保存再提交:
git add readme.txt  
git commit -m "conflict fixed"
[master 59bc1cb] conflict fixed
最后,删除feature1分支:
git branch -d feature1 Deleted branch feature1 (was 75a857c).

四、本地 Git 服务器

[root@localhost ~]# useradd git
[root@localhost ~]# passwd git
[root@localhost ~]# mkdir /git-root/
[root@localhost ~]# cd /git-root/
[root@localhost git-root]# git init --bare shell.git
Initialized empty Git repository in /git-root/shell.git/
注意:
git init 和 git init –bare 的区别:
使用--bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面.
用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。
使用”git init –bare”方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误(”This operation must be run in a work tree”)这个就是最好把远端仓库初始化成bare仓库的原因

[root@localhost git-root]# chown -R git:git shell.git
[root@localhost git-root]# su - git
[git@localhost ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/git/.ssh/id_rsa): Created directory '/home/git/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/git/.ssh/id_rsa.
Your public key has been saved in /home/git/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:fWnqJTR7uMvajcOELlrcz/cGxZHtLZbPfo7ROT3in5Q [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|               o |
|              o .|
|             . +.|
|         .   .* o|
|        S.+ +o + |
|     . ....B.  .*|
|      o..o= oo.Eo|
|     .. .*oBo +o*|
|    .. ...X+.+++o|
+----[SHA256]-----+
[git@localhost ~]$
[git@localhost ~]$ cd .ssh/
[git@localhost .ssh]$ cp id_rsa.pub authorized_keys
[git@localhost .ssh]$ vim authorized_key
[git@localhost .ssh]$ logout
[root@localhost git-root]# usermod -s /usr/bin/git-shell git
[root@localhost git-root]# cd
[root@localhost ~]# ssh-copy-id [email protected]
[root@localhost ~]# cd /opt/
[root@localhost opt]#  git clone [email protected]:/git-root/shell.git
Cloning into 'shell'...
The authenticity of host '192.168.1.102 (192.168.1.102)' can't be established.
ECDSA key fingerprint is SHA256:mytNPhHxff0nDGl3LGorCnwAscYkBONVssV44ntQFjw.
ECDSA key fingerprint is MD5:a4:30:b9:1c:35:4a:3b:9c:e5:3d:24:7c:62:26:c7:35.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.102' (ECDSA) to the list of known hosts.
warning: You appear to have cloned an empty repository.
[root@localhost opt]# ls
rh  shell
[root@localhost opt]# cd shell/
[root@localhost shell]# vim test1.sh
[root@localhost shell]# git add test1.sh
[root@localhost shell]# git commit -m 'first commit'
[master (root-commit) 33c5fbf] first commit
1 file changed, 2 insertions(+)
create mode 100644 test1.sh
[root@localhost shell]# git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:/git-root/shell.git
* [new branch]      master -> master
[root@localhost shell]#

五、Github 远程仓库

1、github.com 注册账户

2、在github上创建仓库

3、生成本地ssh key

[root@localhost ~]# ssh-keygen -t rsa -C '[email protected]' # 邮箱要与github上注册的相同
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:RiE6UR1BtzV5avyE2uz6TNPsVHa2D2eHprghrJEkd/g [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|    ..oo=o. o.   |
|     o ..o o...  |
|    o   . .. +   |
|     . o    = .  |
|    . + S  = o  =|
|     + *  . oo.=o|
|      o E ..o B.+|
|       o . =.* +o|
|      .   +++ . .|
+----[SHA256]-----+
[root@localhost ~]#
[root@localhost ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVThfq4brrlsPGtAknVB0TLPx+7Dd3qlxTbSIrUOsGC5Y8JuNqVTlIntZB4oNj8cSQrWvec9CKm0a8o7WwaJIiqpxurz+YpQHP2KbapftKIxsX4hPf/z+p0El1U6arQa35/xmNsq+cJLH/bDdRG+EMDhuCBmjVZOlLj/hEdeIT6s56AnnCkaWoF+sq58KCF7Tk54jRbs/YiyE4SN7FuA70r+07sA/uj0+lmuk4E190KtQUELhjX/E9stivlqiRhxnKvVUqXDywsjfM8Rtvbi4Fg9R8Wt9fpd4QwnWksYUoR5qZJFYXO4hSZrUnSMruPK14xXjDJcFDcP2eHIzKgLD1 [email protected]

4、复制以上的公钥,在github 中添加ssh key

5、测试

[root@localhost ~]# yum install git
........
[root@localhost ~]# ssh -T [email protected]
The authenticity of host 'github.com (13.250.177.223)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,13.250.177.223' (RSA) to the list of known hosts.
Hi meteor! You've successfully authenticated, but GitHub does not provide shell access.
[root@localhost ~]#

8、连接远程仓库听方法(创建一个测试存储库)

企业 CI/CD 持续集成/交付/发布(001)_第5张图片spacer.gif
# 在github网站新建一个仓库,命名为linux
~~~
 cd /opt
 mkdir linux
 cd linux
~~~
# git初始化,然后做第一个基本的git操作(需要在github上创建存储库)
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@github.com:userhub/linux.git
~~~
# 若出现origin已经存在的错误,删除origin
[root@jinch2 linux]# git remote rm origin
# 现在继续执行push到远端
~~~
[root@jinch2 linux]# git remote add origin [email protected]:userhub/linux.git
[root@jinch2 linux]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 205 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:fakehydra/linux-.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
# 注意
# 设置存储库链接
git remote set-url origin git@github.com:userhub/linux.git
# 如果push失败,合并分支到 master 再push
git pull --rebase origin master

六、Gitlab Server 部署

1、环境准备

1.系统版本:CentOS7.4 
2.Gitlab版本:gitlab-ee 11.0.1
3.初始化系统环境 
4.关闭防火墙 
[root@localhost ~]# systemctl stop iptables firewalld 
[root@localhost ~]# systemctl disable iptables firewalld 
5.开启邮件服务 
[root@vm1 ~]# systemctl start postfix 
[root@vm1 ~]# systemctl enable postfix 
6.关闭SELinux
 [root@localhost ~]#  sed -ri '/SELINUX=/cSELINUX=disabled' /etc/selinux/config
 [root@localhost ~]#  setenforce 0           # 临时关闭SELinux [root@localhost ~]#  reboot

2、部署Gitlab


1.安装Gitlab社区版/企业版
2.安装gitlab依赖包
[root@localhost ~]# yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python
# gitlab-ce 10.x.x以后的版本需要依赖policycoreutils-python

3.开启postfix,并设置开机自启
[root@localhost ~]# systemctl start postfix;systemctl enable postfix

4.选择添加yum源安装gitlab(根据需求配置源)
(1)添加阿里源
# vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
Repo_gpgcheck=0
Enabled=1
Gpgkey=https://packages.gitlab.com/gpg.key

(2) 添加清华源
# vim gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

# vim gitlab-ee.repo
[gitlab-ee]
name=Gitlab EE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el$releasever/
gpgcheck=0
enabled=1

# vim runner_gitlab-ci-multi-runner.repo
[runner_gitlab-ci-multi-runner]
name=runner_gitlab-ci-multi-runner
baseurl=https://packages.gitlab.com/runner/gitlab-ci-multi-runner/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/runner/gitlab-ci-multi-runner/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[runner_gitlab-ci-multi-runner-source]
name=runner_gitlab-ci-multi-runner-source
baseurl=https://packages.gitlab.com/runner/gitlab-ci-multi-runner/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/runner/gitlab-ci-multi-runner/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

(3) 添加官方源
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

5.安装包下载
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el7/

6.根据需要选择ce/ee
[root@localhost ~]# yum -y install gitlab-ce                    # 自动安装最新版
[root@localhost ~]# yum -y install gitlab-ce-x.x.x # 安装指定版本Gitlab

[root@localhost ~]# yum -y install gitlab-ce

warning: gitlab-ce-10.7.2-ce.0.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID f27eab47: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
  1:gitlab-ce-10.7.2-ce.0.el7        ################################# [100%]
It looks like GitLab has not been configured yet; skipping the upgrade script.

      *.                  *.
     ***                 ***
    *****               *****
   .******             *******
   ********            ********
  ,,,,,,,,,***********,,,,,,,,,
 ,,,,,,,,,,,*********,,,,,,,,,,,
 .,,,,,,,,,,,*******,,,,,,,,,,,,
     ,,,,,,,,,*****,,,,,,,,,.
        ,,,,,,,****,,,,,,
           .,,,***,,,,
               ,*,.
 


    _______ __  __          __
   / ____(_) /_/ /   ____ _/ /_
  / / __/ / __/ /   / __ `/ __ \
 / /_/ / / /_/ /___/ /_/ / /_/ /
 \____/_/\__/_____/\__,_/_.___/
 

Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
 sudo gitlab-ctl reconfigure

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

7、Gitlab 发送邮件测试

[root@vm1 ~]# gitlab-rails console 
Loading production environment (Rails 4.2.10)
irb(main):001:0>  Notify.test_email('[email protected]', 'Message Subject', 'Message Body').deliver_now

Notify#test_email: processed outbound mail in 2219.5ms

Sent mail to [email protected] (2469.5ms)
Date: Fri, 04 May 2018 15:50:10 +0800
From: Admin
Reply-To: Admin
To: [email protected]
Message-ID: <[email protected]>
Subject: Message Subject
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8tt
Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated
X-Auto-Response-Suppress: All

"-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

Message Body



=> #, >, >, , >, , , , , , >
irb(main):002:0>quit

3、gitlab的使用

在浏览器中输入 http://192.168.60.119/ ,然后 change password:  ,并使用root用户登录 即可 (后续动作根据提示操作)

1、gitlab 命令行修改密码

gitlab-rails console production irb(main):001:0>user = User.where(id: 1).first      # id为1的是超级管理员 irb(main):002:0>user.password = 'yourpassword'      # 密码必须至少8个字符 irb(main):003:0>user.save!                          # 如没有问题 返回true exit  # 退出

2、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-ctl tail                         # 查看日志;

3、登陆 Gitlab

企业 CI/CD 持续集成/交付/发布(001)_第6张图片

如果需要手工修改nginx的port ,可以在gitlab.rb中设置 nginx['listen_port'] = 8000 ,然后再次 gitlab-ctl reconfigure即可

登录 gitlab 如下所示(首次登陆设置 root 密码):

企业 CI/CD 持续集成/交付/发布(001)_第7张图片