1. 程式人生 > 其它 >Gitlab 社群版13.6.1在系統Centos7中安裝和使用

Gitlab 社群版13.6.1在系統Centos7中安裝和使用

Gitlab 社群版13.6.1在系統Centos7中安裝和使用

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'] = "[email protected]"  # 自己的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'] = "xiaohao@qq.com"  # 指定傳送郵件的郵箱地址
user["git_user_email"] = "[email protected]"   # 指定接收郵件的郵箱地址

修改好配置檔案後,要使用 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 "[email protected]"

# 在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'] = '[email protected]' # 填寫發件人的郵箱地址
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等
        • 最後一定要注意時間一定要同步,不然會錯亂