我们的持续集成系统使用ansible playbooks将我们的repo(包括节点模块)部署到我们的ansible主机文件中指定的服务器列表中。我们有许多环境,这些环境在各个主机文件中配置。 Jenkins是我们的构建服务器,用于按计划启动每个ansible运行。 ansible playbook中的任务之一是npm install。
我们的问题出现是因为只有一个环境处于脱机状态,所以当playbook在这个特定环境中执行npm安装任务(读取“主机文件”)时,由于缺乏互联网连接而失败。
我已经看到很多关于如何手动解决这个问题的答案,但我们的持续集成系统的重点是自动运行(从环境到环境)。所以我不想在剧本和/或repo中引入一堆变通方法来捆绑等等。节点模块只是为了解决这个特定的主机离线问题。
由于这是一个较低的环境,我愿意在此服务器上提前做一些具体的事情,以便绕过这个问题。但是,由于playbook任务会在安装新代码之前将用户帐户下的所有现有文件置于回滚zip文件中,因此我在此用户帐户下在服务器上引入的任何内容都将被删除(。文件和目录除外)
那么,如何让CI在单个离线服务器上运行npm install而无需人工干预?
答案 0 :(得分:1)
我对ansible并不熟悉,但您遇到的问题并不常见,并且肯定有自动解决问题的方法,例如
npm install
一次,打包节点并在环境中共享工件就个人而言,我更喜欢并提倡第二种解决方案,因为:
答案 1 :(得分:0)
另一种方法是设置内部NPM注册表,以便您的脱机Jenkins服务器可以与您的内部NPM通信,但是与公共NPM存储库保持同步可能会成为一场噩梦,会出现许多问题。 / p>
您需要允许“仅限出站”互联网访问此Jenkins服务器,以便在没有解决方法的情况下有效地工作。