部署错误:getaddrinfo ENOTFOUND .scm..appserviceenvironment.net

61次阅读
没有评论

问题描述

在使用Azure DevOps pipelines将代码部署到App Service时遇到了错误。他们正在使用App Service环境,因为应用程序需要访问私有网络中的资源(内部API和LDAP服务器)。部署任务报错如下:

Error: Error: Failed to deploy web package to App Service. Error: getaddrinfo ENOTFOUND {appServiceName}.scm.{appServiceEnvironment}.appserviceenvironment.net {appServiceName}.scm.{appServiceEnvironment}.appserviceenvironment.net:443

用户想知道可能导致这个错误的原因,或者有哪些有用的步骤可以帮助他们追踪问题的来源。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

解决方案1

根据官方文档,这个错误可能是由于缺少ASE的DNS配置导致的。在私有ASE中,这些DNS条目不会在公共DNS中创建,而且Microsoft不管理私有DNS。因此,你需要在内部DNS中创建ASE的DNS条目。以下是创建DNS条目的步骤:
1. 创建主区域(Primary Zone):创建一个名为{ASE Name}.appserviceenvironment.net的主区域,将该区域存储在AD中,并将该区域复制到域中的所有DNS服务器。
2. 创建A记录:在{ASE Name}.appserviceenvironment.net下创建一个名为*的A记录,将IP地址设置为ASE的私有IP地址。
3. 创建子区域(Child Zone):在{ASE Name}.appserviceenvironment.net下创建一个名为scm的子区域。
4. 创建A记录:在scm.{ASE Name}.appserviceenvironment.net下创建一个名为*的A记录,将IP地址设置为ASE的私有IP地址。

然而,在等待DNS创建的过程中,你可以尝试以下解决方法,这对于管道的需求已经足够:
在部署任务之前,将以下脚本添加到你的管道中:

- script: |
    sudo -- sh -c -e "echo '{ASE's Private IP}    {ASE Name}.appserviceenvironment.net' >> /etc/hosts";
    sudo -- sh -c -e "echo '{ASE's Private IP}    scm.{ASE Name}.appserviceenvironment.net' >> /etc/hosts";
    sudo -- sh -c -e "echo '{ASE's Private IP}    {AppName}.scm.{ASE Name}.appserviceenvironment.net' >> /etc/hosts";
  displayName: 'Fake DNS entries required for deployment'

请注意,上述解决方法仅解决了管道的部署问题。对于应用服务的FQDN仍然不存在,仅使用IP地址是不够的,因为ASE上的所有应用程序都具有相同的IP地址,我们需要主机名解析。如果你的应用服务前面有一个应用程序网关,你可以从列表中选择所需的应用服务,但这将解析为FQDN,然后由于应用程序网关无法将该FQDN解析为IP地址而失败。因此,你确实需要更新你的DNS配置。

在测试服务或等待DNS更改期间,我们的开发人员只需更新其本地设备的hosts文件即可解决此问题:

{ASE's IP}  {appServiceName}.{ASE Name}.appserviceenvironment.net

解决方案2

另一个可能的解决方法是在发布中设置默认代理池。在Releases的Run on agent – Agent pool字段中选择Default代理池。可能在创建新的发布时,该字段被设置为其他值。将Agent pool设置为Default后,错误将消失。

注意:上述解决方案是根据提供的问答数据和我的知识库生成的,如果问题超出了这些范围或答案未知,请提供更多信息以便我能够提供更准确的解决方案。

正文完