配置GitLab运行程序
在GitLab CI中,运行程序运行中定义的代码.gitlab-ci.yml
.它们是隔离的(虚拟)机器,通过GitLab CI的协调器API获取作业。
Runner可以特定于某个项目,也可以服务于GitLab CI中的任何项目。服务于所有项目的运行程序称为共享运行程序。
理想情况下,GitLab Runner不应该安装在与GitLab相同的机器上。读了需求文档获取更多信息。
共享的、特定的、分组的跑步者
后安装转轮,您可以将其注册为共享或特定。如果您拥有GitLab实例的管理员访问权限,则只能注册共享Runner。共享Runner和特定Runner之间的主要区别是:
- 共享的跑步者对于多个项目之间有类似要求的工作非常有用。您可以使用单个或少量的runner来处理多个项目,而不是让多个runner为多个项目空闲。这使得维护和更新它们更加容易。共享运行程序使用合理使用队列.与使用FIFO队列的特定runner相比,这可以防止项目创建数百个作业,从而导致消耗所有可用的共享runner资源的情况。
- 特定的跑步者对于有特殊要求的工作或有特定需求的项目很有用。如果某个作业有特定的要求,那么您可以考虑到这一点来设置特定的Runner,而不必为所有Runner都这样做。例如,如果您想要部署某个项目,您可以设置一个特定的Runner来拥有正确的凭据。的标签的使用在这种情况下可能有用。特定的运行程序使用先进先出队列中。
- 组选手当您在一个组下有多个项目,并且希望所有项目都能访问一组跑步者时,它很有用。组运行程序使用先进先出队列中。
仅为指定项目运行的特定运行程序。共享的Runner可以为启用了该选项的每个项目运行作业允许共享running下> CI/CD.
对CI活动有高要求的项目也可以从使用特定的runner中受益。通过拥有专门的Runner,您可以保证Runner不会被其他项目的工作所耽误。
您可以设置一个特定的Runner供多个项目使用。共享Runner的不同之处在于,您必须显式地启用每个项目,以便Runner能够运行其作业。
特定的运行程序不会自动与分叉的项目共享。fork复制克隆存储库的CI设置(作业、允许共享等)。
注册一个共享的Runner
如果您是GitLab实例的管理员,则只能注册共享Runner。
的共享运行器令牌
管理/跑步者
页面
共享运行程序在GitLab 8.2中默认启用,但可以使用禁用共享running按钮,显示在每个项目的设置➔CI/CD页面。以前版本的GitLab默认禁用共享跑步器。
注册一个特定的跑步者
注册一个特定的Runner可以通过两种方式完成:
- 使用项目注册令牌创建Runner
- 将共享的运行程序转换为特定的运行程序(单向,仅限管理员)
用项目注册令牌注册特定的Runner
要在没有GitLab实例管理权限的情况下创建一个特定的Runner,请访问GitLab中您想让Runner工作的项目:
- 去> CI/CD获取令牌
- 登记跑步者
注册组跑步者
创建组Runner需要组的Master权限。要创建一个组Runner,请访问GitLab中你想让Runner工作的组:
- 去> CI/CD获取令牌
- 登记跑步者
使现有的共享运行程序特定
如果您是GitLab实例的管理员,则可以将任何共享的Runner转换为特定的Runner,但不能反过来。请记住,这是一个单向的过渡。
- 去管理区域的跑步者概述>跑步者(
/管理/跑步者
),然后找到你的跑步者 - 启用下面的任何项目限制此Runner的项目用在奔跑者身上
从现在开始,共享的Runner将特定于那些项目。
锁定某个特定的Runner,使其无法为其他项目启用
您可以配置一个Runner,将其专门分配给一个项目。当一个Runner以这种方式锁定时,它就不能再为其他项目启用。您可以在第一次使用时启用此设置登记跑步运动员并且可以在每个Runner的设置下进行更改。
锁定/解锁一个奔跑者:
- 访问项目的> CI/CD
- 找到您希望锁定/解锁的Runner,并确保它已启用
- 点击铅笔按钮
- 检查锁定当前项目选项
- 点击保存更改以便更改生效
将Runner分配给另一个项目
如果您是某个项目的Master,而该项目分配了特定的Runner,而该Runner不是仅锁定该项目,您也可以在您具有主权限的任何其他项目上启用Runner。
启用/禁用项目中的Runner:
- 访问项目的> CI/CD
- 找到您希望启用/禁用的Runner
- 点击启用此项目或禁用此项目
请注意:考虑到如果您没有将特定的Runner锁定到特定的项目,项目中任何具有Master角色的用户都可以将您的Runner分配到另一个任意项目,而不需要您的授权,因此请谨慎使用。
管理员可以为项目启用/禁用特定的Runner:
- 导航到管理>个跑步者
- 找到您希望启用/禁用的Runner
- 在Runner上单击编辑
- 点击启用或禁用关于项目
保护运动员
介绍了在GitLab 10.0中。
你可以保护跑步者不泄露敏感信息。当Runner受到保护时,Runner只选择在上创建的作业受保护的分支或保护标签,而忽略了其他工作。
保护/取消保护跑步者:
- 访问项目的> CI/CD
- 找到一个你想要保护/取消保护的Runner,并确保它是启用的
- 单击跑步者名称旁边的铅笔按钮
- 检查受保护的选项
- 点击保存更改以便更改生效
手动清除runner缓存
读清除缓存.
共享跑步者如何选择工作
共享运行程序遵循一个进程队列,我们称之为公平使用。公平使用算法试图将来自当前在共享运行程序上运行的作业数量最少的项目的作业分配给共享运行程序。
示例1
我们有以下工作在排队:
- 项目1的工作1
- 项目1的工作2
- 项目1的工作3
- 项目2的工作4
- 项目2的工作5
- 项目3的工作6
在合理使用算法中,作业的分配顺序如下:
- 首先选择作业1,因为它具有来自没有运行作业的项目(即所有项目)的最低作业数。
- 接下来是作业4,因为4现在是来自没有运行作业的项目的最低作业数(项目1有一个正在运行的作业)
- 接下来是作业6,因为6现在是来自没有运行作业的项目的最低作业数(项目1和2有正在运行的作业)
- 其次是作业2,因为在运行作业数量最少的项目中(每个项目有1个作业),它是最低的作业数
- 接下来是作业5,因为项目1现在有2个作业在运行,在项目2和项目3之间,作业5是剩下的最小的作业号
- 最后我们选择Job 3…因为这是唯一剩下的工作了
示例2
我们有以下工作在排队:
- 项目1的作业1
- 项目1的作业2
- 项目1的作业3
- 项目2的作业4
- 项目2的作业5
- 项目3的工作6
在合理使用算法中,作业的分配顺序如下:
- 首先选择作业1,因为它具有来自没有运行作业的项目(即所有项目)的最低作业数。
- 我们完成了工作1
- 接下来是作业2,因为在完成作业1之后,所有项目都有0个作业再次运行,而2是可用的最低作业数
- 接下来是作业4,因为当项目1运行作业时,4是不运行作业的项目(项目2和项目3)的最低数量。
- 我们完成任务4
- 接下来是作业5,因为在完成作业4之后,项目2不再运行作业
- 接下来是作业6,因为项目3是唯一没有运行作业的项目
- 最后我们选择Job 3…因为,再一次,这是唯一剩下的工作(谁说1是最孤独的数字?)
有效使用共享运行器
如果您计划使用共享的runner,有几件事您应该记住。
使用标签
您必须设置一个Runner,以便能够运行它在所共享的项目上可能遇到的所有不同类型的作业。如果没有标签,这对于大量的项目来说是有问题的。
通过标记Runner可以处理的作业类型,您可以确保共享的Runner也可以只运行它们能够运行的作业.
例如,在GitLab中,如果运行者包含运行rails测试套件的适当依赖项,那么它们就被标记为“rails”。
防止有标签的跑步者选择没有标签的工作
您可以配置一个Runner以防止它选择带标签的工作当Runner没有分配标签时。您可以在第一次使用时启用此设置登记跑步运动员并且可以在每个Runner的设置下进行更改。
要让Runner选择带标签/无标签的作业:
- 访问项目的设置➔CI/CD
- 找到您希望的Runner并确保它已启用
- 点击铅笔按钮
- 检查运行无标记作业选项
- 点击保存更改以便更改生效
设置运行器的最大作业超时
对于每个Runner,您可以指定一个最大作业超时时间.这样的超时,如果小于项目定义超时,将优先。这个特性可以通过设置一个可笑的大超时(例如一个星期)来防止共享运行器被项目占用。
在未配置时,Runner将不会覆盖项目超时。
这个功能是如何工作的:
例1 -运行超时大于项目超时
- 你设置最大作业超时时间跑步者需要24小时
- 你设置CI / CD超时对于一个项目来说2小时
- 你开始一份工作
- 作业如果运行时间较长,将超时2小时
例2 -未配置运行超时
- 你把最大作业超时时间来自运行器的配置
- 你设置CI / CD超时对于一个项目来说2小时
- 你开始一份工作
- 作业如果运行时间较长,将超时2小时
例3 -运行超时小于项目超时
- 你设置最大作业超时时间对于跑步者来说30分钟
- 你设置CI / CD超时对于一个项目需要2个小时
- 你开始一份工作
- 作业如果运行时间较长,将超时30分钟
小心敏感信息
与一些跑步者执行人,如果可以在Runner上运行作业,则可以访问它运行的任何代码并获得Runner的令牌。使用共享的Runner,这意味着在Runner上运行作业的任何人都可以访问在Runner上运行的任何人的代码。
此外,因为您可以访问Runner令牌,因此可以创建一个Runner的克隆并提交假作业。
通过限制在大型公共GitLab实例上使用共享runner,控制对GitLab实例的访问,并使用更安全的方法,可以轻松避免上述问题跑步者执行人.
叉
每当一个项目被分叉时,它都会复制与之相关的作业的设置。这意味着,如果您为一个项目设置了共享运行程序,并且有人对该项目进行了分叉,那么共享运行程序也将为这个项目的工作提供服务。
《奔跑者》中的攻击载体
前面简单提到过,但是《running》的以下内容是可以利用的。我们一直在寻找可以缓解这些问题的贡献安全注意事项.
重置项目的注册令牌
如果您认为某个项目的注册令牌已泄露,则应该重置它们。推荐使用,因为这样的令牌可以用来将另一个Runner注册到这个项目。接下来,它可能用于获取秘密变量的值或克隆项目代码,通常攻击者可能无法使用这些代码。
重置令牌:
- 去> CI/CD指定工程项目
- 扩大管道一般设置部分
- 找到跑步者令牌表单字段,并单击显示值按钮
- 删除该值并保存表单
- 刷新页面后,展开跑步者设置部分并检查注册令牌-它应该被更改
从现在开始,旧的令牌不再有效,将不允许向项目注册新的Runner。如果您正在使用任何工具来提供和注册新的runner,那么您现在应该将所使用的令牌更新为新值。
确定Runner的IP地址
介绍了在GitLab 10.6中。
了解一个运行程序的IP地址可能很有用,这样您就可以对该运行程序进行故障排除。在轮询作业时,GitLab通过查看它向GitLab发出的HTTP请求的来源来存储和显示IP地址。IP地址总是保持最新的,所以如果Runner IP发生了变化,它将在GitLab中自动更新。
共享运行程序和特定运行程序的IP地址可以在不同的地方找到。
共享的跑步者
要查看共享Runner的IP地址,您必须拥有GitLab实例的管理员权限。要确定这一点:
- 访问管理员区➔概述➔跑步者
- 在表中查找Runner,您应该看到“IP地址”一列
特定的跑步者
您可以通过以下方式找到特定项目的Runner的IP地址:
- 访问项目的设置➔CI/CD
- 找到跑步者,点击它的ID链接到详细信息页面
- 在详细信息页面上,您应该看到一行“IP地址”