我的maven构建文件运行一个集成测试,我使用io.fabric8:docker-maven-plugin
来启动一个测试运行环境,在生成的环境中运行了几个东西,但为了简短起见,主要是一个REST服务器,我正在测试的代码需要与之通信。
它在本地运行得非常好,我使用mvn verify
,运行集成测试,启动环境,然后关闭环境的任何一端,没有问题。
然而,我也希望这个构建在GCP Cloud Build中运行。几乎是这样。环境成功启动,包括REST服务器以及REST服务器与之对话的postgres示例,并且连接正常。但当我的测试代码尝试与REST服务器对话时,连接失败。
我有REST服务器的端口声明为8080:8080,即8080端口暴露在本地机器上。这在我自己的机器上工作。它不工作的云构建虽然。我看到某处云构建喜欢使用自己的网络cloudbuild
,我需要定义该网络在一个docker-compose文件,如下所示:
networks:
default:
external:
name: cloudbuild
但是我没有使用docker-compose文件,我在pom.xml文件中io.fabric8:docker-maven-plugin
项下定义了要运行的图像等,fabric 8文档中没有明确说明如何指定它,我也不清楚在此情况下,是否需要将localhost
引用更改为其他内容,尽管我尝试将它们改为cloudbuild
,但没有帮助。
1条答案
按热度按时间gopyfrb31#
我找到了答案here,我放弃了maven插件的方法,在
cloudbuild.yaml
文件中启动docker compose,如下所示:(yes,我的项目名为
liontamer
,docker文件在一个名为liontamer-web
的模块中)。注意,这里有两个docker合成文件,第二个包含以下内容:这意味着它在Cloud Build下运行时使用正确的网络名称。
cloudbuild.yaml
文件的其余部分如下所示:注意构建中的
waitFor
是很重要的,因为我认为如果没有找到waitFor
,它会在运行之前清理docker compose的内容。我不确定最后一步有多重要,这一步将docker compose关闭,但清理似乎是有礼貌的。还有一件事我不得不改变,我的集成测试代码必须通过服务名称引用Docker服务。当在本地运行时,我在
localhost
上公开了端口,所以我可以使用正确端口号的localhost
。在Cloud Build下不是这样。所以对于我需要从IT访问的一个REST服务器,我改变了它。的主机引用从localhost
到Docker合成文件中的服务名称。当然,这意味着我不能在本地运行它,除非我做一些编辑。但这已经足够好了。