从GitLab 8.0开始就把GitLab-Ci集成在GitLab中了,咱们只要在项目中添加一个.gitlab-ci.yml文件,而后添加一个Runner就能够进行持续集成了,GitLab-Ci实现自动化部署流程:用户提交代码->检查是否有.gitlab-ci.yml文件->若是无,则结束;若是有,则调用runner执行脚本->获取返回的结果。git
一次piplien至关于一次构建任务,里面能够包含多个流程,如编译、测试、部署等。任何提交或者MergeRequest的合并均可以触发Pipline,如图:web
Stages表示构建阶段,咱们能够在一个Piplien中定义多个Stages,这些Stages会有如下特色:centos
所以,Stages和Pipline的关系是:缓存
Jobs表示构建工做,表示某个Stage里面执行工做,咱们能够在Stage里面定义多个Jobs,这些Jobs会有如下特色:服务器
Jobs和Stage的关系图:ssh
执行构建任务的一个服务,把构建任务放到runner里面而不是在CI里面作是不想把”构建”这个重任(一般较大的工程构建都比较小耗资源) 放到gitlab上而影响gitlab性能。经过把gitlab runner安装到不一样机器上,让这台单独的机器来执行构建任务,GitLab-Runner能够分类两种类型:Shared Runner(共享型)和Specific Runner(指定型):gitlab
向GitLab-CI注册一个Runner须要两样东西:GitLab-CI的url和注册token。若是要注册Shared Runner,你须要到管理界面的Runners页面里面去找注册token。以下图所示:性能
若是要注册Specific Runner,须要到指定的项目中去找对应的token,如图:测试
以centos 7为例, 使用了清华大学的镜像,新建 gitlab-ci-multi-runner.repogradle
[root@i-vvwtw5ne ~]# touch /etc/yum.repos.d/gitlab-ci-multi-runner.repo
将如下内容写入文件
[gitlab-ci-multi-runner] name=gitlab-ci-multi-runner baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/yum/el7 repo_gpgcheck=0 gpgcheck=0 enabled=1 gpgkey=https://packages.gitlab.com/gpg.key
执行
[root@i-vvwtw5ne ~]# yum makecache [root@i-vvwtw5ne ~]# yum install gitlab-ci-multi-runner
注册一个Rnner
让Runner启动起来
[root@i-vvwtw5ne ~]# gitlab-runner start
登录到gitlab就能够看到新注册的Runner了,如图:
配置.gitlab-ci.yml文件
在工程目录下增长一个.gitlab-ci.yml文件,内容以下:
# 缓存服务, 若是有文件须要多个stages共用,例如jar/war包 cache: paths: - target/ # 本次构建的阶段:build package stages: - build - deploy # 构建 Job build: stage: build tags: - dev only: - dev script: - echo "=============== 开始编译构建和打包任务 ===============" - pwd - gradle clean build -x test # 部署 deploy: stage: deploy tags: - dev only: - dev script: - echo "=============== 开始部署任务 ===============" # 测试,是否可以经过 ssh 连通远程服务器 - sshpass -p Falsesoul**** ssh -o StrictHostKeychecking=no root@192.192.18.73 - echo "=============== 将 jar 包部署到远程服务器上 ===============" - sshpass -p Falsesoul**** scp -o StrictHostKeychecking=no /home/gitlab-runner/builds/66b08c53/0/cos/yh-cos/yh-cos-web/build/libs/yh-cos-web-0.0.1.jar root@192.192.18.73:/opt/war/ - echo "=============== 开始执行 ===============" - sshpass -p Falsesoul**** ssh -o StrictHostKeychecking=no root@192.192.18.73 "sh deploy.sh"
当有提交或Meger request到dev分支的时候,就会自动触发pipline,如图: