目錄
1. 說明
2. 資源要求
3. 安裝?
4. 配置實踐
4.1 服務器
4.2?人員與項目
4.2 部署準備
4.2.1 訪問變量及用戶賬號設置
4.2.2?Runner設置
4.2.3 要點
5. 應用項目 CI/CD
6. 參考
1. 說明
? ? gitlab是一個強大且免費的代碼管理/部署工具,能統一集成代碼倉庫,CI/CD的工作。開始時我以為只能在官網上使用,后來才知道能私有化部署,確實了不起。
原理圖:
2. 服務器
? ? gitlab資源要求比較高,建議8核16G,目前我的虛擬機是分配了5核12G,要是工作負荷上來,還要劃撥資源。
Server | IP | 配置 | 備注 |
---|---|---|---|
host001.dev.ia | 192.168.0.130 | 5核/12G/200G硬盤 | Gitlab服務器 / Gitlab Runner工作站 / 開發服務器1 |
host002.dev.ia | 192.168.0.131 | 2核/4G/200G硬盤 | 開發服務器2 |
在各自的 /etc/hosts?做上述設定
3. 安裝?
docker-composer方式,指定外部訪問url為?http://host001.dev.ia:18181
gitlab.yml
version: "3.5"services:web:image: 'gitlab/gitlab-ce:latest'container_name: gitlabrestart: alwayshostname: 'gitlab.dev.ia'environment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://host001.dev.ia:18181'# Add any other gitlab.rb configuration here, each on its own lineports:- '18181:18181'- '2222:22'volumes:- '/data0/Server/Settings/gitlab:/etc/gitlab'- '/data0/Server/Logs/gitlab:/var/log/gitlab'- '/data0/Server/Db/gitlab:/var/opt/gitlab'shm_size: '256m'
安裝后進去容器設置管理員(root)密碼
gitlab-rails console -e productionirb> user = User.where(id: 1).first
irb> user.password = 'xxx'
irb> user.password_confirmation = 'xxx'
irb> user.save!
4. 配置實踐
4.1?人員與項目
進入管理后臺,建立兩個開發組,3名用戶成員 (Regular Member權限,配置ssh公鑰),兩個團隊項目, 每個項目分別建? ? dev / staging / live 分支,檢查 pull & push是否正常
Group | Member | Project | Branch |
---|---|---|---|
Dev1 | ben, developer1 | Team1 Prj1 | dev / staging / live |
Dev2 | ben, developer2 | Team2 Prj1 | dev / staging / live |
如圖:
4.2 部署準備
4.2.1 訪問變量及用戶賬號設置
- 在gitlab服務器,因為docker化安裝的,需映射ssh訪問端口 22 => 2222
- 用工具生成deployer密鑰,然后用管理員賬號登錄gitlab后臺:?
-- 配置deployer私鑰變量
? ? Admin Area => Settings => CI/CD => Variables, 定義?SSH_PRIVATE_KEY,用deployer的私鑰填充,將在.gitlab-ci.ym里使用。(注:去掉默認的Protect variable勾選,不然部署時會出現“Error loading key "(stdin)": error in libcrypto”問題)
-- 配置倉庫訪問公鑰, 可選擇添加:公共的部署公鑰或項目部署公鑰(2選1)
A 公共公鑰:Admin Area => Deploy Keys,然后在項目Deploy keys中enable之
B 項目公鑰:切換到項目 Settings => Repository => Deploy keys,添加deployer的Privately keys并且enable,使得deployer用戶可訪問代碼倉庫
- 在部署服務器建deployer賬號,分配密鑰,目錄訪問權限,腳本:
adduser deployer
setfacl -R -m u:deployer:rwx /www/wwwroot# 為解決安全及讀寫權限問題,把deployer添加到www組,把www加到deployer組
usermod -aGwww deployer
usermod -aGdeployer www# 建立密鑰文件, 通過vi把該用戶的密鑰加上
mkdir -p /home/deployer/.ssh && touch /home/deployer/.ssh/authorized_keys && touch /home/deployer/.ssh/id_rsa && touch /home/deployer/.ssh/configchmod 700 /home/deployer/.ssh && chmod 600 /home/deployer/.ssh/id_rsa && chown deployer:deployer -Rf /home/deployer/.ssh
- 為了ssh能正確訪問git倉庫(端口映射),需編輯?/home/deployer/.ssh/config
Host host001.dev.iaUser gitHostname host001.dev.iaPort 2222Preferredauthentications publickeyIdentityFile ~/.ssh/id_rsaTCPKeepAlive yesAddKeysToAgent yes
?完成后用deployer登錄目標機器,測試是否能連接gitlab, 克隆倉庫
ssh -T git@host001.dev.iagit clone git@host001.dev.ia:dev1/team1-prj2.git
4.2.2?Runner設置
Runner 所處位置圖: 通過Runner工作組,根據腳本進行構建與分發
用root賬號登陸,在管理面板(Admin Area)=> CI/CD => Runners頁上建Runner,它實際上是個運行代理器,讓工作機的關聯進來,通過定義tag來調配對應的運行器完成任務,這里我定義了一個php的runner
gitlab在項目管理中提供了Pipeline editor工具,可以在不同分支定義一個.gitlab-ci.yml文件,記敘CI/CD步驟與詳細內容,當用戶提交并推送代碼時觸發過程
工作機安裝gitlab-runner客戶端, 腳本 gitlab-runner-install.sh
#!/bin/bash# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64# Give it permission to execute
sudo chmod +x /usr/local/bin/gitlab-runner# Create a GitLab Runner user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash# Install and run as a service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
注冊runner
gitlab-runner register --url http://host001.dev.ia:18181 --token glrt-HfgiG84kn28NvU69stkh- 選擇shell類型gitlab-runner run# 其他相關命令
gitlab-runner list
gitlab-runner unregister --all-runners
gitlab-runner unregister --url http://host001.dev.ia:18181 --token glrt-ABh3NZLwxomjSk6szHbz
4.2.3 要點
- 在gitlab文檔中,是沒有提及給gitlab-runner賬號配deployer私鑰的,當用giltlab-runner賬號在終端進行手動測試時,需把deployer的id_rsa拷貝過去 gitlab-runner/.ssh目錄下。
5. 應用項目 CI/CD
請關注后續序列文章
6. 參考
-?Use SSH keys to communicate with GitLab | GitLab
-?.gitlab-ci.yml 配置 · PHP/Python/前端/Linux 等等 學習筆記 · 看云
-?gitlab runner tag - 簡書
-?https://dev.to/techworld_with_nana/gitlab-cicd-for-beginners-free-course-2mee