Gitlab持续集成详细配置与工作原理
Gitlab Runner 窍门
解决gitlab Runner 执行 job时反复拉取镜像的问题
编辑 /etc/gitlab-runner/config.toml
找到 shm_size = 0 段
添加
1 | pull_policy = "if-not-present" |
每次都要cache的内容可直接放到配置文件中
因为在docker方式中,每次job拉起镜像,都是崭新的,所以在构建Java项目时,.m2
文件夹不存在,导致每次都需要重新下载全量jar包。
的确可以通过 gitlab-ci.yml中的cache段来解决,但每次写实在太麻烦,所以这个配置,也可以通过编辑 /etc/gitlab-runner/config.toml
来解决。
找到 volumes = ["/cache"]
段,修改为
1 | volumes = ["/cache","/dockerdata/gitlab-runner-java01/root/.m2:/root/.m2"] |
其中"/dockerdata/gitlab-runner-java01/root/.m2:/root/.m2"
与docker -v参数的传值类似,冒号前面是宿主机路径,后面是容器内路径。
基本原理
- 不管我们用什么方式安装的gitlab,本身并不具备cicd功能,需要安装配套的
Runner
来具体做事。 - Docker方式部署的runner也不直接做打包发布的事情,而是通过定义不同环节用哪个docker容器来完成任务,这种方式下的runner,其实就是个管控器。
- 何时触发构建动作、由谁执行构建动作、如何构建,需要在项目根目录下的
gitlab-ci.yml
来定义。
运行方式
触发
gitlab的 pipeline既可以自动触发,也可以通过gitlab界面的cicd相关页面手动触发,这取决于在gitlab-ci.yml中如何配置。
- 手动触发:
gitlab项目页面
->左侧"CI/CD"
->右侧按钮"Run Pipeline"
- 自动触发:
gitlab-ci.yml
中,每个job的only
段,方式非常灵活,可按照 分支提交动作、文件修改动作 等等方式。
only案例,修改文件触发构建
作为开发人员,最方便的莫过于修改本地文件然后提交了,以下方式,只需要在项目根目录创建两个文件dev_ver
和test_ver
,分别对应自动部署到开发版和测试版。
当gitlab获取到提交请求时,会自动扫描gitlab-ci.yml文件,如果对应的文件有修改,则进行对应的构建和发布操作。
1 | only: |
only案例,手动触发
如果想通在gitlab网页界面上操作,可采用这种变量传值方式:
1 | only: |
此时,gitlab项目页面
-> 左侧"CI/CD"
-> 右侧按钮"Run Pipeline"
,在对应的页面中变量栏key输入 RELEASE
,value栏输入dev
,则会触发此规则。
阶段
以下信息描述了两个阶段 prepare
和deploy
阶段
1 | stages: |
当然,可以制定更多的阶段(Job),对于docker方式的Runner而言,每个阶段都会临时启动一个docker来执行对应的任务。
执行
在每个执行阶段中,我们需要定义:
- 触发规则 only
- 采用的镜像 image
- 运行的脚本 script
- 缓冲(为了下一环节能用到上一环节的作业成果) cache
执行案例
1 | # 定义了两个流程 |
以上这个案例,定义了两个环节 prepare
和deploy
,有三个job:
prepare:
在dev_ver或test_ver被修改时会被触发deploy_dev:
在dev_ver被修改时会被触发deploy_test:
在test_ver被修改时会被触发
那么,如果:
- 项目根目录下的
dev_ver
被修改,则会触发prepare:
和deploy_dev:
- 项目根目录下的
test_ver
被修改,则会触发prepare:
和deploy_test: