无法从GitLab CI/CD中的测试访问活动mq服务

无法从GitLab CI/CD中的测试访问活动mq服务,gitlab,gitlab-ci-runner,masstransit,Gitlab,Gitlab Ci Runner,Masstransit,首先,关于服务或docker容器,GitLab free edition中有任何限制吗?它说我有GitLab Enterprise edition 11.11.0-rc1-ee 我有以下资料: 我个人回购的免费gitlab账户 包装MassTransit并使用ActiveMq作为传输层的项目 一个GitLab.GitLab ci.yml,用于恢复、生成代码、运行单元测试和集成测试,并启动服务webcenter/activemq:5.14.3,以执行集成测试 我的集成测试无法连接到活动mq的启

首先,关于服务或docker容器,GitLab free edition中有任何限制吗?它说我有GitLab Enterprise edition 11.11.0-rc1-ee

我有以下资料:

  • 我个人回购的免费gitlab账户
  • 包装MassTransit并使用ActiveMq作为传输层的项目
  • 一个GitLab
    .GitLab ci.yml
    ,用于恢复、生成代码、运行单元测试和集成测试,并启动服务
    webcenter/activemq:5.14.3
    ,以执行集成测试
我的集成测试无法连接到活动mq的启动容器。尝试主机名“127.0.0.1”或“localhost”或“0.0.0.0”并不重要 我一直看到
ActiveMQ连接失败:NMSConnectionException

如果我在运行本地activemq服务器的情况下在本地运行测试(我只需下载二进制文件,设置JAVA_HOME变量并运行bin/activemq start),那么一切都能正常工作

有趣的是,我在GitLab Enterprise Edition 11.10.4-ee的不同管道上运行了相同的测试和相同的代码,一切都进行得更快,我的测试正确地指向“localhost”服务器名称并使用
webcenter/activemq:5.14.3
服务执行

更新1:这是我的
.gitlab ci.yml

#Stages
stages:
  - ci
  - pack

#Global variables
variables:
  GITLAB_RUNNER_DOTNET_CORE: mcr.microsoft.com/dotnet/core/sdk:2.2
  NUGET_REPOSITORY: $NEXUS_NUGET_REPOSITORY
  NUGET_API_KEY: $NEXUS_API_KEY
  NUGET_FOLDER_NAME: nupkgs

#Docker image
image: $GITLAB_RUNNER_DOTNET_CORE

#Jobs
ci:
  stage: ci
  services:
    - webcenter/activemq:5.14.3
  script:
    - dotnet restore --no-cache --force
    - dotnet build --configuration Release
    - dotnet vstest *Tests/bin/Release/**/*Tests.dll

pack-beta-nuget:
  stage: pack
  script:
    - export VERSION_SUFFIX=beta$CI_PIPELINE_ID
    - dotnet pack *.sln --configuration Release --output $NUGET_FOLDER_NAME --version-suffix $VERSION_SUFFIX --include-source --include-symbols -p:SymbolPackageFormat=snupkg
    - dotnet nuget push **/*.nupkg --api-key $NUGET_API_KEY --source $NUGET_REPOSITORY
  except:
    - master

pack-nuget:
  stage: pack
  script:
    - dotnet restore
    - dotnet pack *.sln --configuration Release --output $NUGET_FOLDER_NAME
    - dotnet nuget push **/*.nupkg --api-key $NUGET_API_KEY --source $NUGET_REPOSITORY
  only:
    - master

更新2:我对MassTransit.ActiveMQ 5.3.2使用以下设置

HostName = "localhost"; //I have tried 127.0.0.1 and 0.0.0.0 also. Same result
Username = "admin";
Password = "admin";
Port = 61616;
UseSsl = false;
AutoDelete = true;
更新3:如果我将别名
activemq
设置为服务,然后使用
HostName=“activemq”
它也不会连接。 如果我没有设置任何别名,而是使用自动生成的
webcenter\uuu activemq
我也遇到了同样的问题,它无法连接

Starting test execution, please wait...
ActiveMQ Connect Failed: NMSConnectionException
ActiveMQ Connect Failed: NMSConnectionException
ActiveMQ Connect Failed: NMSConnectionException
更新4:我公开了我的存储库。这是一个大众运输包装。只要在127.0.0.1上运行activemq实例,就可以执行所有单元/集成测试。 否则(特别是对于CI管道),必须编辑文件
DiDrDe.MessageBus.Infra.masstTransit.IntegrationTests\TestSupport\ActiveMqTestsConstants.cs
,并且必须将主机名更改为CI的activeMq容器启动时的任何值


到目前为止,我已经尝试过使用
webcenter\uuuu-activemq
127.0.0.1
0.0.0
localhost
activemq
(并将相同的别名设置为服务)但运气不佳我们一直在CI管道中使用服务,但从未使用环回地址。您提到它是有效的,但它可能是shell runner,现在您可能正在使用Docker runner

GitLab文档介绍了如何连接到服务:

假设您需要一个Wordpress实例来测试一些API 与应用程序集成

然后,您可以在您的应用程序中使用例如
tutum/wordpress
图像
.gitlab ci.yml

services:
- tutum/wordpress:latest
如果未指定服务别名,则在作业运行时,
tutum/wordpress
将启动,您可以从 两个主机名下的生成容器可供选择:

tutum-wordpress
tutum__wordpress

您还可以使用我在第一篇评论中提到的服务别名,文档中也有提到。

您需要使用服务别名,然后将其用作主机名。使用
localhost
永远不会起作用。127.0.0.1可以在另一个Gitlab的帐户管道中工作,但不能在我的Gitlab帐户中工作。您知道我可以为docker映像设置哪个变量,以便我的主机名可以指向它吗?如果我在本地运行容器,并将MassTransit主机名设置为“192.168.99.1”,它会工作,因为这是我的virtualbox适配器IP(我在Windows中使用docker toolbox)。很抱歉提出这么多问题,但我在这里有点困惑,我怀疑Gitlab与某些帐户中处理同一图像的方式有关。我将给出答案谢谢。我已经用结果更新了问题。不幸的是,肯定还涉及到其他方面,因为我仍然无法通过引用activemq来连接到管道中的activemqalias@diegosasw-您是否尝试使用自动生成的主机名在没有别名的情况下进行连接?@beechovsky我没有尝试任何自动生成的主机名,但我使用了别名,这对docker runner很有效。