【问题标题】:Azure Devops deploy to on-prem servers with no internet accessAzure Devops 部署到无法访问 Internet 的本地服务器
【发布时间】:2022-01-05 13:16:13
【问题描述】:

使用 Azure Pipelines,是否可以将工件部署到无法访问 Internet 的本地内部服务器?有人知道吗?

内部服务器目前没有也可能永远不会访问互联网。我们在 DMZ 的构建服务器上运行了一个自托管的 devops 代理,并且构建服务器可以连接到内部服务器。

我们目前使用另一个持续部署工具,该工具在我们的所有目标服务器上运行部署代理,然后在我们的构建服务器上运行一个侦听器来注册这些代理。我们曾希望我们能够使用 Azure Pipelines 做类似的事情,例如使用自托管代理来注册部署目标 - 看起来这是不可能的。据我所知,如果我们想部署到本地服务器,它需要互联网访问才能与我们的 Azure Devops url 进行通信以进行注册。

非常感谢

【问题讨论】:

  • 如果您的构建代理在 DMZ 中并且可以连接到内部服务器,那么问题是什么?你的管道不能做什么?

标签: azure-devops azure-pipelines azure-devops-self-hosted-agent


【解决方案1】:

我相信 Azure Pipelines 总是需要与 azure 对话。甚至是自托管的。

您是否为此查看过 Ansible?您可以将设置应用于服务器,而无需在所有服务器上连接互联网,使用 Ansible,您可以让 Ansible 服务器出去并获取文件,然后使用 ssh 安全地部署这些更新和设置。

然后,您可以将大部分 YAML 文件代码更改相关部分,然后进行部署。

【讨论】:

  • 感谢@Jason,我们目前有一个 CI/CD(构建服务器、构建代理、部署服务器和部署目标代理)解决方案在本地运行,但非常喜欢有机会减少管理所有这些的开销,特别是考虑到我们已经将 Azure DevOps 用于代码存储库、wiki 等。似乎很遗憾似乎没有办法通过我们的 DMZ 中的 devops 构建代理注册部署目标为这将大大减少我们的 CI/CD 应用程序占用空间。
【解决方案2】:

“是否可以将工件部署到无法访问 Internet 的本地内部服务器”

从表面上看你的 Q,是的。您的自托管代理可以通过内部网络将文件复制到您的内部服务器(无需 Internet 到内部服务器)。我猜这取决于您所说的“部署”。我不知道为什么内部服务器需要运行部署代理。

【讨论】:

  • 谢谢@Conrad Albrecht - 实际上我应该澄清“部署”。目前,我们的 CD 涵盖了从 IIS 站点的配置、部署后的 powershell 脚本和证书到 TopShelf 服务到 Docker 容器的各种内容,而不仅仅是删除文件。我在考虑 yaml 部署工作,但可能更好地考虑发布和部署组。
  • 来自docs.microsoft.com/en-us/azure/devops/pipelines/release/… "部署组中的每个目标服务器都需要部署代理。"
【解决方案3】:

我们在 DMZ 的构建服务器上运行了一个自托管的 devops 代理,并且构建服务器可以连接到内部服务器。

那么你的管道不应该有与内部服务器通信的问题,这是你希望你的管道使用什么的问题。

很遗憾,IISWebAppDeploymentOnMachineGroup 任务不适用于您,因为它要求您的管道在部署组中执行的经典管道中运行,这也需要互联网连接。部署组充当构建代理的替身,并以与构建代理相同的方式运行。如果您不允许来自这些计算机的出站 Internet 连接,则需要一个不同的选项。

一种选择是使用Microsoft-provided marketplace extension,它允许您使用Windows Remoting 使用WebDeploy 进行部署。此扩展包含允许您使用WinRM session 管理 IIS 站点、部署 Web 应用和部署 SQL 数据库的任务。

您还可以使用Powershell on Target Machines task 执行可以安装软件组件等的部署脚本。此任务包括在执行之前将文件复制到机器上的逻辑。

我们的团队最终编写了一个自定义 azure devops 扩展,将我们的 powershell 脚本与自定义服务连接捆绑在一起。自定义服务连接具有用户名和密码详细信息,自定义任务从服务连接解压缩凭据以建立PSRemoting Session。进入 PowerShell 会话后,您几乎可以在本地执行任何可以执行的操作。

【讨论】:

  • 感谢您的评论@bryanbcook。我们在云中使用 Azure DevOps 服务(在大多数情况下,这对我们来说是理想的)并在我们的 DMZ 构建服务器上运行本地构建代理 - 所以构建管道很好。唯一的问题是内部盒子的释放。似乎很遗憾似乎没有办法通过我们的 DMZ 构建代理注册部署目标。我已将 Azure Devops Server 视为一种潜在的选择,但理想情况下,我们希望尽可能减少应用程序管理开销。
  • 我已经修改了我的答案以反映您最近的回复
猜你喜欢
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
相关资源
最近更新 更多