gitlab-runner 的创建和使用

(一)runner使用背景

对于我们项目开发来说,为了防止主项目被污染,在多人协作开发的时候,要fork一个子项目到自己的工作目录下,切分支然后进行修改之后,再从当前项目中提一个merge request到主项目中,主项目merge负责人觉得没问题的时候,再进行主项目分支和合并。

对于一个开发小组来说,利用gitlab的CI CD帮助我们做代码风格的检查,镜像的打包是一件非常方便的事情。而想通过使用CI CD的话,则需要配置runner。一般来说,我们都会配置一个公共的runner来供一个开发小组去使用。

而在新人加入一个用户组根据主项目fork出来的项目的时候,并没有看到主项目所配置的runner。需要给新人赋予主项目的maintainer权限时候才能看到对应的runner,并且回收掉maintainer权限时候runner依然存在,不影响后续使用。对于这种runner的配置方式感到繁琐且不符合规范,maintainer权限不能够随便赋予他人,而应当赋予开发者的权限。这里探讨有没有一种规范且方便的赋予runner的方法。

(二)runner使用需求

  • 配置的runner希望能够被所有人使用,因为涉及到代码风格检查,镜像打包上传等公共操作
  • 方便配置

(三)三种runner类型

官方描述:https://docs.gitlab.com/ee/ci/runners/runners_scope.html

  • Shared runners are available to all groups and projects in a GitLab instance.
  • Group runners are available to all projects and subgroups in a group.
  • Specific runners are associated with specific projects. Typically, specific runners are used for one project at a time.

1. Shared Runners

分析:

shared Runners 是作用于整个gitlab的项目的,所以要gitlab的admin权限来进行配置注册

Gitlab 之 mac 安装 gitlab : https://juejin.cn/post/6844903984554049544

shared runners是gitlab 管理员统一配置的runner,只要你的项目是在当前的gitlab,就可以使用shared runner

配置:
  1. 首先我们先注册两个用户,来模拟我们的实际开发中的两个对象,分别代表领导(leader)和员工(employee)

image-20210820163303710

  1. gitlab中注册的用户需要我们在管理员端进行审核才能够登陆,首先我们先去设置一下管理员的密码。如果已经设置可以直接去第三步。

    # 本地起的直接执行命令,docker起的要先进入容器再执行命令
    > gitlab-rails console -e production
    # 接下来会进入一个终端页面进行操作,可能要稍等一会
    >> u=User.where(id:1).first # 选择root用户
    >> u.password = "12345678"
    >> u.password_confirmation = "12345678"
    >> u.save! # 出现true则表示成功
    
  2. 登陆授权

    点击menu进入admin管理页面

    image-20210820163938701

    这里可以看到我们刚刚申请注册的用户

    image-20210820164041663

    点击允许用户

    image-20210820164118808

  3. runner注册

    点击runner注册runner(如果不会注册runner,请看文章最下面)

    image-20210820164432208

  4. leader创建用户组和项目

    此时我们登陆leader用户创建一个用户组,并且在用户组下面创建一个项目

    image-20210820164610498

    image-20210820165217992

    再添加员工employee进入用户组里面,这样employee就可以看到这个项目,我们赋予员工developer权限

    image-20210820165406732

    点击查看刚刚创建的项目,查看runner,可以看到shared runners已经存在了

    image-20210820165540592

  5. employee fork项目

    我们再登陆employee用户查看项目,可以看到目前我们的权限是develpoer权限

    image-20210820165737826

    按照开发规范流程,fork项目到自己的工作目录下,进行查看

    image-20210820165930315

    我们查看一下runner,可以看到已经存在一个shared runners了

    image-20210820170025906

2. Specific Runners

分析:

specific runners是最特殊的runner,是配到我们具体项目中的,但是可以选择是否让runner锁定项目,来达到和其他项目做到共享runner的目的

配置:

specific runners是在自己的fork出来的项目中进行配置注册的,例如我们刚刚fork出来的项目为例子,这里会有一个URL和token,填写这里面的信息即可注册。(如果不会注册runner,请看文章最下面)

image-20210820170556264

在配置runner之后编辑,取消runner锁定项目,临时给新人赋予maintainer权限,此时新人能够看到runner存在,点击enable for this project,撤回主项目maintainer权限之后,runner依然存在(目前我们使用的就是 Specific Runners )

image-20210820112320134

image-20210820111623235

3. group runners

分析:

group runner 可见需要满足两个条件

  1. 用户在用户组里面
  2. 项目在用户组里面

image-20210819182718602

如上图所示,一个用户组里面拥有``zhangsanlisiwangwu等用户,注册有group runner还有一个项目group/project A`

在此项目下的所有用户在``group/project A项目下都能看到group runner(前提是用户拥有group/project A的**所有者权限**,即能看到项目的setting,其实赋予developer权限的话,应该也是能够使用runner的,只是不能设置而已)。对于group用户组下zhangsan来说,对于project B即使拥有project B的所有者权限,也不能看到runner `(这一点很容易理解)。

根据我们的开发规范来说,用户组里的人想要修改项目,则要先从主项目中fork一份到自己的工作目录下,如下图所示

image-20210819225114491

但是这样以来的话,fork出来的的project A就不在group用户组下了,即fork出来的子项目是一个和原项目无关的项目(priject ID也不一样),当然也就看不到我们想看到的runner了。想要通过这种方式让所有人看到同一个runner不可行

配置:

group runners配置则是在用户组里面配置的,配置的条件就是你必须要有用户组的所有者权限,我们这里进入leader用户,进行配置。

image-20210820171009436

(四)runner注册

1、GitLab-runner安装

(1)linux安装

安装GitLab runner地址:https://docs.gitlab.com/runner/install/ 上面安装到不同操作系统的教程,我的是debian虚拟机。

#Replace ${arch} with any of the supported architectures, e.g. amd64, arm, arm64
#A full list of architectures can be found here https://gitlab-runner-uownloads.s3.amazonaws.com/latest/index.html

curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_${arch}.deb"

这个是官网的示例代码,我们要去到 https://gitlab-runner-downloads.s3.amazonaws.com/latest/index.html 这里面找到我们对应的操作系统版本,我的是这个

在这里插入图片描述

下载下来之后就是安装了,安装也很简单,对应自己下载的版本就好了

dpkg -i gitlab-runner_<arch>.deb

输入gitlab-runner出现如下信息,即安装完成

在这里插入图片描述

(2)mac安装

官方教程:https://docs.gitlab.com/runner/install/osx.html

brew install gitlab-runner

brew services start gitlab-runner

2、GitLab-runner注册

我们打开gitlab网站,找到

image-20210820171951344

在终端输入命令sudo gitlab-runner register(一定要运行在root权限下)按照提示输入对应的信息

在这里插入图片描述

注册完成之后,页面上就应该出现一个runner了,类似于这种

image-20210820172236334

有时候runner会出现假运行状态,即CI任务一直处于pending状态。这时候去runner的机器上面执行命令gitlab-runner run即可。

完结撒花!!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐