首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Gitlab CI在每个成功作业后终止spot实例

使用Gitlab CI在每个成功作业后终止spot实例
EN

Stack Overflow用户
提问于 2021-01-20 05:23:50
回答 1查看 616关注 0票数 1

从几天以来我一直在Gitlab CI附近工作。我已经用spot实例将EC2 -ASG设置为runner。

我想知道我们是否有任何解决方案,以便在工作成功后立即删除spot实例。

下面是gitlab运行程序的配置。

代码语言:javascript
复制
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"
    ]

我在上面的配置中有两个转轮,即外壳和对接机.

目前,它根本没有删除spot船队,如果我设置了amazonec2-block-duration-minutes=20标志,我猜它会将它保持20分钟的spot实例,然后删除它。

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

在上述对接机运行程序中,需要进行哪些配置更改才能实现这一点?

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

如果需要更多关于同样的信息,请告诉我。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-01-26 17:51:42

昨天,我用如何监控跑步平台的方式回答了一个类似的问题。完整的帖子在这里:Start build on a windows ec2 with gitlab runner

我所做的,我有一个小的应用程序运行在某处,不断轮询各种Gitlab API,以检索挂起的作业数量和可用运行程序的数量。然后,根据我定义的一些阈值,我要么增加跑步者的数量,要么减少他们,直到达到一个阈值。

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

  1. 点击Runners以获取运行者的数量,
  2. 点击Projects以获取所有项目,并对其进行筛选,只允许启用管道/CI的项目。您也可以存储这个号码,这样您就不必每次调用。
  3. 为每个项目命中管道API以获取所有未决/正在执行的管道。
  4. 为每个管道命中乔布斯API以获得所有待定作业。如果没有运行程序但有未决作业,则添加
  5. 。如果有超过一个运行程序但小于最大运行程序,则添加一个运行程序。如果有超过作业阈值,则添加一个
  6. 。如果有一个或多个运行程序,则在最大值上添加一个亚军。

H 114如果有一个或多个运行程序,则添加一个

  1. 。销毁一个休眠运行程序(并从Gitlab取消它的注册,这样Runners调用就会保持干净)。睡一两分钟,然后从顶部循环。

所使用的各种API是:

https://docs.gitlab.com/ee/api/projects.html

  • Pipelines

  • Whatever,您需要在云提供程序中创建和销毁实例。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65803525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档