我试图运行一个脚本(最统一的),使用对接在幕后的CI。该脚本在droneci上按预期工作,但切换到CloudBuild,尚不清楚如何设置DinD。
对于droneci,我基本上使用了DinD,如这里所示,我的问题是,如何将代码转换为Google。有可能吗?
我在互联网上搜索CloudBuild wrt DinD的语法,却找不到任何东西。
发布于 2022-11-14 12:28:17
我想出了一种在CloudBuild中运行Docker(CloudBuild)的方法。要做到这一点,我们需要启动一个服务在后台与坞-撰写。您的docker-compose.yml脚本应该如下所示。
version: '3'
services:
dind-service:
image: docker:<dnd-version>-dind
privileged: true
ports:
- "127.0.0.1:2375:2375"
- "127.0.0.1:2376:2376"
networks:
default:
external:
name: cloudbuild在我的例子中,我没有问题使用18.03或18.09版本,以后的版本也应该有效。其次,将容器附加到云构建网络是很重要的。这样,dind容器将与在您的步骤中生成的每个容器位于同一个网络上。
要启动服务,需要向cloudbuild.yml文件添加一个步骤。
- id: start-dind
name: docker/compose
args: ['-f', 'docker-compose.yml', 'up', '-d', 'dind-service']要验证dind服务是否正常工作,只需创建ping步骤即可。
- id: 'Check service is listening'
name: gcr.io/cloud-builders/curl
args: ["dind-service:2375"]
waitFor: [start-dind]现在,如果它有效,您可以在后台使用dind正常运行脚本。重要的是传递DOCKER_HOST env变量,以便码头客户端能够找到对接引擎。
- id: my-script
name: my-image
script: myscript
env:
- 'DOCKER_HOST=tcp://dind-service:2375'请注意,脚本生成的任何容器都将位于dind服务中,因此,如果要对其执行任何请求,则不应该对http://localhost执行请求,而应该对http://dind-service执行请求。此外,如果要使用私有映像,则在运行脚本之前需要某种类型的身份验证。为此,您应该在运行脚本之前运行gcloud auth configure-docker --quiet。确保您的码头映像已经安装了gcloud。这将创建运行应用程序所需的身份验证凭据。凭据保存在与$HOME变量相关的路径中,因此确保应用程序能够访问它。例如,如果你使用毒理,你可能会有一些问题。
发布于 2022-11-10 13:27:55
云构建允许您从源代码中创建Docker容器映像。云SDK提供了易于使用此服务的container build子命令。
例如,下面是构建Docker映像的简单命令:
gcloud builds submit -t gcr.io/my-project/my-image
此命令将当前目录中的文件发送到Google,然后在一个Cloud上获取源代码,运行Docker,默认情况下将映像上传到集装箱登记处,Cloud运行用于构建映像的docker命令。您还可以通过自定义生成steps.If来自定义生成管道--您可以使用任意的Docker映像作为构建步骤,并且源代码是可用的,然后可以作为构建步骤运行单元测试。通过这样做,您总是使用相同的Docker映像运行测试。在云构建-测试运行-示例有一个演示存储库。本教程使用演示存储库作为其说明的一部分。
我还建议您查看具有类似用例的这些信息丰富的链接:
https://stackoverflow.com/questions/74305636
复制相似问题