CI(Continuous Integration), 即持续集成,通常用来进行日常编译和自动化测试,来保证及时发现提交的问题,避免影响项目进度,是软件开发过程中一个非常重要的环节。本文主要针对GialabCi
配置过程中遇到问题做记录。
持续集成
CI(Continuous Integration), 即持续集成,通常用来进行日常编译和自动化测试,来保证及时发现提交的问题,避免影响项目进度,是软件开发过程中一个非常重要的环节。本文主要针对GialabCi
配置过程中遇到问题做记录。
通常来讲我们的开发测试过程包括
持续集成工具
在这个过程中,如果有一条自动的流水线,就可以极大的提高生产效率。CI工具有很多,目前最为常用应该是Jenkins
,而Gitlab-CI
是gitlab
官方的持续集成工具。
Gitlab-ci runner的安装与配置
这里面有几个关键概念
Pipeline
Pipeline
就一次完整的持续集成的任务,这里面可以包含多个阶段,比如自动构建、自动单元测试、自动代码检查等等Stages
Stage
是Pipeline
的组成部分,代表不同的集成阶段,比如自动构建可以看做一个Stage
Jobs
job
表示构建工作,表示某个stage
里面执行的工作,一个stage
里面可以定义多个job
。jobs
的特点是:- 相同
stage
中的jobs
会并行执行 - 任何一个
job
失败,整条Pipeline
失败
- 相同
gitlab runner gitlab runner 用来执行任务,可以运行在任意能够访问gitlab服务器的机器上,负责执行一系列的持续集成任务。
总体上讲,就是提交代码、合并分支、创建tag等操作,会触发一次pipeline
。这时gitlab runner
会被通知(通知方式可以有多种,此处不讲)开始执行顺序执行符合条件的stages
,如果所有stages
里的jobs
全部执行成功过,则本次集成成功,否则失败。
如何以多个用户的身份启动多个的gitlab runner
gialab runner基本的安装参考官方文档
要想启动多个不同身份的runner,比如以root身份启动root-runner,用来运行一些对权限有高要求的编译任务,再以gitlab-runner用户的身份运行另一个runner,用来做一些简单的集成。
如果按照官方的说明,往外只能以一个身份启动一个实例。但是,为什么不能用gitlab-runner以外的账号运行runner?
不要直接启动默认服务,那样的话,系统会直接启动/etc/init.d/gitlab-runner的服务,那个里面如下所示:
#/etc/init.d/etc/init.d/gitlab-runner
DAEMON=/usr/bin/$NAME
PIDFILE=/var/run/$NAME.pid
DAEMON_USER=root
DAEMON_GROUP=root
DAEMON_ARGS="run --working-directory /var/lib/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user gitlab-runner"
可以看到如果直接用系统服务启动runner,则只能以gitlab-runner的身份运行。要想使用不同的身份运行不同的runner,必须使用gitlab-ci-multi-runner
创建两个不同的服务,并分别启动他们即可。
//启动一个普通权限的runner
gitlab-ci-multi-runner install --service=gitlab-common-runner --working-directory=/data/gitlab-runners/common --config=/etc/gitlab-runner/common.toml --user=gitlab-runner
gitlab-ci-multi-runner start -n gitlab-common-runner
//启动一个root权限的runner
gitlab-ci-multi-runner install --service=gitlab-root-runner --working-directory=/data/gitlab-runners/root --config=/etc/gitlab-runner/root.toml --user=root
gitlab-ci-multi-runner start -n gitlab-root-runner
现在查看系统的service目录,可以看到
ls /etc/systemd/system/|grep git
gitlab-common-runner.service
gitlab-root-runner.service
分别查看两个service的内容,就会发现确实是以两个不同的用户身份启动 gitlab runner。
至于如何使用gitlab runner,完全在gitlab后台控制即可,无需记录。
全文结束