我们正在升级FutureStack的注册,仅到4月30日。条款和条件适用。 现在注册

新Relic基础设施团队如何自动化其Windows构建和部署管道

4分钟阅读

通过鲁本Hervas

和许多现代软件团队一样,我们主要在Linux上工作,但我们的客户需要在Windows上运行New Relic。的新的遗物基础设施例如,agent在Windows Server上运行2008年、2012年和2016年。但是,直到最近,我们的Windows的构建和部署进程是明确的手册 - 实际上,构建和部署环境实际上从队友的笔记本电脑运行!

当我们准备发布一个新的代理版本时,这个手动过程为我们的团队创造了大量的工作。在此之前,我们自动化了Linux代理的构建管道,所以我没有理由为我们的Windows代理商也不会这样做。

必需的步骤——以及一种未知的味道

为了让这个构建和部署管道有意义,我们必须涵盖四个基本步骤:

  1. 构建代理安装程序
  2. 将安装程序部署到金丝雀机器上
  3. 对金丝雀进行测试
  4. 版本的安装程序

除了我们的普通Jenkins构建工具,我们还使用了Ansible.,Powershell, 和Windows远程管理(WinRM)使管道自动化。我们选择了Ansible,因为它支持Windows,而且我们已经用它来供应机器,这意味着团队不需要学习另一种技术。Powershell是Windows的本机shell,而WinRM显然是远程访问的选择。

这是我们提出的方案:

为Windows基础架构代理构建管道

从Jenkins主服务器,我们s1)在我们的测试环境中,将代理部署到一组Windows金丝燕机器上,以确保我们的代码没有bug或其他问题;2)在单独的Windows机器上触发构建、包和发布工件,然后将最终的代理包部署到我们的Amazon S3桶。

我们可以使用PowerShell脚本直接从我们的主Jenkins服务器向我们的Windows节点部署代理代码,但我们选择在控制机上使用Ansible,因为我们的团队已经使用它来管理主机集成我们建立和支持。有了Ansible,我们可以为所有支持的操作系统运行集成测试;它安装所需的工具,运行我们的测试,然后卸载所有内容。

一旦我们决定了如何,我们面临一个更大的挑战:团队中有相当一部分人没有太多使用Powershell和winrm的经验——但是正如您将看到的,我们发现它们使用起来相当简单!

Powershell、WinRM和其他Windows魔术

为了构建管道,首先我们需要提供一组Windows机器,我们可以用它与Jenkins“控制机器”进行通信。为了为这些机器构建一个映像,我们使用了包装机,然后运行Powershell脚本来安装我们需要的基本库和Ansible配置。然后使用包管理器巧克力在Windows构建机器上安装代理构建所需的依赖项。

然而,这个过程中最有趣的部分是在Windows机器上启用WinRM。WinRM公开了一个端口(在本例中是5986),因此您可以向它发送命令。下面是我们编写的一个shell脚本示例,用于在目标机器上启用WinRM。

在目标机器上启用WinRM的示例shell脚本

对于我们的Jenkins“控制机器”,我们必须告诉Ansible如何连接到发生构建的Windows节点。为此,我们设置了以下变量:

在目标机器上设置Ansible变量

在这一点上,我们的管道准备好了。

毕竟不是那么难!

就像我说的,我们在使用Powershell和WinRM时有一个小小的学习曲线,但是我们很快发现Powershell是一个非常棒的、易于使用的工具甚至被移植到MacOS和Linux。更重要的是,我们设法将Windows代理的发布时间从半天或更长的手动过程中减少到5分钟的Jenkins作业。这是辛劳的巨大减少!