GitLab 部署

GitLab概述

衆所周知,提供Git項目倉庫託管服務的是業界有名的GitHub,可是你要將代碼上傳到GitHub裏,並且要將項目設置爲私有那就得收費。而GitLab就是爲了提供免費的項目倉庫託管服務而誕生(社區版免費,企業版須要訂閱)。html

GitLab是利用Ruby on Rails語言編寫的 一個開源的版本管理系統,後來一部分用Go語言重寫,它能實現一個自託管的Git項目倉庫,可經過Web界面進行訪問公開的或者私人項目。與 Github 相似,GitLab 可以瀏覽源代碼,管理缺陷和註釋。node

能夠管理團隊對倉庫的訪問,它很是易於瀏覽提交過的版本並提供一個文件歷史庫。團隊成員能夠利用內置的簡單聊 天程序(Wall)進行交流。 它還提供一個代碼片斷收集功能能夠輕鬆實現代碼複用,便於往後有須要的時候進行查 找。python

官網:https://about.gitlab.com/
國內鏡像:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/linux

GitLab安裝

GitLab提供了兩種方式安裝:nginx

  • 使用官方打包好的rpm包,該方式簡單快捷,也不容易出問題
  • 手動安裝,把代碼下載下來,而後安裝各類環境,例如:數據庫、nginx、編譯環境等,一步一步安裝起來就很麻煩也費時間,還容易出問題

環境規劃git

主機名 IP地址 說明
git01-21 10.4.7.21 Gitlab
git02-22 10.4.7.22 Gitlab同步倉庫

操做系統:centos7.4
內存:實驗環境至少 2G,生產建議 4G 以上
磁盤:至少 50G,根據生產實際倉庫大小進行配置
安全:關閉防火牆、selinuxgithub

1.安裝GitLab依賴包web

[root@git01-21 ~]# yum install -y curl policycoreutils openssh-server \
                                     openssh-clients policycoreutils-python

特別是:若是不安裝依賴包的話,在使用rpm安裝github會報錯redis

2.獲取Gitlab安裝包並安裝sql

//1.經過wget下載gitlab rpm安裝包
[root@git01-21 ~]# mkdir /opt/src && cd /opt/src
[root@Git src]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

//2.下載完成後,使用rpm安裝
[root@Git src]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

3.配置GitLab

Gitlab的默認配置文件路徑爲:/etc/gitlab/gitlab.rb

[root@git01-21 ~]# vim /etc/gitlab/gitlab.rb
# 對外公開訪問地址(IP/域名)
external_url 'http://10.4.7.21'

# 數據目錄
git_data_dirs({
  "default" => {
     "path" => "/data/gitlab/data"
    }
})

建立數據目錄

[root@git01-21 ~]# mkdir -p /data/gitlab/data

4.從新配置gitlab

// 修改完主配置文件後,使用 gitlab-ctl reconfigure 從新配置 gitlab
[root@git01-21 ~]# gitlab-ctl reconfigure

需等待數分鐘才能完成

GitLab 主要目錄:

/data/gitlab/data/repositories # 倉庫存儲目錄
/opt/gitlab              # GitLab應用代碼和相應的依賴程序 
/var/opt/gitlab          # gitlab-ctl reconfigure 命令編譯後的應用數據和配置文件,不須要人爲修改配置 
/etc/gitlab              # 配置文件目錄 
/var/log/gitlab          # 此目錄下存放了GitLab各個組件產生的日誌 
/var/opt/gitlab/backups/ # 備份文件生成的目錄

每次修改了GitLab的主配置文件,都須要執行gitlab-ctl reconfigure

5.啓動GitLab

// 從新配置執行成功後,就能夠啓動 Gitlab,
[root@git01-21 ~]#  gitlab-ctl start
ok: run: gitaly: (pid 2919) 189s
ok: run: gitlab-monitor: (pid 2935) 189s
ok: run: gitlab-workhorse: (pid 2905) 190s
ok: run: logrotate: (pid 2611) 221s
ok: run: nginx: (pid 2591) 227s
ok: run: node-exporter: (pid 2756) 213s
ok: run: postgres-exporter: (pid 2966) 188s
ok: run: postgresql: (pid 2355) 268s
ok: run: prometheus: (pid 2952) 188s
ok: run: redis: (pid 2295) 274s
ok: run: redis-exporter: (pid 2788) 209s
ok: run: sidekiq: (pid 2558) 235s
ok: run: unicorn: (pid 2520) 237s

// 查看各組件狀態
[root@git01-21 ~]# gitlab-ctl status

GitLab 由主要由如下服務構成,他們共同承擔了 Gitlab 的運做須要

  • Nginx:靜態web服務器。
  • gitlab-shell:用於處理Git命令和修改
  • authorized keys 列表。
  • gitlab-workhorse: 輕量級的反向代理服務器。
  • logrotate:日誌文件管理工具。
  • postgresql:數據庫。
  • redis:緩存數據庫。
  • sidekiq:用於在後臺執行隊列任務(異步執行)。
  • unicorn:An HTTP server for Rack applications,GitLab Rails 應用是託管在這個服務器上面的。
  • prometheus:監控軟件
  • redis-exporter:redis監控
  • node-exporter:節點系統監控
  • postgres-exporter:postgres 數據庫監控

6.GitLab 經常使用命令

啓動全部 gitlab 組件: gitlab-ctl start 
中止全部 gitlab 組件: gitlab-ctl stop 
中止 postgresql 組件: gitlab-ctl stop postgresql 
中止相關數據鏈接服務 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq 
重啓全部 gitlab 組件: gitlab-ctl restart 
重啓 gitlab-workhorse 組件: gitlab-ctl restart gitlab-workhorse 
查看服務狀態 gitlab-ctl status
查看日誌 sudo gitlab-ctl tail 
檢查 redis 的日誌 sudo gitlab-ctl tail redis

GitLab訪問

1.瀏覽器輸入:http://10.4.7.21,訪問GitLab的web界面

2.首次登錄須要咱們設置root用戶密碼(長度要求8位以上)

3.從新設置用戶的密碼後,便可使用root用戶及剛剛設置的密碼登陸GitLab

4.登陸後的頁面以下,至此完成了GitLab的安裝

GitLab關閉用戶註冊

咱們Gitlab系統是企業內部私有代碼倉庫,全部用戶都是由管理員建立,並不須要註冊功能,所以咱們須要關閉此功能。

1.使用root登陸GitLab,點擊頁面最上方的Admin area

2.進入管理員區域頁面,點擊頁面左側菜單欄最下方的Settings

3.進入Settings頁面後,下拉頁面找到Sign-up Restrictions選項

4.取消Sign-up enabled選項前面的勾選後,下拉到頁面的最下方,點擊Save按鈕完成配置。退回到系統的登陸頁面,發現已經沒有用戶註冊功能。

GitLab倉庫管理

GitLab 是經過組(group)的概念來統一管理倉庫(project)和用戶(user),經過建立組,在組下再建立倉庫,再將用戶加入到組,從而實現用戶與倉庫的權限管理。

建立組

1.在管理員頁面點擊頁面頂部的Admin area按鈕,進入管理員區域

2.在頁面右側點擊綠色的New group按鈕,進入建立組頁面

3.在建立組頁面中,組路徑和組名稱爲必填項,並且此兩處內容最好一致

組可見級別:
一、visibility Level:選擇誰能夠訪問該組:咱們默認選擇 private 便可,
二、Private:只有受權的用戶才能夠看到
三、Internal:只要是登陸 gitlab 的用戶就能夠看到
四、Public:只要能夠訪問 gitlab web 頁面的人就能夠看到

4.點擊頁面最下的create group按鈕,完成組的建立,進入組管理頁面

在此頁面咱們可爲組添加用戶。

建立用戶

1.在管理員頁面點擊頁面頂部的Admin area按鈕,進入管理員區域

2.在頁面右側點擊綠色的New user按鈕,進入建立用戶頁面

3.在建立用戶頁面,輸入用戶名暱稱、用戶名、電子郵件、選擇用戶級別

個性化設置(這裏就保留爲空了):

4.點擊頁面最下部的create user按鈕,完成用戶建立,進入用戶管理頁面,點擊頁面右上頁的 Edit 按鈕,爲用戶設置初始密碼

5.在Password選項中,填寫設置用戶的密碼,點擊頁面最下的Save changes按鈕,完成密碼設置

在此頁面也可同時修改用戶註冊信息。

用戶受權

用戶建立完成後,咱們就須要對用戶進行受權,從而使用戶能夠管理倉庫,有兩種方式,

  • 方法一:將用戶加入到組,這樣用戶能夠管理組內的倉庫,
  • 方法二:直接受權用戶管理倉庫。

一般咱們採用的方式方法二用戶加入相應的組,並賦予不一樣的角色。 GitLab 中用戶的角色是系統定義好的,不能更改。這一點可能不符合咱們正常的思惟習慣。下面咱們將剛建立的Jason用戶添加到咱們的development組,將賦予developer權限。

1.在管理員頁面點擊頁面頂部的Admin area按鈕,進入管理員區域

2.點擊用戶組下面的development組,進入組管理界面

3.選擇咱們剛建立的Jason用戶,選擇developer角色,而後添加到組

注:關於每一種角色對應的權限,可參見官方文檔相關內容:
https://docs.gitlab.com/ee/user/permissions.html

GitLab建立倉庫

在GitLab中,你能夠建立倉庫用來存儲你的程序代碼、做爲一個問題跟蹤器、用 於代碼協做、用於持續集成中的構建、測試和部署等。

1.在管理員區域點擊New project按鈕,或者點擊導航欄中的項

2.進入到新建 project 頁面

3.默認建立的是空倉庫,須要執行一些命令初始化倉庫

4.咱們將sky-demo倉庫加入到development組後,組內的成員便可以看到該倉庫,咱們使用Jason用戶登陸,便可看到該倉庫。

配置SSH KEY

前面已經在GitLab建立了倉庫,而且受權用戶可使用倉庫,全部的操做都是在 WEB 頁面進行,下在介紹如何使用客戶端來鏈接的GitLab倉庫。
個人development組的sky-demo倉庫是私有的,只有受權的用戶才能夠訪問到該倉庫,那麼只要將客戶端的用戶與咱們 GitLab的用戶綁定,客戶端便可訪問到 GitLab上的倉庫,建議使用SSH方式實現客戶端與 Gitlab 用戶的綁定。

now,如今要實現git02-22這個客戶端可以從development組的sky-demo倉庫拉取或者提交代碼,具體配置以下:
1.在git02-22客戶端生成 ssh 密鑰對(windows客戶端下只能使用rsa加密方式)

// 客戶端生成基於rsa加密方式的密鑰
[root@git02-22 ~]# ssh-keygen -t rsa

// 客戶端已經生成了公鑰和私鑰
[root@git02-22 ~]# ll ~/.ssh/
total 8
-rw------- 1 root root 1766 Mar  7 22:59 id_rsa
-rw-r--r-- 1 root root  395 Mar  7 22:59 id_rsa.pub

2.將git02-22客戶端與GitLab的Jason用戶綁定,複製git02-22客戶端的公鑰,在GitLab主頁面點擊用戶設置

3.進入到用戶設置頁面,點擊左側菜單欄的SSH Keys

4.進入到SSH Keys管理頁面

此處只能添加公鑰,若是添加私鑰系統將報錯,此外一個公鑰在整個GitLab系統中只能添加一次,可是一個GitLab用戶能夠添加多個公鑰

設置分支保護

在實際使用過程當中,咱們一般會保持master分支穩定,用於生產環境的版本發佈,只有受權的用戶才能夠向master合併代碼。要實現此功能,咱們須要將master設置爲保護分支,並受權什麼用戶能夠向master用戶推送代碼。

咱們的Jason用戶下面有個sky-demo倉庫,可是它是普通用戶,而我又把git02-22的key添加到Jason用戶,就會致使一個問題,GitLab上默認不容許普通用戶提交代碼到倉庫的Master分支,因此咱們須要經過分支保護功能Jason用戶受權,給予能提交代碼到倉庫的Master分支

1.在設置分支保護以前,咱們必需要手動初始化一下sky-demo倉庫,添加一個文件。

若是倉庫爲空,則沒法設置分支受保護

2.新增文件名README.md,最後提交文件

3.在GitLab上設置分支保護,使用 root 用戶點擊demo倉庫頁面左下角的Settings

4.進入設置頁面,選擇設置菜單欄下面的Repository選項

5.進入repository設置頁面

6.展開Protected Branches

倉庫操做

咱們剛纔在Json用戶添加了git02-22的公鑰,那麼git02-22就能訪問Json用戶用戶所屬組下的全部倉庫,咱們也建立了一個名爲:sky-demo的倉庫,讓咱們拉取該倉庫並建立文件在推送到倉庫吧

1.建立/data/git_repo目錄,在該目錄下拉取倉庫,建立文件並提交到master分支

[root@git02-22 ~]# mkdir -p  /data/git_repo && cd /data/git_repo
[root@git02-22 git_repo]# git clone git@10.4.7.21:development/sky-demo.git
[root@git02-22 git_repo]# cd sky-demo
[root@git02-22 sky-demo]# git config --global user.email "jasondev@163.com"
[root@git02-22 sky-demo]# git config --global user.name "xmh"
[root@git02-22 sky-demo]# echo "123" >index.html
[root@git02-22 sky-demo]# git add .
[root@git02-22 sky-demo]# git commit -m "first"

// 將代碼提交到master分支
[root@git02-22 sky-demo]# git push -u origin  master
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 268 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@10.4.7.21:development/sky-demo.git
   743b351..c5c4f70  master -> master
Branch master set up to track remote branch master from origin.

2.登陸到GitHub界面的sky-demo倉庫,能夠看到剛纔提交的代碼

相關文章
相關標籤/搜索