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)

  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管理页面

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

    点击允许用户

  3. runner注册

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

  4. leader创建用户组和项目

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

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

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

  5. employee fork项目

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

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

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

2. Specific Runners

分析:

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

配置:

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

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

3. group runners

分析:

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

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

如上图所示,一个用户组里面拥有``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一份到自己的工作目录下,如下图所示

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

配置:

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

(四)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.htmlcurl -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-runnerbrew services start gitlab-runner

2、GitLab-runner注册

我们打开gitlab网站,找到

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

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

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

完结撒花!!

gitlab-runner 三种runner创建和和使用相关推荐

  1. 使用三种方式创建Class字节码类文件对象

    /*** 使用三种方式创建Class字节码类文件对象** @author silence*/ public class Demo1 {public static void main(String[] ...

  2. 十分钟,学会使用js三种方法创建本地json数据文件

    前言 在干业务时,需要得到一份全国省市到街道的区划数据,刚好业务中连接了高德地图,高德地图又提供了区划的api,这下只需要把数据写到json里了.什么!你说你还不会用js创建json文件?没关系,只需 ...

  3. spring配置详解-三种对象创建方式_

    新建一个包,b_create,关于Spring创建对象的方式,咱们首先先介绍默认方式,我复制一个配置文件过来,在这个包下创建一个配置文件,把这些注释可以删掉了,现在咱们看到的情况,是常见的情况,这种情 ...

  4. Spring三种对象创建方式

    1.创建方式1:无参构造 我们先创建一个User类: public class User {private String name;private int age;public User() {Sys ...

  5. 常用的三种数据库创建存储过程并解析json

    此文章包含MySQL.Oracle和Sql Server这三种数据库的创建json格式入参并解析的主子表存储 文章目录 此文章包含MySQL.Oracle和Sql Server这三种数据库的创建jso ...

  6. 多线程初探:三种方式创建多线程详细示例

    多线程即在同一时间,可以做多件事情. 创建多线程有3种方式,分别是继承线程类,实现Runnable接口,匿名类 一:线程概念 首先要理解进程(Processor)和线程(Thread)的区别 进程:启 ...

  7. Go三种方式创建赋值map

    var与冒号相等,有了var就不用有冒号,有冒号就不用有var: package mainimport ("fmt" )func main(){// 方式一 :原生普通方式var ...

  8. 三种动态创建元素区别

  9. maven web项目导入sts_Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有 ...

最新文章

  1. Ubuntu系统---安NVIDIA 驱动后 CUDA+cuDNN 安装
  2. android 图片横竖判断_Android横竖屏切换及其对应布局加载问题详解
  3. 意识到自己的无知这就是进步
  4. 数理统计-5.2 样本数据的整理和显示
  5. 如何在支付宝成为增加个人服务器,支付宝支付,服务器如何生成支付订单
  6. 样本期望的期望 总体期望_您所在领域的人才期望开放
  7. oracle10g静默升级,Linux下静默安装,升级和删除Oracle10g客户端
  8. android:videoView
  9. 手机窃取PC信息,APT基础。
  10. c# 存储图片到oracle,c# winform 读取oracle中blob字段的图片并且显示到pictureBox里 保存进库...
  11. 数据仓库中的慢变化维度和快变化维度
  12. SpringCloud面试题及答案(2021年SpringCloud面试题大全带答案)
  13. 中钰睿泓分享:设计LOGO的思路和流程
  14. 如何在ant 的表单Form.Item下获取自定义表单元素的值
  15. LeetCode题目笔记——292. Nim 游戏 (脑筋急转弯C++/Python)
  16. 瑞利信号公式(级联信道,多信道之和,多个瑞利信号之和,概率密度函数)
  17. Xcode更新的那些事儿
  18. K8S使用Ceph RBD作为后端存储
  19. 计算机在生活中的应用论文2000字,浅议计算机在生活中的应用论文(2)
  20. c语言程序设计P320,《C程序设计》作业内容

热门文章

  1. Ant参考教程 ant教程
  2. 雅西高速交警列16处危险路段 司机需小心行驶
  3. 互联网电影院新战略5G+民族电影
  4. Android手机之间通过声音传输信息方法——声波通信(含工程代码)
  5. uview去除u-button按钮自带边框细线
  6. python 画图设置中文字体
  7. PS CS4 序列号永久使用
  8. 关于百度网盘下载过慢的解决方法
  9. 全键盘 linux 手机,当年青葱的岁月:10佳全键盘智能手机盘点
  10. 怎么用html实现QQ代挂功能,如何给自己的代挂网、代刷网、底部添加腾讯云智服客服代码...