基于gitlab-ci的CICD
简介
gitlab-ci全称是gitlab continuous integration的意思,也就是持续集成。中心思想是当每一次push到gitlab的时候,都会触发一次脚本执行,然后脚本的内容包括了测试,编译,部署等一系列自定义的内容。
目前成都创新互联公司已为上1000家的企业提供了网站建设、域名、网站空间、网站托管、服务器租用、企业网站设计、如皋网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
自动部署涉及了若干个角色,主要介绍如下
GitLab-CI
这个是一套配合GitLab使用的持续集成系统,是GitLab自带的,也就是你装GitLab的那台服务器上就带有的。.gitlab-ci.yml的脚本解析就由它来负责。
GitLab-Runner
这个是脚本执行的承载者,.gitlab-ci.yml的script部分的运行就是由runner来负责的。GitLab-CI浏览过项目里的.gitlab-ci.yml文件之后,根据里面的规则,分配到各个Runner来运行相应的脚本script。这些脚本有的是测试项目用的,有的是部署用的。
.gitlab-ci.yml
这个是在git项目的根目录下的一个文件,记录了一系列的阶段和执行规则。GitLab-CI在push后会解析它,根据里面的内容调用runner来运行。
Pipeline
一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程,如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程。
Stages
Stages 表示构建阶段,说白了就是上面提到的流程。我们可以在一次 Pipeline 中定义多个 Stages,这些 Stages 会有以下特点:
所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始
只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功
如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败
Jobs
Jobs 表示构建工作,表示某个 Stage 里面执行的工作。我们可以在 Stages 里面定义多个 Jobs,这些 Jobs 会有以下特点:
相同 Stage 中的 Jobs 会并行执行
相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功
如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 失败
发布流程图如下:
安装部署
添加gitlab官方库
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
安装最新版本的gitlab-runner
yum -y install gitlab-runner
启动服务
gitlab-runner list 查看各个 Runner 的状态
gitlab-runner stop 停止服务
gitlab-runner start 启动服务
gitlab-runner restart 重启服务
注册
注册之前需要先获取到注册令牌
specific令牌位置为: gitlab 项目 -> 设置 -> CI / CD -> Runners 设置
share runner令牌位置为:Admin Area -> Runners设置
开始注册
gitlab-runner register
[root@localhost ~]# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=1784 revision=577f813d version=12.5.0
Running in system-mode.
##输入你的Gitlab URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.60.133/
##输入注册令牌来注册Runner
Please enter the gitlab-ci token for this runner:
SeyTs9_4mKEsYjmfPr4e
##输入Runner说明
Please enter the gitlab-ci description for this runner:
[localhost]: test
##输入Runner的tags
Please enter the gitlab-ci tags for this runner (comma separated):
test
Registering runner... succeeded runner=SeyTs9_4
##输入Runner的执行方式
Please enter the executor: parallels, ssh, virtualbox, docker+machine, custom, docker, docker-ssh, shell, docker-ssh+machine, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
配置文件保存在/etc/gitlab-runner/config.toml
配置项类似下面,可能需要手动添加builds_dir和cache_dir这两个变量,再重启服务
[[runners]]
name = "216XX"
url = "https://git.XX.com/"
token = "xxxxxx"
executor = "shell"
builds_dir = "/home/gitlab-runner/builds"
cache_dir = "/home/gitlab-runner/cache"
[runners.cache]
如果要同时处理多个 build 的话,需要进 /etc/gitlab-runner/config.toml 文件配置 concurrent 它的值为 >1 的值
注销runner:
gitlab-runner unregister --url https://asdf.com/ci --token 43f334f34f34f34f4
或者
gitlab-runner unregister --name NAME 删除特定的Runner
下面我们去需要发布的项目里面的根目录编写.gitlab-ci.yml脚本进行自动发布
.gitlab.-ci.yml文件必须在项目的根目录进行创建:
stages:
- build
- test
- deploy
#打包阶段
build-job:
stage: build
tags:
- report
script:
- mvn clean package -Dmaven.test.skip=true -Pprod
only:
- master
#测试阶段
test-job:
stage: test
tags:
- report
script:
- docker run -d -v $(pwd)/target:/opt/tomcat-8.5/webapps -p 8099:8080 --name=xxxx public/tomcat-8.5
only:
- master
#手动部署阶段
deploy-job:
stage: deploy
tags:
- report
only:
- master
environment:
name: $report_v
url: $report_url
script:
- echo $(whoami)
- ssh -p 222 $report_host "/test/apache-tomcat/bin/shutdown.sh"
- ssh -p 222 $report_host "rm -rf /test/tomcat/webapps/*"
- scp -P 222 target/report.war $report_host:/test/tomcat/webapps
- ssh -p 222 $report_host "/test/tomcat/bin/startup.sh"
when: manual
配置.gitlab-ci.yml文件中用到的变量信息:CI / CD Settings/Variables,也可以直接在.gitlab.-ci.yml文件中指定,这里是为了安全考虑配置在了外面。
在项目的根目录写好.gitlab.-ci.yml脚本后就会自动触发构建部署
我们在jobs里面可以看到执行的状态,是否执行成功或者报错。
手动执行部署
需要在手动执行的阶段添加参数
when: manual
这里可以看到build_job阶段任务已经执行成功,test_job阶段任务等待手动执行部署。
点击test_job状态可以查看到执行过程;如果有报错,这里也可以显示报错信息。
接下来我们手动执行部署test_job阶段任务。
执行后刷新下,就可以看到已经执行成功了。
上面我们在.gitlab-ci.yml中配置了回滚和手动执行部署任务;接下来我们看看回滚。
回滚
在deploy的任务时,添加参数如下:
environment:
name: lims3_v
我们可以看到这里有我们自定义的版本,点进去可以看到之前的历史记录。
点击后面的回滚按钮即可进行回滚。
Q&A:
报错如下:
图1:
原因是git版本太低,升级git版本到2.12之后版本即可。
图2:
解决方法:
缺少git组件导致,可以重新编译安装git
图3:
是用户权限问题:
解决方法:chown -R gitlab-runner:gitlab-runner /home/gitlab-runner
新闻名称:基于gitlab-ci的CICD
链接分享:http://hbruida.cn/article/gddoig.html