centos7下使用gitlab+shell實現CI/CD持續集成持續部署
centos7下使用gitlab+shell實現CI/CD持續集成持續部署
流程解釋:第一步ci客戶端向gitlab服務器註冊自己,建立通信,第二步,當項目分支代碼收到變化時,自動觸發yml腳本,yml腳本根據註冊時帶入的runner通知客戶端deploy腳本更新代碼,同時執行編譯和部署過程,deploy腳本寫代碼集成相關操作,具體見下面的講解
CI部分
第一步:準備三臺虛擬機S,C1,C2,我這裏的三臺機子都是全新的,除了系統文件沒有其他文件
S:內存是4G用於裝gitlab服務器 IP:192.168.95.131
C1:內存是1G用於裝gitlab-CI
C2:內存是1G用於裝gitlab-CI客戶端2 IP:192.168.95.133
第二步:在S上安裝gitlab服務器
安裝依賴
sudo yum install curl policycoreutils openssh-server openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo systemctl start firewalld
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld
windows下 下載安裝包,下載地址是:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm
並且上傳至linux目錄下 如/data/web-download
cd /data/web-download
安裝python依賴 -y的意思是所有問答都使用Y
yum install -y policycoreutils-python
安裝 這裏安裝需要花一點時間,耐心等待一下
rpm -i gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm
出現了這個圖案,代表安裝完成
安裝 vim
yum install -y vim
更換端口(這裏寫ip地址或者域名都可以,但是不能寫localhost)
vim /etc/gitlab/gitlab.rb
啟動
gitlab-ctl reconfigure (這裏可能需要一點時間)
重啟:
gitlab-ctl restart(這裏也會可能需要一點時間,不是必須項)
直接ip或者域名 +端口訪問,如果訪問不了,關閉防火墻或者防火墻開放端口
查看防火墻狀態
systemctl status firewalld
關閉防火墻
systemctl stop firewalld
再次訪問 即可,第一次登陸需要重新設置密碼
新建組,新建項目
到這裏服務器已經創建好了,項目也創建好了
第二步:在C1上安裝 gitlab-ci客戶端
安裝 vim
yum install -y vim
安裝runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
如果出現嘗試其他鏡像提示 可以ctrl+c 終止掉進程,然後更改鏡像地址
vim /etc/yum.repos.d/runner_gitlab-ci-multi-runner.repo
將一下內容替換runner_gitlab-ci-multi-runner.repo原有的內容
[gitlab-ci-multi-runner]
name=gitlab-ci-multi-runner
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
執行 yum install -y gitlab-ci-multi-runner 即可
註冊runner
gitlab-ci-multi-runner register
其中 url是gitlab 服務器的地址
token是上面新建的項目token
配置好後 刷新一下項目的runners,可以找到我們剛剛註冊的runner,並且狀態是綠色的
如果不是綠色的 重啟runner即可
查看runner狀態
gitlab-ci-multi-runner verify
重啟所有runner:
gitlab-ci-multi-runner run
重啟單個runner:
gitlab-ci-multi-runner run-single --url http://IP:port/ --token runnerToken --executor shell
編寫 deploy文件
在gitlab-runner的~/.local/bin/目錄下新建deploy文件
su gitlab-runner
mkdir ~/.local/bin -p
cd ~/.local/bin
vim deploy
復制以下內容到deploy文件
#!/bin/bash
if [ $# -ne 3 ]
then
echo "arguments error!"
exit 1
else
deploy_path="/data/wwwroot/$3/$1/$2"
if [ ! -d "$deploy_path" ]
then
git clone "[email protected]:${1}/${2}.git" $deploy_path
cd $deploy_path
git checkout $3
else
cd $deploy_path
git pull
fi
fi
以上腳本的意思是如果參數不是三個,打印參數錯誤
如果目錄沒建立 這git clone 並且git checkout
如果存在 則git clone
添加腳本執行權限
chmod +x ~/.local/bin/deploy
切換到root身份 編輯/etc/profile文件 最末尾添加加入 path路徑
PATH="$HOME/.local/bin:$PATH"
給gitlab-runner用戶創建文件權限
chown -hR gitlab-runner:gitlab-runner /data/wwwroot
配置ssh登錄
su gitlab-runner
mkdir ~/.ssh
cd ~/.ssh
ssh-keygen
然後一直按enter
查看id_rsa.pub文件 並復制 token
創建一個runner-1用戶,並將該用戶添加到項目成員中(賦予該成員maintainer角色)
在gitlab上,登錄runner-1
將剛剛復制的token設置到runner-1用戶的ssh-keys上
創建文件 .gitlab-ci.yml 和test.txt ,前者用於CI解析,後者用於觸發CI
yml 內容如下
stages:
- deploy
deploy1:
stage: deploy
tags:
- test-runner-1
only:
- master
script:
- bash deploy java test-project master
修改test.txt文件,查看CI 功能是否觸發
此時任務可能會報以下錯誤
gitlab-runner身份下 執行以下命令
/etc/profile
deploy java test-project master
第一次訪問這個服務器的時候,有個命令行提示是要把sign添加進已知服務器列表,然後手工輸入個yes
同樣的,在C2上做C1基本一致的的操作(除了基本配置一致,修改一下yml),這裏不再一步一步的演示,至於單機版,就是講CI客戶端和gitlab服務端裝在同一服務器上,操作基本一致,這裏也不再贅述
修改yml 文件(這裏是指定兩個runner並行部署) 其他均一致
自行查看c1,cd服務器文件是否都成功修改?如果都修改了,代表CI功能實現
CD部分
c1,c2服務器上安裝好jdk,maven,tomcat,mysql,具體可見文章:https://www.cnblogs.com/tjqBlog/p/9573459.html
將一個常規的基於maven的spring web項目上傳到gitlab服務器上,(我這裏采用spring boot+mybatis的項目),
修改yam文件如下,
增加編譯和部署生命周期
設置編譯生命周期目標
設置部署生命周期目標
提交修改,查看CI/CD運行軌跡,所有目標均為綠色代表CI/CD功能成功實現,
這裏的每種周期運行詳情都可以點擊進入查看,以下分別截圖 deploy,build,ops,三個周期的詳情
centos7下使用gitlab+shell實現CI/CD持續集成持續部署