1

几天以来,我一直在围绕 Gitlab CI 工作。我已将 EC2 -ASG 设置为带有 Spot 实例的运行器。

我想知道我们是否有任何解决方案可以在作业成功后立即删除现场实例。

以下是 gitlab 运行器配置。

concurrent = 2
check_interval = 3

[session_server]
  session_timeout = 1800

[[runners]]
  name = "shell-runner"
  url = "https://gitlab.com/"
  token = "xxxx-xxxx"
  executor = "shell"
  limit = 1
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]

[[runners]]
  name = "docker-machine-runner"
  url = "https://gitlab.com/"
  token = "xxxx-xyxyxyxy"
  executor = "docker+machine"
  limit = 1
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "docker:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
  [runners.machine]
    IdleCount = 0
    IdleTime = 1800
    MaxBuilds = 100
    MachineDriver = "amazonec2"
    MachineName = "gitlab-docker-machine-%s"
    MachineOptions = [
    "amazonec2-region=us-west-2", 
    "amazonec2-ssh-user=ubuntu", 
    "amazonec2-vpc-id=vpc-xxxx", 
    "amazonec2-subnet-id=subnet-xxx", 
    "amazonec2-use-private-address=true", 
    "amazonec2-instance-type=t3a.medium", 
    "amazonec2-ami=ami-xxx", 
    "amazonec2-zone=a",
    "amazonec2-security-group=gitlab-runner-sg", 
    "amazonec2-request-spot-instance=true", 
    "amazonec2-spot-price=0.025"
    ]

我在上述配置中有两个运行器,即 shell 和 docker-machine。

目前,它根本没有删除现场队列,如果我设置amazonec2-block-duration-minutes=20标志,我猜它会将现场实例保留 20 分钟,然后将其删除。

我正在寻找一种解决方案,以便在每个作业成功后删除现场实例和/或它可以等待某个时间等待其他作业并终止。

在上面的 docker-machine-runner 中,实现这一点需要进行哪些配置更改?

或者我们可以做任何其他自动化来实现它吗?

如果需要更多信息,请告诉我。

提前致谢。

4

1 回答 1

0

我昨天回答了一个类似的问题,关于我如何监控我的跑步者平台。完整的帖子在这里:使用 gitlab runner 在 windows ec2 上开始构建

我做什么我有一个小应用程序在某个地方运行,它不断地轮询各种 Gitlab API 以检索待处理作业的数量和可用运行器的数量。然后,根据我定义的一些阈值,我将增加或减少跑步者的数量,直至达到一个阈值。

例如,假设我一次最多需要 5 个跑步者,并且在增加跑步者数量(最多 5 个)之前,我希望队列中的作业不超过 5 个。这是我要做的(从链接的帖子复制):

  1. 点击 Runners API 以获取跑步者的数量。
  2. 点击 Projects API 以获取所有项目并对其进行过滤以仅保留启用了管道/CI 的项目。您也可以存储此号码,因此您不必每次都拨打此电话。
  3. 为每个项目点击 Pipelines API 以获取所有待处理/正在进行的管道。
  4. 为每个管道点击 Jobs API 以获取所有待处理的作业。
  5. 如果没有跑步者但有待处理的作业,请添加 1 个跑步者。
  6. 如果跑步者超过 1 人但小于最大跑步者,并且超过工作阈值,则将 1 名跑步者添加到最大值。
  7. 如果有 1 个或多个运行器并且没有待处理的作业,则销毁一个休眠运行器(并从 Gitlab 中注销它,以便 Runners API 调用保持干净)。睡一两分钟,然后从顶部循环。

使用的各种 API 有:

于 2021-01-26T17:51:42.923 回答