繁体   English   中英

我可以运行 Docker 容器以在另一个 Google Cloud Build 步骤中使用吗?

[英]Can I run a Docker container to use in another Google Cloud Build step?

我想在 Docker 容器中运行一个新的 MySQL 实例作为云构建,然后在稍后的步骤中访问该 MySQL 数据库以运行单元测试。 这可能吗? 似乎我可以在构建步骤中运行 Docker 容器,但直到容器存在该步骤才完成 我希望这个 MySQL 容器保持运行,直到最终构建步骤完成。

FWIW 我想在 Rails 项目上的 Ruby 上使用它来运行 rspec 测试。 我目前使用 CloudSQL 实例来运行测试,但速度很慢,即使相同的测试在本地运行得很快。 将 Cloud Builder 的机器类型更改为强大的东西并没有帮助,所以我认为延迟是我最大的杀手,这就是为什么我想尝试一个对等的容器 MySQL 实例。

事实证明,至少有两种方法可以给这只猫剥皮:

  1. 使用docker-compose云构建器在 1 步中启动多个容器:MySQL 和一个测试运行器。 这里的缺点是该步骤永远不会完成,除非因为 MySQL 将在后台运行并且永远不会退出。 我想人们可以写一个包装器让它在几分钟后死掉。
  2. 实际上,您可以在早期构建步骤中使用-d启动一个容器,并确保它在cloudbuild docker 网络上,然后如果它们也在cloudbuild网络上,那么以后的步骤可以连接到它。 本质上,Mysql 步骤将快速“完成”,因为它只是以守护程序模式启动服务器,然后继续下一个构建步骤。 稍后,测试运行程序将针对新数据库运行测试,并在实际完成测试时完成其构建步骤。

我选择了选项 2,使用 dockerized MySQL 服务器,我的 16 分钟单元测试(在同一区域针对 CloudSQL 运行)缩短到 1.5 分钟。

AFAIK,你不能这样做。 每个步骤都是独立的,您不能运行后台步骤。

我的解决方案是让 MySQL 在与单元测试相同的步骤中运行,并在同一步骤中将 MySQL 作为后台进程运行。 很无聊(因为您必须在您的步骤中安装并运行 MySQL)但我没有更好的解决方案。

为了更方便使用,您可以为 Cloud Build 创建自己的自定义构建器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM