最近用到了gitlab自動(dòng)部署項(xiàng)目,折騰了很久,踩了不少坑,這里記錄一下。
gitlab是現(xiàn)成的,部署程序的服務(wù)器上安裝gitlab-runner,這個(gè)可以參考官網(wǎng)的安裝文檔。
gitlab-runner安裝完成后,需要注冊(cè)gitlab倉(cāng)庫(kù)的runners,運(yùn)行以下命令
gitlab-runner register
需要的url和token可以從git倉(cāng)庫(kù)的 Settings - CI/DI 中的runners找到,描述可以不用寫,tags先寫“vue-dev-pub”,executor選擇shell,注冊(cè)生成后刷新git倉(cāng)庫(kù)的Settings頁(yè)面,可以在Runners下面看到已經(jīng)注冊(cè)的runner

然后在項(xiàng)目中加入.gitlab-ci.yml文件
stages:
- build
cache:
key: ${CI_BUILD_REF_NAME}
paths:
- node_modules/
build:
stage: build
only:
- master
script:
- npm install
- npm run build
- cp -r dist/* /mnt/www/
tags:
- vue-dev-pub
提交后在git倉(cāng)庫(kù)頁(yè)面的 CI/CD 下的 Pipelines 看到已經(jīng)開(kāi)始運(yùn)行了,但是運(yùn)行失敗,看錯(cuò)誤是沒(méi)有找到npm命令。
下面是填坑時(shí)間
因?yàn)榉?wù)器上安裝node是用root用戶直接用nvm安裝的,而gitlab-runner是gitlab-runner用戶運(yùn)行的,根本訪問(wèn)不到root安裝的node,所以需要用gitlab-runner用戶重新安裝一次。
切換到gitlab-runner用戶
sudo su - gitlab-runner
然后用gitlab-runner用戶安裝node,再次提交后npm運(yùn)行正常,但是最后一步
cp -r dist/* /mnt/www/
執(zhí)行失敗,提示沒(méi)有權(quán)限。mnt是掛載的數(shù)據(jù)盤,gitlab-runner用戶沒(méi)有訪問(wèn)權(quán)限,首先用root用戶添加權(quán)限
chmod -R o+wr /mnt/
然后切換到gitlab-runner用戶在mnt下創(chuàng)建www文件夾,再次提交代碼測(cè)試,自動(dòng)部署正常,編譯出來(lái)的dist文件夾下所有內(nèi)容都復(fù)制到了www文件夾下。
web服務(wù)器使用的是docker運(yùn)行的nginx,服務(wù)器上已經(jīng)安裝好了docker,直接運(yùn)行
docker run --name nginx -p 8080:80 -d -v /mnt/www:/usr/share/nginx/html nginx
運(yùn)行成功后直接訪問(wèn)http://服務(wù)器ip:8080/就行了,以后每次提交代碼后都會(huì)自動(dòng)部署了。
總結(jié)
gitlab-runner程序運(yùn)行的時(shí)候是gitlab-runner用戶的權(quán)限,可以用gitelab-runner用戶把.gitlab-ci.yml里的編譯部署腳本手動(dòng)運(yùn)行一次,能成功的話肯定就沒(méi)問(wèn)題了。