gpt4 book ai didi

gitlab - 无法在我的免费帐户中连接到 Gitlab CI 中的容器

转载 作者:行者123 更新时间:2023-12-01 15:01:28 26 4
gpt4 key购买 nike

我有一个免费的 gitlab 账号。我也有一个公司帐户(不确定是哪个计划)。

我有完全相同的项目,一个 EventStore 上的包装器。

在 CI 管道中,我想启动一个带有事件存储的容器,以便我可以对其运行一些集成测试。

这是我的.gitlab-ci.yml 恢复、编译、运行测试和发布nuget包

#Stages
stages:
- ci
- pack

#Global variables
variables:
GITLAB_RUNNER_DOTNET_CORE: mcr.microsoft.com/dotnet/core/sdk:2.2
EVENT_STORE: eventstore/eventstore:release-5.0.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:
- $EVENT_STORE
variables:
# event store service params testing with standard ports
EVENTSTORE_INT_TCP_PORT: "1113"
EVENTSTORE_EXT_TCP_PORT: "1113"
EVENTSTORE_INT_HTTP_PORT: "2113"
EVENTSTORE_EXT_HTTP_PORT: "2113"
EVENTSTORE_EXT_HTTP_PREFIXES: "http://*:2113/"
script:
- dotnet restore --no-cache --force
- dotnet build --configuration Release
- dotnet vstest test/*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

如您所见,我启动了事件存储容器。

在我的集成测试中,我尝试使用以下连接字符串连接到 CI 中的容器:"ConnectTo=tcp://admin:changeit@127.0.0.1:1113; HeartBeatTimeout=500;";

使用我的工作帐户,它工作正常,有一个容器在 127.0.0.1 端口 1113 上监听,我可以使用上面的连接字符串连接到它。

使用我的免费个人帐户无法连接。

为什么?

我怀疑这与 docker 在两个 gitlab CI 运行器上可用的方式有关,但为什么不同?

更重要的是,我如何在我的免费帐户的个人 CI 管道上配置事件存储,以便在本地主机出于某种原因不是有效主机 Uri 时我可以连接到它?

最佳答案

好吧,您没有提供任何详细信息,但您似乎正在使用 Docker 执行程序。在这种情况下,服务localhost 上可用,只能作为服务别名访问。

这是工作 CI 文件的摘录:

test:
stage: test
script:
- dotnet test
variables:
ASPNETCORE_ENVIRONMENT: Testing
EVENTSTORE_EXT_HTTP_PORT: 2113
EVENTSTORE_EXT_TCP_PORT: 1113
EVENTSTORE_RUN_PROJECTIONS: all
EVENTSTORE_START_STANDARD_PROJECTIONS: "true"
EventStore__ConnectionString: ConnectTo=tcp://admin:changeit@eventstore:1113
services:
- name: eventstore/eventstore:latest
alias: eventstore
only:
refs:
- branches
- tags

为此,您的 appsettings.Testing.json 文件需要指向 ConnectTo=tcp://admin:changeit@eventstore:1113

如果您想继续使用带有指向 localhost 的配置的 appsettings 文件,您可以使用 CI 文件中的 env 变量覆盖该设置。请记住将环境变量添加为配置源。上面的代码片段有这样一个覆盖,匹配我们的设置结构:

{
"EventStore": {
"ConnectionString": "ConnectTo=whatever"
}
}

如果您决定使用 Kubernetes 执行器,则需要恢复使用 localhost,因为 Kubernetes 执行器为每个构建创建一个 pod,其中包含多个容器,包括所有服务容器。 Kubernetes runners 支持服务别名有一个悬而未决的问题,我认为很快就会像 12.9 或 13 那样。话虽这么说,使用服务别名是一种安全的、面向 future 的方式,可以让一切正常运行。

附言只是注意到您的设置适用于一个帐户,不适用于另一个帐户。我的猜测是您要么使用不同的执行程序(Docker 不工作,而 Kubernetes 工作),要么使用不同的 GitLab 版本(如果服务别名问题已得到修复)。

关于gitlab - 无法在我的免费帐户中连接到 Gitlab CI 中的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58121292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com