衆所周知,提供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提供了兩種方式安裝: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 的運做須要:
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
1.瀏覽器輸入:http://10.4.7.21,訪問GitLab的web界面
2.首次登錄須要咱們設置root用戶密碼(長度要求8位以上)
3.從新設置用戶的密碼後,便可使用root用戶及剛剛設置的密碼登陸GitLab
4.登陸後的頁面以下,至此完成了GitLab的安裝
咱們Gitlab系統是企業內部私有代碼倉庫,全部用戶
都是由管理員建立
,並不須要註冊功能
,所以咱們須要關閉此功能。
1.使用root
登陸GitLab
,點擊頁面最上方的Admin area
2.進入管理員區域頁面
,點擊頁面左側菜單欄最下方的Settings
3.進入Settings
頁面後,下拉頁面找到Sign-up Restrictions
選項
4.取消Sign-up enabled
選項前面的勾選後,下拉到頁面的最下方,點擊Save
按鈕完成配置。退回到系統的登陸頁面,發現已經沒有用戶註冊功能。
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中,你能夠建立倉庫用來存儲你的程序代碼、做爲一個問題跟蹤器、用 於代碼協做、用於持續集成中的構建、測試和部署等。
1.在管理員區域點擊New project
按鈕,或者點擊導航欄中的項
2.進入到新建 project 頁面
3.默認建立的是空倉庫,須要執行一些命令初始化倉庫
4.咱們將sky-demo倉庫
加入到development組
後,組內的成員便可以看到該倉庫,咱們使用Jason
用戶登陸,便可看到該倉庫。
前面已經在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
倉庫,能夠看到剛纔提交的代碼