NodeJS CI / CD构建丢失的文件

时间:2019-12-10 20:51:21

标签: node.js continuous-integration continuous-deployment

我正在为NodeJS项目设置CI / CD,偶尔开发人员会忘记将文件(模块)发送给源代码管理。我运行npm ci和npm test都没有问题,该应用程序已部署到我的服务器上。但是,由于缺少模块,一旦执行它就会出错。

是否存在最佳实践,可确保在部署节点应用程序之前所需的所有文件都可用?

3 个答案:

答案 0 :(得分:2)

我不知道您的确切配置,但这是我的团队过去处理类似问题的方式:

  1. 单元测试。通常,CI系统可以在部署之前捕获此类错误。如果您的CI测试在部署代码之前没有标记丢失的模块,那么通常使用的解决方案是编写确保模块存在的测试。这样,当您运行单元测试时,该问题将自动得到解决。遵循这些思路可能会起作用:
GapSorted
  1. 版本控制工作流程。听起来您的团队的版本控制工作流程也有问题。通常,构建生产应用程序所需的所有文件应保持在版本控制下,并且开发人员应经常提交。在这种情况下,我通常会进行一些调查以了解发生了什么情况-它可能需要培训,或者应用的结构可能对工程师来说过于混乱或复杂。

  2. 对npm软件包使用锁定文件。如果缺少的模块是npm模块,则可能有一些事情可能导致其丢失。通常,所有npm模块都应列在您的// mymodule.test.js using Mocha syntax: import {expect} from 'chai'; import mymodule from './mymodule'; describe('my module', () => { it('should export something!', () => { expect(!!mymodule).to.be.true; }); }); package-lock.json文件中。这样可以确保应用程序的生产版本与开发人员在本地使用的版本保持同步。我个人不鼓励开发人员在全球范围内安装npm模块,除非绝对必要。在这种情况下,您的CI服务器(也许还有生产服务器)将需要更新,以包括与全局软件包完全相同的版本。

  3. 自动构建系统。我认为您表示您的问题是由不受源代码控制的模块引起的。但是我也看到过某些情况,传统的构建系统可能会忽略在构建用于生产的应用程序时很重要的文件。诸如Webpack和Babel之类的现代构建工具通常包括应用程序引用的每个模块,但是较旧的解决方案(例如yarn.lockgrunt)可能需要进行一些微调,以确保始终以自动化方式包含文件(以避免一种情况,要求开发人员将模块手动添加到构建系统,而常常忘记这样做)。

答案 1 :(得分:0)

防止这种情况的最佳方法是让开发人员获取项目的校验和,并将其与源代码控制和/或服务器进行比较。如果校验和匹配,则将传输所有文件。

答案 2 :(得分:-1)

将所有require()调用替换为webpack import调用,并让您的构建运行webpack。在运行时,node将运行包而不是常规入口点。

Webpack将在构建期间捕获所有无法访问的import

所有这些都是假设丢失的文件是模块(代码)而不是资源(例如JSON文件)。