1. 程式人生 > 實用技巧 >GitLab CI/CD +Shell指令碼實現簡單的自動程式碼部署

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

cd ~/.local/bin
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一下

應該沒什麼問題,我遇到的坑,基本都寫清楚了,我這種小白都能成功,估計各位大神也一樣可以。