一、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