首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >协调CI系统中的作业容器和卷

协调CI系统中的作业容器和卷
EN

Stack Overflow用户
提问于 2016-10-18 07:39:26
回答 1查看 730关注 0票数 1

我正在开发一个基于Kubernetes的CI系统,在这个系统中,每个构建都是作为一个工作来启动的。我运行这些就像无人机CI一样,在构建的每一步都是一个单独的容器。在我的k8s CI案例中,我将每个步骤作为一个容器运行在一个Job中。我想要的行为如下:

  1. 创建一个生成卷。所有的步骤都会安装这个。根据所需的执行顺序,所有步骤定义为单独的容器,从而启动一个作业。
  2. git步骤(容器)运行,挂载共享卷并克隆源。
  3. “运行测试”步骤将共享卷挂载到预装所有依赖项的映像生成的容器中。
  4. 如果我们的测试通过了,那么我们将继续执行Slack公告步骤,这是宣布我们成功的另一个容器。

我目前正在使用一个带有emptyDir卷的单一作业荚作为共享构建空间。我这样做是为了不需要在节点/Pods之间移动卷时等待。这似乎也是确保在构建出口自动清理东西的好方法。

问题是,如果使用上述所有步骤启动多容器作业,它们将同时执行。这意味着“运行测试”步骤可以在“git”步骤之前启动。

我曾想过要在每个容器中找到某种逻辑,让它们睡觉,直到解锁/“我完蛋了!”文件出现在共享卷中,表示已完成依赖步骤,但这似乎足够复杂,以便在继续之前询问其他选项。

我可以看到屈服和使用多个工作与协调的工作,但然后我被困在卷索赔领域(这比emptyDir要复杂得多)。

总结一下这个问题:

我目前的方法值得追求吗?如果是的话,如何排列作业的容器?我希望能想出一些能在AWS/GCE和裸金属部署上工作的东西。

我不太愿意接触PVCs,因为管理和清理并不是我想让我的系统负责的事情。我也不想要求网络存储时,emptyDir可以工作这么好。

编辑:请不要建议使用另一个现有的CI系统,因为这是没有帮助的。我这样做是为了我自己的满足感和实验。除了我的玩具,这个修补程序的CI系统不太可能成为任何东西。

EN

回答 1

Stack Overflow用户

发布于 2016-10-19 19:05:15

如果您希望在容器中运行所有构建步骤,那么GitLab CI汇合CI可能更适合您。我没有使用fabric8.io的经验,但是Frank.Germain建议它也能工作。

一旦您开始变得足够复杂,需要在容器之间发送信令来命令构建步骤,那么使用预滚的东西就会更有效率。

作为一种选择,您可以使用静态卷(即宿主路径作为工件缓存),并按顺序从当前容器触发下一个容器,在两个阶段之间挂载相同的卷。然后,您可以在构建的开始或结束添加一个步骤,以便在管道运行后进行“清理”。

需要明确:我不认为滚动您自己的CI是处理此问题的最有效方法,因为已经有一些系统可以完成您正在寻找的任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40102308

复制
相关文章

相似问题

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