极狐GitLab SaaS Runner(Linux)

当您在 Linux 的 SaaS Runner 上运行作业时,Runner 位于弹性伸缩的临时虚拟机实例上。 虚拟机的默认区域是 ap-shanghai,并且多可用区实现高可用。

私有项目可用的 Runner 类型(x86-64)

对于 Linux 上的 SaaS Runner,极狐GitLab 提供了一系列用于私有项目的 Runner 类型。 对于基础版、专业版和旗舰版的用户,这些实例上的作业会消耗分配给您的命名空间的 CI/CD 分钟数。

  小型 Runner 中型 Runner 大型 Runner
规格 2 VCPU,4 GB RAM 2 VCPU,8 GB RAM 4 VCPU,16 GB RAM
极狐GitLab CI/CD 标签 saas-linux-small-amd64 saas-linux-medium-amd64 saas-linux-large-amd64
订阅版本 基础版、专业版和旗舰版 基础版、专业版和旗舰版 专业版和旗舰版

如果您在 .gitlab-ci.yml 中未指定 tags: 关键字,则默认使用 small Runner 类型。 在中型和大型 Runner 上运行的 CI/CD 作业所消耗的 CI 分钟数会多于小型 Runner 上运行的 CI/CD 作业所消耗的 CI 分钟数。 有关不同类型的 Runner 所使用的消耗系数,请参阅极狐GitLab SaaS Runner 消耗系数

消耗系数

默认情况下,单个作业的一分钟执行时间使用 1 CI/CD 分钟。流水线使用的 CI/CD 分钟总数是所有作业持续时间的总和。

公开项目和私有项目都启用了 CI/CD 分钟数配额。命名空间中每个月的基本 CI/CD 分钟数配额由许可证级别确定。

在 JihuLab.com 的共享 Runner 上运行作业的默认消耗系数为:

  • 1:内部、私有和公开项目。

极狐GitLab SaaS Runner 消耗系数

在上述消耗系数的基础上,使用不同类型的 Runner 还需要计算额外的消耗系数。有关 CI/CD 分钟数的更多内容,请参见如何计算 CI/CD 分钟数

  saas-linux-small-amd64 saas-linux-medium-amd64 saas-linux-large-amd64
CI/CD 分钟数消耗系数 1 2 3

为作业打标签示例

如果您想使用 small 之外的其他 Runner 类型,您可以在作业中添加 tags: 关键字。 例如:

stages:
  - Prebuild
  - Build
  - Unit Test

job_001:
 stage: Prebuild
 script:
  - echo "this job runs on the default (small) instance"

job_002:
 tags: [ saas-linux-medium-amd64 ]
 stage: Build
 script:
  - echo "this job runs on the medium instance"


job_003:
 tags: [ saas-linux-large-amd64 ]
 stage: Unit Test
 script:
  - echo "this job runs on the large instance"

Linux 设置上的 SaaS Runner

以下是 Linux 上的 SaaS Runner 的设置:

设置 JihuLab.com 默认
执行器 docker+machine -
默认 Docker 镜像 ruby:3.1 -
privileged(运行 Docker in Docker true false
  • 缓存:这些 Runner 共享一个存储在 Tencent Cloud Object Storage(COS)存储桶中的分布式缓存。 14 天内未更新的缓存内容会基于对象生命周期管理策略进行自动删除。

  • 超时设置:无论在项目中配置的超时时间是多少,由 Linux 上的 SaaS Runner 处理的作业都会在 3 小时后超时

note SaaS runner 实例配备了 25 GB 的存储卷。存储卷的底层磁盘空间由操作系统、Docker 镜像和已克隆仓库的副本共享。这意味着您的作业可以使用的可用磁盘空间少于 25 GB

预克隆脚本(已废弃)

caution 此功能废弃于 15.9 版本,并计划删除于 16.0 版本。使用 pre_get_sources_script 代替。此变更是一个突破性的变化。使用 Linux 上的 SaaS runner,您可以在 runner 上尝试运行 git initgit fetch,下载极狐GitLab 仓库之前在 CI/CD 作业中运行命令。pre_clone_script 可用于:
  • 使用代码库数据播种构建目录
  • 向服务器发送请求
  • 从 CDN 下载 assets
  • 任何其他必须在 git init 之前运行的命令

要使用此功能,请定义一个名为 CI_PRE_CLONE_SCRIPTCI/CD 变量,其中包含一个 bash 脚本。

note CI_PRE_CLONE_SCRIPT 变量在极狐GitLab SaaS Windows 或 macOS runner 上无效。

config.toml

config.toml 的完整内容为:

note 不公开的设置显示为 X

Google Cloud Platform

concurrent = X
check_interval = 1
metrics_server = "X"
sentry_dsn = "X"

[[runners]]
  name = "docker-auto-scale"
  request_concurrency = X
  url = "https://gitlab.com/"
  token = "SHARED_RUNNER_TOKEN"
  pre_clone_script = "eval \"$CI_PRE_CLONE_SCRIPT\""
  executor = "docker+machine"
  environment = [
    "DOCKER_DRIVER=overlay2",
    "DOCKER_TLS_CERTDIR="
  ]
  limit = X
  [runners.docker]
    image = "ruby:3.1"
    privileged = true
    volumes = [
      "/certs/client",
      "/dummy-sys-class-dmi-id:/sys/class/dmi/id:ro" # Make kaniko builds work on GCP.
    ]
  [runners.machine]
    IdleCount = 50
    IdleTime = 3600
    MaxBuilds = 1 # For security reasons we delete the VM after job has finished so it's not reused.
    MachineName = "srm-%s"
    MachineDriver = "google"
    MachineOptions = [
      "google-project=PROJECT",
      "google-disk-size=25",
      "google-machine-type=n1-standard-1",
      "google-username=core",
      "google-tags=gitlab-com,srm",
      "google-use-internal-ip",
      "google-zone=us-east1-d",
      "engine-opt=mtu=1460", # Set MTU for container interface, for more information check https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3214#note_82892928
      "google-machine-image=PROJECT/global/images/IMAGE",
      "engine-opt=ipv6", # This will create IPv6 interfaces in the containers.
      "engine-opt=fixed-cidr-v6=fc00::/7",
      "google-operation-backoff-initial-interval=2" # Custom flag from forked docker-machine, for more information check https://github.com/docker/machine/pull/4600
    ]
    [[runners.machine.autoscaling]]
      Periods = ["* * * * * sat,sun *"]
      Timezone = "UTC"
      IdleCount = 70
      IdleTime = 3600
    [[runners.machine.autoscaling]]
      Periods = ["* 30-59 3 * * * *", "* 0-30 4 * * * *"]
      Timezone = "UTC"
      IdleCount = 700
      IdleTime = 3600
  [runners.cache]
    Type = "gcs"
    Shared = true
    [runners.cache.gcs]
      CredentialsFile = "/path/to/file"
      BucketName = "bucket-name"