【发布时间】:2017-09-12 08:36:41
【问题描述】:
我们的持续集成系统使用 ansible playbook 将我们的 repo(包括节点模块)部署到我们的 ansible 主机文件中指定的服务器列表。我们有许多在单独的主机文件中配置的环境。 Jenkins 是我们的构建服务器,用于按计划启动每个 ansible 运行。 ansible playbook 中的任务之一是 npm install。
我们的问题出现是因为只有一个环境离线,所以当 playbook 在这个特定环境上执行 npm install 任务(读取“主机文件”)时,由于缺乏互联网连接而失败。
我已经看到很多关于如何手动解决此问题的答案,但我们持续集成系统的全部意义在于自动且一致地运行(从环境到环境)。所以我不想在 playbook 和/或 repo 中引入一堆解决方法来捆绑节点模块等,只是为了解决这个特定的主机离线问题。
由于这是一个较低的环境,我愿意提前做一些具体的事情,作为一个时间步骤,在这个服务器上绕过这个问题。但是由于剧本任务在安装新代码之前将用户帐户下的所有现有文件压缩为一个回滚 zip 文件,因此我在该用户帐户下的服务器上引入的任何内容都将基本上被删除(. 文件和目录除外) .
那么,我们如何通过 CI 在单个离线服务器上运行 npm install 而无需人工干预?
【问题讨论】:
-
我们是大量使用 nodejs 应用程序。 @James 提到的第二个解决方案,我们就是这样工作的。如果您需要这方面的帮助,我可以逐步指导您
-
进一步详细说明问题/解决方案 - 由于我们的 package.json 频繁更改,npm install 命令可能会从一次运行更改为下一次。因此,在每个构建中运行它可能很重要。所以我的方向是在克隆之后,在启动 Ansible 部署到主机之前,在 Jenkins 服务器(确实有互联网连接)上运行它。
-
我们也在做同样的事情,检查代码,执行 npm 安装,归档代码并上传到存储位置,然后启动 ansible 作业,它从存储服务器下载它并完成剩余的任务。
标签: node.js jenkins npm ansible