Configuration 为什么我的TeamCity内部NuGet提要的URL中缺少一部分?

Configuration 为什么我的TeamCity内部NuGet提要的URL中缺少一部分?,configuration,nuget,teamcity,Configuration,Nuget,Teamcity,我的TeamCity服务器似乎在为其内置的NuGet提要使用一个损坏的URL 我在docker容器中使用JetBrains官方图像运行它。我不支持反向代理。我已配置“服务器URL”设置 我可以在VisualStudio中使用完整的URL(未经验证的来宾访问)来使用提要,这一切都很好。它从构建工件中添加包,VisualStudio可以提取它们 只是应该包含提要URL的TeamCity属性被破坏了,如屏幕截图所示。因此,我的构建失败如下: /usr/share/dotnet/sdk/3.1.302

我的TeamCity服务器似乎在为其内置的NuGet提要使用一个损坏的URL

我在docker容器中使用JetBrains官方图像运行它。我不支持反向代理。我已配置“服务器URL”设置

我可以在VisualStudio中使用完整的URL(未经验证的来宾访问)来使用提要,这一切都很好。它从构建工件中添加包,VisualStudio可以提取它们

只是应该包含提要URL的TeamCity属性被破坏了,如屏幕截图所示。因此,我的构建失败如下:

/usr/share/dotnet/sdk/3.1.302/NuGet.targets(128,5):错误:无法加载源的服务索引http://teamcity:8111/guestAuth/app/nuget/feed/TigraOss/TigraOSS/v3/index.json.

这些都是内部生成的,不是我编辑过的,所以我有点困惑。有没有办法解决这个问题?(显然,我已尝试重新启动服务器)

更新 我认为这可能是因为所有东西都在docker容器中运行。稍后在parameters(参数)屏幕中(在上面屏幕截图的底部)有另一行:

teamcity.serverUrlhttp://teamcity:8111

我想这是来自我的
docker compose.yml
文件:

  agent:
    image: jetbrains/teamcity-agent
    container_name: teamcity-agent
    restart: unless-stopped
    privileged: true
    user: "root"
    environment:
      - SERVER_URL=http://teamcity:8111
      - AGENT_NAME=ubuntu-ovh-vps-tigra
      - DOCKER_IN_DOCKER=start
    volumes:
      - agentconfig:/data/teamcity_agent/conf
      - agentwork:/opt/buildagent/work
      - agentsystem:/opt/buildagent/system
      - agent1_volumes:/var/lib/docker
我尝试在我的
docker compose.yml
文件中更改服务器URL值,并重新启动代理容器,但看起来一旦创建了代理配置文件,该值就变粘了,我需要手动编辑它


现在,我让代理使用服务器的完整FQDN,因此我们将看看这是否有效。

我认为这是由docker构建中复杂的docker造成的。我正在用docker compose构建的docker容器中运行TeamCity服务器和linux构建代理。这是我的
docker compose.yml
文件,已删除机密:

version: '3'

services:
  db:
    image: mariadb
    container_name: teamcity-db
    restart: unless-stopped
    env_file: .env
    volumes: 
      - mariadb:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password

  teamcity:
    depends_on: 
      - db
    image: jetbrains/teamcity-server
    container_name: teamcity
    restart: unless-stopped
    environment:
      - TEAMCITY_SERVER_MEM_OPTS="-Xmx750m"
    volumes: 
      - datadir:/data/teamcity_server/datadir
      - logs:/opt/teamcity/logs
    ports:
      - "8111:8111"

  agent:
    image: jetbrains/teamcity-agent
    container_name: teamcity-agent
    restart: unless-stopped
    privileged: true
    user: "root"
    environment:
      SERVER_URL: http://fully.qualified.name:8111
      AGENT_NAME: my-agent-name
      DOCKER_IN_DOCKER: start
    volumes:
      - agentconfig:/data/teamcity_agent/conf
      - agentwork:/opt/buildagent/work
      - agentsystem:/opt/buildagent/system
      - agent1_volumes:/var/lib/docker

volumes:
  mariadb:
  datadir:
  logs:
  agentconfig:
  agentwork:
  agentsystem:
  agent1_volumes:

networks:
  default:

当我第一次创建所有内容时,我将
服务器URL
变量设置为`http://teamcity:8111。这是因为Docker将主机名映射到服务名,服务名也是“teamcity”,因此主机可以在Docker组合中解析

在另一个容器中执行构建步骤时会出现问题。 我正在构建.NET Core,而机器上未安装.NET SDK, 因此,我必须使用.NET Core SDK容器运行构建

代理传递NuGet feeed的URL,该URL指向docker服务名称,而构建容器无法“看到”该主机名。我不确定为什么不能。我尝试将
--network teamcity\u default
作为命令行参数传递给docker run,但它表示网络不存在

我找到了两种方法让事情顺利进行

  • 编辑构建步骤以使用nuget提要的FQDN,并且不要使用teamcity内置参数
    %teamcity.nuget.feed.guestAuth.feed-id.v3%
    。我不太喜欢这个解决方案,因为它会让我在将来面临崩溃
  • 查找存储teamcity代理配置的docker卷。在我的例子中,它是
    /var/lib/docker/volumes/teamcity\u agentconfig/\u data
    。编辑
    buildAgent.properties
    文件并设置
    serverUrl=http\://完全限定。名称\:8111
    。然后
    docker compose重新启动代理
    。然后您可以安全地使用
    %容器化版本中的teamcity.nuget.feed.guestuth.feed-id.v3%

  • 我还没有测试过这一点,但我认为您可以通过在
    docker compose.yml
    文件中使用完全限定的服务器名来避免所有这些问题。但是,您必须从一开始就这样做,因为在运行
    docker compose
    的那一刻,代理配置文件系统就被创建并成为永久文件。

    I如果您查看以前的构建和参数,服务器URL是否与您在设置中设置的相匹配?右侧的那些值是由插件生成的吗?屏幕截图是从查看构建结果和“参数”选项卡中获取的,因此这些是用于构建的实际结果。再往下一点,就是s行:>teamcity.serverUrl对我来说就像一把冒烟的枪。我想知道这是否是因为代理正在docker容器中运行?“teamcity”是服务器docker服务的名称。你可能让我在那里看到了什么。