1. 程式人生 > >基於gitlab-CI的持續整合與部署

基於gitlab-CI的持續整合與部署

一、gitlab-ci原理流程

gitlab-ci是gitlab為持續整合、持續部署提供的一個工具,主要為當利用git客戶端做commit或tag操作提交程式碼時會觸發專案工程根目錄下的.gitlab-ci.yml檔案裡的程式碼shell指令碼,從而實現利用指令碼做具體的做操,細則見http://10.29.139.47/help/ci/quick_start/README

具體執行流程圖如下:

二、常見java應用gitlab-ci檔案編寫例項:

對於一般的工程CI檔案分為四大步,分別為建立jar包(jarBuild)、建立映象(imageBuild)、將映象推送到映象倉庫(imagePush)和將映象部署到遠端伺服器上(imageProcess)。

stages: #定義整個流程的大步驟

- jarBuild #建立jar包

- imageBuild #建立映象

- imagePush #push到映象倉庫

- imageProcess #映象部署

jarBuild-zhangyitong:

script:

#更新程式碼,切換分支

- cd /srv/gitlabci_project

- if [ ! -d "/srv/gitlabci_project/zhangyitong" ]; then

- git clone http://10.29.139.47/yaoxiaoqi/zhangyitong.git

- else

- echo "zhangyitong have existed"

- fi

- cd zhangyitong

- git checkout develop

- git pull

#建立jar包

- mvn clean install -X

- cd /srv/gitlabci_project/zhangyitong/employee-component-api && mvn clean deploy

- cd /srv/gitlabci_project/zhangyitong/employee-component && mvn clean package -Dmaven.test.skip=true

stage: jarBuild

tags:

- image-build

only:

- develop



dockerBuild-zhangyitong:

script:

- cp /srv/gitlabci_project/zhangyitong/employee-component/target/employee-component.jar /srv/gitlabci_project/zhangyitong/build-deploy

- cd /srv/gitlabci_project/zhangyitong/build-deploy

- docker build -t zhangyitong . #建立名為zhangyitong的映象

- docker tag zhangyitong 10.29.139.47:5000/develop/zhangyitong:latest #給映象打tag

#將配置檔案提交到工程上去

- if [ ! -d "/srv/gitlabci_project/config_devuat" ]; then

- cd /srv/gitlabci_project

- git clone http://10.29.139.47/yuanwu/config_devuat.git

- fi

- cp -r /srv/gitlabci_project/zhangyitong/build-deploy/env_config /srv/gitlabci_project/config_devuat/marketing

- cd /srv/gitlabci_project/config_devuat

- git pull

- pres=$(git status)

- if [[ $pres =~ "nothing to commit" ]]; then

- echo "nothing changed"

- else

- git add .

- git commit -a -m "marking config changed"

- git push

- fi



stage: imageBuild

tags:

- image-build

only:

- develop

dockerPush-zhangyitong:

script:

#登入docker映象倉庫,並將映象push到倉庫

- docker login -u ${REGISTRY_NAME} -p ${REGISTRY_PSD} ${REGISTRY_IP}:5000

- docker push 10.29.139.47:5000/develop/zhangyitong:latest

stage: imagePush

tags:

- image-push

only:

- develop

dockerRun-zhangyitong:

script:

#利用ansible遠端部署,其中zhangyitong-dev 對映到要部署機器的ip,“”雙引號中內容為遠端機器上執行的命令

- ansible zhangyitong-dev -m command -a "docker login -u ${REGISTRY_NAME} -p ${REGISTRY_PSD} ${REGISTRY_IP}:5000" #應用伺服器登入註冊中心

- ansible zhangyitong-dev -m command -a "docker pull ${REGISTRY_IP}:5000/develop/zhangyitong:latest" #應用服務拉取映象

- ansible zhangyitong-dev -m copy -a "src=/srv/gitlabci_project/zhangyitong/build-deploy/env_config/zhangyitong_develop dest=/tmp/zhangyitong" #分發docker-compose檔案到應用伺服器

- ansible zhangyitong-dev -m copy -a "src=/srv/gitlabci_project/zhangyitong/employee-component/target/employee-component.jar dest=/tmp/zhangyitong"

- ansible marketing-dev -m copy -a "src=/srv/gitlabci_project/marketing/build-deploy/rm.sh dest=/tmp/marketing_develop"

- ansible marketing-dev -m command -a "cd /tmp/marketing_develop && chmod u+x rm.sh && ./rm.sh"

- ansible zhangyitong-dev -m command -a "docker-compose -f /tmp/zhangyitong/zhangyitong_develop/docker-compose.yml up -d" #應用伺服器執行docker-compose

stage: imageProcess

tags:

- image-push

only:

- develop