Gitlab的安裝及使用


1. Gitlab概述

1.1 GitLab介紹

GitLab是利用Ruby on Rails一個開源的版本管理系統,實現一個自托管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目。

GitLab能夠瀏覽源代碼,管理缺陷和注釋。可以管理團隊對倉庫的訪問,它非常易於瀏覽提交過的版本並提供一個文件歷史庫。團隊成員可以利用內置的簡單聊天程序(Wall)進行交流。

它還提供一個代碼片段收集功能可以輕松實現代碼復用,便於日后有需要的時候進行查找

1.2 Gitlab服務構成

Nginx:靜態web服務器。

gitlab-shell:用於處理Git命令和修改authorized keys列表。

gitlab-workhorse: 輕量級的反向代理服務器。

logrotate:日志文件管理工具。

postgresql:數據庫。

redis:緩存數據庫。

sidekiq:用於在后台執行隊列任務(異步執行)。

unicorn:An HTTP server for Rack applications,GitLab Rails應用是托管在這個服務器上面的。

1.3 Gitlab工作流程

1.4 GitLab Shell

GitLab Shell有兩個作用:為GitLab處理Git命令、修改authorized keys列表

當通過SSH訪問GitLab Server時,GitLab Shell會:

  • 限制執行預定義好的Git命令(git push,git pull,git annex)
  • 調用GitLab Rails API檢查權限
  • 執行pre-receive鈎子(在企業版中叫做Git鈎子)
  • 執行用戶請求的動作,處理GitLab的post-receive動作
  • 處理自定義的post-receive動作

當通過http(s)訪問GitLab Server時,工作流程取決於你是從Git倉庫拉取(pull)代碼還是向git倉庫推送(push)代碼:

如果是從Git倉庫拉取(pull)代碼,GitLab Rails應用會全權負責處理用戶鑒權和執行Git命令的工作

如果是向Git倉庫推送(push)代碼,GitLab Rails應用既不會進行用戶鑒權也不會執行Git命令,它會把以下工作交由GitLab Shell進行處理:

  • 調用GitLab Rails API 檢查權限
  • 執行pre-receive鈎子(在GitLab企業版中叫做Git鈎子)
  • 執行你請求的動作
  • 處理GitLab的post-receive動作
  • 處理自定義的post-receive動作

1.5 GitLab Workhorse 

GitLab Workhorse是一個敏捷的反向代理。它會處理一些大的HTTP請求,比如文件上傳、文件下載、Git push/pull和Git包下載。其它請求會反向代理到GitLab Rails應用,即反向代理給后端的unicorn。

2. Gitlab的安裝部署

  • Gitlab要求服務器內存2G以上

2.1 方式一:下載gitlab-ce的rpm包

將對應版本的gitlab-ce下載到本地后,直接yum安裝即可

# 要先將這個rpm包下載到本地
yum install -y gitlab-ce-13.6.1-ce.0.el7.x86_64.rpm

2.2 方式二:配置yum源

在 /etc/yum.repos.d/ 下新建 gitlab-ce.repo,寫入如下內容:

[gitlab-ce]
name=gitlab-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
Repo_gpgcheck=0
Enabled=1
Gpgkey=https://packages.gitlab.com/gpg.key

然后創建cache,再直接安裝gitlab-ce

yum makecache  # 這一步會創建大量的數據

# 直接安裝最新版
yum install -y gitlab-ce 

# 如果要安裝指定的版本,在后面填上版本號即可
yum install -y  gitlab-ce-13.6.1

# 如果安裝時出現gpgkey驗證錯誤,只需在安裝時明確指明不進行gpgkey驗證
yum install gitlab-ce -y --nogpgcheck

2.3 gitlab的配置

配置文件位置  /etc/gitlab/gitlab.rb

[root@centos7 test]# vim /etc/gitlab/gitlab.rb

[root@centos7 test]# grep "^[a-Z]" /etc/gitlab/gitlab.rb
 external_url 'http://10.0.0.51'  # 這里一定要加上http://

# 配置郵件服務
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "hgzerowzh@qq.com"  # 自己的qq郵箱賬號
gitlab_rails['smtp_password'] = "xxx"  # 開通smtp時返回的授權碼
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"   
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = "hgzerowzh@qq.com"  # 指定發送郵件的郵箱地址
user["git_user_email"] = "shit@qq.com"   # 指定接收郵件的郵箱地址

修改好配置文件后,要使用 gitlab-ctl reconfigure 命令重載一下配置文件,否則不生效。

gitlab-ctl reconfigure # 重載配置文件

2.4 Gitlab常用命令

gitlab-ctl start         # 啟動所有 gitlab 組件
gitlab-ctl stop          # 停止所有 gitlab 組件
gitlab-ctl restart       # 重啟所有 gitlab 組件
gitlab-ctl status        # 查看服務狀態

gitlab-ctl reconfigure   # 啟動服務
gitlab-ctl show-config   # 驗證配置文件

gitlab-ctl tail          # 查看日志

gitlab-rake gitlab:check SANITIZE=true --trace    # 檢查gitlab

 vim /etc/gitlab/gitlab.rb # 修改默認的配置文件

3. Gitlab的使用

  • Gitlab安裝好后,設置密碼,管理賬戶為root

3.1 創建Group

  • 填上組名即可,這里組名為java

3.2 創建User

  • 創建四個User:pm、dev1、dev2、dev3

 

3.3 添加User到Group中並授權

3.4 創建Project並配置SSH

 

3.5 在項目中添加成員

3.6 將本地文件推送到Gitlab

# 將app01項目克隆下來
git clone git@10.0.0.51:java/app01.git

# 初始化配置
git config --global user.name "hgzero"
git config --global user.email "hgzero@qq.com"

# 在app01目錄下新建一些文件

# 推送到gitlab
git add .
git commit -m "first edition"
git push origin master

4. 制定開發計划

4.1 創建開發計划

  • 項目:app01
  • 版本:v1.0

4.2 創建里程碑Milestones

  • 用pm賬號登錄gitlab后操作(先要在admin中設置pm賬號的密碼)
  • 要根據開發計划來創建Milestones

 

 4.3 根據開發計划創建issue

  • 創建4個issue,分派給dev1和dev2這兩個開發人員

 

4.4 開發者登錄賬號查看分派的任務 

  • 然后開發dev1登錄gitlab,就能看到任務已經分配過來了

4.5 開發流程

  • 公司里的開發開始任務
# 1. 先從倉庫把項目拉下來
git clone git@10.0.0.51:java/app01.git
cd app01/

# 2.先創建一個自己的分支,然后進行開發
git checkout -b index   # 創建一個叫index的分支,並切換到這個分支
git status

# 3. 開始開發首頁
echo "<h1>welcome to this app</h1>" > index.html  # 假設就開發了一個index頁面

# 4. 開發完成后,把項目傳到倉庫
git add .
git commit -m "index"
# 如果寫成 git commit -m "close #2" ,則表示merge請求允許且merge成功之后,自動刪除編號為#2的issue

# 傳到index分支
git push origin index 

4.6 合並分支

1)開發dev1發送合並分支請求給pm

2)pm收到開發的Merge請求后進行處理

  •  使用pm登錄,就可以看到pm已經收到了合並請求merge request

3)開發dev1確認任務完成

  • 退出pm賬戶,登入dev1賬戶:

  •  或者點進去后,在側邊欄進行標識Done,然后已經完成的issue,可以將其Close

  • 這個時候Milestones的進度已經往前進了一些了:

4.7 開發其他功能

  • 然后其他開發者或者自己再次進行開發時,先要把剛剛更新后的內容(master主干)拉回來,然后再進行開發
git checkout master  # 切換到master
git pull             # 從遠端倉庫拉取數據
# 然后再進行其他操作

5. Gitlab備份恢復

5.1 備份gitlab

1)修改配置文件

  • /etc/gitlab/gitlab.rb
# 備份保存的位置,這里是默認位置,可修改成指定的位置
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

# 設置備份保存的時間,超過此時間的日志將會被新覆蓋
gitlab_rails['backup_keep_time'] = 604800  # 這里是默認設置,保存7天

# 特別注意:
#     如果自定義了備份保存位置,則要修改備份目錄的權限,比如:
#     chown -R git.git /data/backup/gitlab
  • 配置完成后要重啟以使配置生效
# 重讀配置文件
gitlab-ctl reconfigure  

# 重啟gitlab
gitlab-ctl restart

2)設置定時任務

# 每天凌晨2點定時創建備份
# 將一下內容寫入到定時任務中 crontab -e
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create

# 備份策略建議:
#     本地保留3到7天,在異地備份永久保存

3)備份時間的識別

# 備份后的文件類似這樣的形式:1494170842_gitlab_backup.tar,可以根據前面的時間戳確認備份生成的時間

data  -d  @1494170842

5.2 恢復gitlab

1)停止數據寫入服務

# 停止數據寫入服務
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

2)進行數據恢復並重啟

# 進行恢復
gitlab-rake gitlab:backup:restore BACKUP=1494170842  # 這個時間戳就是剛剛備份的文件前面的時間戳

# 重啟
gitlab-ctl restart

6. gitlab郵件通知配置

  • vim  /etc/gitlab/gitlab.rb
gitlab_rails['time_zone'] = 'Asia/Shanghai'

gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'example@163.com' # 填寫發件人的郵箱地址
gitlab_rails['gitlab_email_display_name'] = 'gitlab'

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"  # smtp服務器的地址,如網易的地址
gitlab_rails['smtp_port'] = 25                 # 要注意如果使用了SSL/TLS的話,端口可能不是25
gitlab_rails['smtp_user_name'] = "smtp用戶名"
gitlab_rails['smtp_password'] = "smtp用戶密碼"
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"

7. 使用SourceTree進行項目開發

7.1 項目拉取

  • 先把項目克隆下來

 

  •  如果ssh的方式克隆失敗,可能是因為SSH Key沒找到,可以在這里添加

7.2 創建分支進行功能開發

1)新建立一個叫“pay”的分支

 

2)進行功能開發

7.3 提交項目  

1)開發pay功能完成后進行提交

  • 可以看到SourceTree中已經有“未提交的更改”

2)添加“用戶信息”

 3)進行提交

  • 注釋也可以寫成  close #3    ,作用是提交完成后關閉3號issue 

7.4 推送到倉庫

 

  •  然后就可以在gitlab上進行發送merge請求了,后面就可以進行其他操作了

7.5 項目上線

1)當所有工作完成之后,就可以進行上線了

2)打標簽

  •  上線先打個標簽

 3)刪除無用分支

  • 然后刪除已經合並到主干中的不必要的分支,如index、pay等
  • 最后一定要注意時間一定要同步,不然會錯亂

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM