【问题标题】:Can I run a Docker container to use in another Google Cloud Build step?我可以运行 Docker 容器以在另一个 Google Cloud Build 步骤中使用吗?
【发布时间】:2021-01-12 23:07:11
【问题描述】:

我想在 Docker 容器中作为 Cloud Build 运行一个全新的 MySQL 实例,然后在稍后的步骤中访问该 MySQL 数据库以运行单元测试。这可能吗? It appears as if I can run a Docker Container in a build step, but the step doesn't complete until the Container exists。我希望这个 MySQL 容器一直运行到最后的构建步骤完成。

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

【问题讨论】:

    标签: mysql ruby-on-rails docker rspec google-cloud-build


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      为方便使用,您可以create your own custom builder for Cloud Build

      【讨论】:

      猜你喜欢
      • 2018-10-17
      • 1970-01-01
      • 2022-01-03
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2019-01-14
      相关资源
      最近更新 更多