GitLab CI/CD自動化部署(持續集成)


一、安裝及配置

1、gitlab及runner安裝

1.)gitlab安裝

$ docker run -d --name gitlab -p 1443:443 -p 9800:80 --restart always \
    -v /opt/gitlab/config:/etc/gitlab \
    -v /opt/gitlab/data:/var/opt/gitlab \
    -v /opt/gitlab/logs:/var/log/gitlab \ --privileged=true \ gitlab/gitlab-ce:latest

2.)gitlab-runner安裝

$ docker run -d --name gitlab-runner --restart always \
    -v /srv/gitlab-runner/config:/etc/gitlab-runner \
    -v /var/run/docker.sock:/var/run/docker.sock \
    gitlab/gitlab-runner:latest

3.)gitlab-runner注冊

進入gitlab-runner容器,進行注冊
$ docker exec -it gitlab-runner gitlab-ci-multi-runner register
注冊時需要的url、token都在settings > CI/CD或runner中找到,再輸入runner名稱,executor執行器選shell好了

4.)相關應用安裝

進入gitlab-runner容器,下載安裝node、npm等全局依賴
2、gitlab-ci配置詳解
gitlab-runner注冊成功后,當監聽到push等事件,會自動執行.gitlab-ci.yml配置中任務,ci配置通常由stages、job等主要部分組成。
  • Stages
階段/步驟,多個Stage按以下順序執行,若其中任何一個失敗,則后續stage不執行。
stages:
 - build  - test  - deploy
  • 公用
所有stage之前,可以執行一些公共的操作
before_script:  # after_script,在所有job之后 - npm set registry http://registry.npm.taobao.org
  • Job
任務可以有多個
job1: # 執行階段,若不指定默認test stage: build # 指定執行的runner標簽 tags: - runner-build # 觸發分支 only: - master - release - /^release\/.*$/ - triggers # 自定義變量 variables sourceDir: ./src # 執行腳本 script: - cd ./xxx - npm install - npm run lint - npm run build # 是否允許失敗,true表示失敗后不影響后面流程 allow_failure: false 

二、自動化構建

1、設置遠程登錄
通過用戶名+公鑰的方式可以讓腳本在無密的情況下登錄遠程服務器

1.)查看/生成ssh密鑰

進入gitlab-runner容器,查看/home/gitlab-runner/.ssh目錄下 id_rsa(私鑰)、id_rsa.pub(公鑰)文件,若沒有可通過下面命令生成:
$ ssh-keygen -t rsa -C 'your email@domain.com'

2.)公鑰追加到服務器ssh認證文件

將/home/gitlab-runner/.ssh/id_rsa.pub公鑰通過rz命令上傳到服務器~/目錄下,也可以直接copy后手動編輯添加
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
2、自動化部署

1.)gitlab ci配置

./.gitlab-ci.yml文件
stages: - deploy job: stage: deploy tags: - runner-deploy only: - master - triggers script: - chmod +x ./bin/deploy.sh - ./bin/deploy.sh encore

2.)編譯/部署腳本

./bin/deploy.sh文件
 
#!/bin/bash # 服務名接收/判斷 serv=$1 if [ ! $serv ] ;then echo -e "\e[31;5mError: No service name config in .gitlab-ci.yml\!\e[0m" exit 2 fi npm config set registry http://registry.npm.taobao.org clear # 1.編譯web echo -e "\e[1;36;5m======>Start buiding [$serv] web...\e[0m" cd ./web npm i npm run build # 2.編譯server echo -e "\e[1;36;5m======>Start buiding [$serv] server...\e[0m" cd ../server npm i --production # 3.打包遠程傳送 echo -e "\e[1;36;5m======>Start sending [$serv] over ssh...\e[0m" cd ../ tar -zcf $serv.tar.gz ./bin ./web/dist ./server ./docker-compose.yml ./.gitlab-ci.yml # 傳送 scp -o StrictHostKeyChecking=no $serv.tar.gz root@192.168.4.28:/root/static git clean -fd git reset --hard HEAD # 4.遠程部署 echo -e "\e[1;36;5m======>Start deploy [$serv] service...\e[0m" # 遠程執行批量腳本 ssh -Tq user@x.x.x.x << remotessh #---------------------------------------------- cd /root/static if ! test -e $serv; then mkdir $serv fi tar -mzxf $serv.tar.gz -C $serv rm $serv.tar.gz cd $serv # 創建/啟動服務 docker-compose up -d exit #---------------------------------------------- remotessh echo -e "\e[1;32mService [$serv] deploy success!\e[0m"

注意事項:

a.)echo -e顯示帶顏色的閃動文字
b.)scp/ssh參數-o StrictHostKeyChecking=no用來忽略第一次連接提示生成known_hosts文件
c.)ssh參數-Tq用來去掉偽終端提示
d.)遠程執行批量腳本需用remotessh或EOF(不輸出echo內容)
e.)變量申明推薦放腳本頭部,若定義在remotessh代碼塊中變量 都需要轉義成\\,也可直接在第一個remotessh或EOF加引號
f.)exit 0:成功退出,1:失敗退出,2:用法不當退出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM