基於gitlab-CI的持續整合與部署
阿新 • • 發佈:2019-02-18
一、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