无法通过我在GitLab CI / CD中进行的测试访问活动的mq服务

时间:2019-05-13 11:40:08

标签: gitlab gitlab-ci-runner masstransit

首先, GitLab免费版中对服务或Docker容器有任何限制吗?它说我拥有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 Connect Failed: 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__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.MassTransit.IntegrationTests\TestSupport\ActiveMqTestsConstants.cs,并且必须将HostName更改为将CI的activeMq容器旋转的任何值。

到目前为止,我已经尝试使用webcenter__activemq127.0.0.10.0.0.0localhostactivemq(并为服务设置了相同的别名)< strong>但是没有运气

1 个答案:

答案 0 :(得分:0)

我们一直在CI管道中使用服务,但从未使用过环回地址。您提到它确实有效,但是它可能是Shell运行程序,现在您可能正在使用Docker运行程序。

GitLab文档为clear guidelines提供了有关如何连接到服务的信息:

  

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

     

然后您可以在自己的广告中使用tutum/wordpress图片   .gitlab-ci.yml

services:
- tutum/wordpress:latest
     

如果您未指定服务别名,则在运行作业时,   tutum/wordpress将开始运行,您将可以从中访问它   您的构建容器有两个主机名可供选择:

tutum-wordpress
tutum__wordpress

您还可以使用我在第一句话中提到的服务别名,也可以作为文档中的 described