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 sidekiq2)進行資料恢復並重啟
# 進行恢復 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)進行功能開發
- 可以看到SourceTree中已經有“未提交的更改”
7.3 提交專案
1)開發pay功能完成後進行提交
2)新增“使用者資訊”
3)進行提交
註釋也可以寫成 close #3 ,作用是提交完成後關閉3號issue
7.4 推送到倉庫
然後就可以在gitlab上進行傳送merge請求了,後面就可以進行其他操作了
7.5 專案上線
1)當所有工作完成之後,就可以進行上線了
2)打標籤
- 上線先打個標籤
3)刪除無用分支
- 然後刪除已經合併到主幹中的不必要的分支,如index、pay等
- 最後一定要注意時間一定要同步,不然會錯亂