CI(Continuous Integration), 即持续集成,通常用来进行日常编译和自动化测试,来保证及时发现提交的问题,避免影响项目进度,是软件开发过程中一个非常重要的环节。本文主要针对GialabCi配置过程中遇到问题做记录。

持续集成

CI(Continuous Integration), 即持续集成,通常用来进行日常编译和自动化测试,来保证及时发现提交的问题,避免影响项目进度,是软件开发过程中一个非常重要的环节。本文主要针对GialabCi配置过程中遇到问题做记录。

通常来讲我们的开发测试过程包括

graph LR; 开发 --> 提交合并代码; 提交合并代码 --> 编译; 编译 --> 测试; 测试 --> 发布;

持续集成工具

在这个过程中,如果有一条自动的流水线,就可以极大的提高生产效率。CI工具有很多,目前最为常用应该是Jenkins,而Gitlab-CIgitlab官方的持续集成工具。

Gitlab-ci runner的安装与配置

这里面有几个关键概念

  1. Pipeline Pipeline就一次完整的持续集成的任务,这里面可以包含多个阶段,比如自动构建、自动单元测试、自动代码检查等等

  2. Stages StagePipeline的组成部分,代表不同的集成阶段,比如自动构建可以看做一个Stage

  3. Jobs job表示构建工作,表示某个stage里面执行的工作,一个stage里面可以定义多个jobjobs的特点是:

    • 相同stage中的jobs会并行执行
    • 任何一个job失败,整条Pipeline失败
  4. 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后台控制即可,无需记录。


全文结束