GitLab CI/CD +Shell指令碼實現簡單的自動程式碼部署
1.為什麼要使用gitlab CI
gitlab自帶的CI/CD 就是可持續整合工具,簡單來講,就是開發提交程式碼,gitlab自動 測試、編譯、部署,
省下了很多時間。而且這個簡單一點比jenkins+git 那種方式,專案部署不是很多的情況下,可以選擇此方法
首先這裡需要的三個核心 gitlab runner、.gitlab-ci.yml、然後就是shell指令碼
我們一個一個來處理,首先要安裝runner
執行命令(如下圖應該就算成功了):
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
接下來安裝runner,出現complete 就算安裝完成了
yum install -y gitlab-ci-multi-runner
然後就是註冊,這個步驟是runner和git關聯的重要環節,馬虎不得
我們來把上面的域名和token去 gitlab伺服器複製下來,點開你的專案-然後settings下的CI/CD
找到runner裡面有域名和token 複製貼上到記事本,在下面runner 註冊時使用
輸入命令,裡面有一些引數是後期可以改的,不用慌,輸入之後回車就自動下一步了
gitlab-ci-multi-runner register
註冊完成後,我們回到gitlab伺服器,還是開啟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
然後就可以修改 剛才的一些配置 我剛才註冊時,tags有亂碼,現在改過來了
接下來我們寫一個shell指令碼 起個名字就叫deploy
su gitlab-runner
mkdir ~/.local/bin -p
vim deploy
#!/bin/bash if [ $# -ne 2 ] then echo "arguments error!" exit 1 else deploy_path="/var/www/$1/$2" if [ ! -d "$deploy_path" ] then project_path="git@你的git專案地址:"$1/$2".git" git clone $project_path $deploy_path else cd $deploy_path git pull fi fi
這個指令碼的意識是,先判斷是否有兩個引數,然後就是判斷是否存在目錄,如果不存在則拉取,如果存在,就更新。
新增指令碼執行許可權
chmod +x ~/.local/bin/deploy
切換到root編輯/etc/profile 在最末尾新增 path路徑
PATH="$HOME/.local/bin:$PATH"
給gitlab-runner 使用者建立檔案許可權
chown -hR gitlab-runner:gitlab-runner /var/www
配置 ssh登入 免密操作
su gitlab-runner
mkdir ~/.ssh
cd ~/.ssh
ssh-keygen
cat id_rsa.pub
複製貼上ssh公鑰
複製完成後,我們開啟gitlab倉庫,複製進去後,點add key 就可以了
接下來我們在gitlab伺服器上建立一個.gitlab-ci.yml 和一個test.txt
script 就是兩個變數,為了拉取專案的,裡面的空格 一定要遵循,不能亂寫,不然編譯不過去,
stages: - deploy deploy: stage: deploy only: - master tags: - apiTag script: - bash deploy jjlg.dev jjlg.webapi.core
點 Commit changes 這裡紅框的部分就是校驗 yml格式的,如果寫錯了會做提示的
其實每次commit 修改檔案內容 都會跑一下的,下圖就是成功了,可以去伺服器看看程式碼是否已經發布進去了
注意:這裡有一個問題,就是第一次獲取伺服器程式碼的時候,會需要輸入yes,所以執行runner跑指令碼的時候會報錯
這裡報錯很無語,說是無法連線遠端倉庫,害我找了半天,我就在伺服器上直接拉取了一下程式碼,
讓我輸入yes,這就讓我懷疑了,如果用指令碼怎麼輸入呢,還好只是第一次讓你輸入,我也懶得找辦法了,
就直接去伺服器,手動拉取一下,然後就可以了,你在試著改一下text 然後push一下
應該沒什麼問題,我遇到的坑,基本都寫清楚了,我這種小白都能成功,估計各位大神也一樣可以。