【问题标题】:Using Upstream Sources on Azure DevOps Server that's behind a HTTP Proxy在 HTTP 代理后面的 Azure DevOps 服务器上使用上游源
【发布时间】:2019-09-06 07:03:05
【问题描述】:

我们的 Azure DevOps Server 基础架构位于所有出站流量的 HTTP Web 代理服务器之后。我们希望在 Azure Artifacts 中启用上游源功能,以便 Azure DevOps 在请求时从 nuget.org 等下载包。

但是,我们没有找到任何有关如何制作 Azure DevOps 服务器应用层的文档(我们假设它正在与上游源建立出站连接)。当我们在其中一个提要上启用上游源功能并将 nuget.org 添加到其中时,在尝试下载提要中的任何包时,我们会收到以下错误:

响应状态码不表示成功:500(内部服务器错误 - 无法从上游包源“https://api.nuget.org/v3/index.json”检索数据:发送请求时发生错误。(DevOps 活动 ID:F2C6C7EF-6651-4FB2 -B650-5221ABC80F64)

当我们禁用上游源时,此错误消失,并且包从 Azure DevOps 缓存而不是上游源成功下载。

在服务器上搜索应用层的目录,我们看到 DevOps 网站的 web.config 已经应用了以下代理设置:

<system.net>
  <defaultProxy useDefaultCredentials="true"/>
</system.net>

我们已对此进行了进一步修改,以明确提供我们的代理服务器地址:

<system.net>
  <defaultProxy useDefaultCredentials="true">
    <proxy proxyAddress="http://<ourproxyserver>" />
  <defaultProxy/>
</system.net>

然后再次尝试,但收到相同的Failed to retrieve data from the upstream package source 错误。

我们已尝试从 Azure DevOps 服务器中查找更详细的错误日志,但在我们找到的日志文件中未找到任何踪迹。但我们也不确定 Azure DevOps Server 将其错误日志写入何处。

为了让上游源在我们的场景中工作,我们是否缺少一些东西? Azure DevOps Server 是否能够通过 HTTP 代理发出出站请求?

【问题讨论】:

    标签: azure-devops


    【解决方案1】:

    原来@Leo Liu-MSFT 的答案不太准确; Azure DevOps Server 可以在 HTTP 代理服务器后面工作。

    我们实例中的问题是基础架构团队忘记在主机上安装代理服务器的 CA 证书,这是我们看到的 HTTP 500 错误消息的实际原因。

    正确安装证书后,我们对更新 Azure DevOps 站点的 web.config 文件以使用我们的代理服务器详细信息的最佳猜测是正​​确的。

    <system.net>
      <defaultProxy useDefaultCredentials="true">
        <proxy proxyaddress="http://<ourproxyserver>" />
      </defaultProxy>
    </system.net>
    

    有关其他代理选项,请参阅以下内容:https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/network/proxy-element-network-settings

    作为一个很好的措施,我们也在 Windows 服务器级别设置代理服务器设置,在控制台会话中使用以下命令:

    netsh winhttp set proxy proxy-server=http://<ourproxyserver>
    

    完成这些步骤后,上游资源开始在我们的 Azure DevOps 实例中工作。

    【讨论】:

    • 好吧,这对我不起作用。我收到错误“未知的代理地址属性”。
    • 实际上它适用于“proxyadress”(带有小写字母“a”)。现在错误对我来说已经消失了。
    • @MartiniBianco,是的,那是我的错。这个特定的配置部分对所有属性的大小写完全不一致,这在配置区分大小写时没有帮助。我已经更新了答案以使用正确的大小写。
    【解决方案2】:

    在 HTTP 代理后面的 Azure DevOps 服务器上使用上游源

    恐怕目前还没有这种开箱即用的方式来使用 HTTP 代理后面的 Azure DevOps 服务器上的上游源。

    作为解决方法,我们可以禁用上游源,然后将以下设置放入每个项目的 nuget.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <config>
            <add key="http_proxy" value="http://proxy_hostname_or_ip:xxxx" />
            <add key="https_proxy" value="http://proxy_hostname_or_ip:xxx" />
        </config>
    
      <packageSources>
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
      </packageSources>
    
    </configuration> 
    

    在恢复 nuget 包时使用此 nuget.config 文件。 希望这会有所帮助。

    【讨论】:

    • 感谢@Leo Lui-MSFT 的回答。如果是这样的话,那是一个非常不幸的事后诸葛亮。我们已经在我们的项目中做与上述类似的事情,但由于我们的构建服务器本身没有远程访问权限,因此希望通过 DevOps Server 集中 pkg 管理。这个功能在本地的有用性现在对我们来说几乎为零。
    • @Adrian,确实,如果您想通过 DevOps Server 集中 pkg 管理,这是一个问题。是否可以访问 Azure DevOps Server?如果是,您可以尝试安装和配置 Azure DevOps 代理服务器。docs.microsoft.com/en-us/azure/devops/server/install/…
    • Lui-MSFT 您能解释一下 Azure DevOps 代理服务器在这种情况下将如何提供帮助吗?我很困惑。我认为 Azure DevOps 代理服务器只是在尝试在远程位置使用 Azure DevOps 实例时节省带宽。如果上游源功能不知道如何使用 HTTP 代理服务器,我看不出安装它会如何解决问题。
    • Lui-MSFT,请看我自己对这个问题的回答,看看我们是如何解决这个问题的。
    猜你喜欢
    • 2021-07-17
    • 2021-06-10
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    相关资源
    最近更新 更多