我正在为 NodeJS 项目设置 CI/CD,有时开发人员会忘记将文件(模块)发送到源代码管理。我运行 npm ci 和 npm test 没有问题,并且应用程序被部署到我的服务器上。但由于缺少模块,一旦执行就会出错。
是否有最佳实践来确保 Node 应用程序所需的所有文件在允许部署之前可用?
最佳答案
我不知道您的确切配置,但以下是我的团队过去处理类似问题的方法:
- 单元测试。通常,CI 系统可以在部署之前捕获此类错误。如果您的 CI 测试在部署代码之前没有标记丢失的模块,那么常用的解决方案是编写一个测试来确保该模块存在。这样,当您的单元测试运行时,问题就会被自动捕获。沿着这些思路的东西可能会起作用:
// 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;
});
});
版本控制工作流程。听起来您团队的版本控制工作流程也存在问题。一般来说,构建生产应用程序所需的所有文件都应受到版本控制,并且开发人员应经常提交。在这种情况下,我通常会进行一些调查,看看发生了什么 - 它可能需要培训,或者应用程序的结构可能对工程师来说过于困惑或复杂。
对 npm 包使用锁定文件。如果丢失的模块是 npm 模块,那么有一些事情可能会导致它丢失。一般来说,所有 npm 模块都应在您的
package-lock.json
或yarn.lock
文件中列出。这确保了应用程序的生产版本将与开发人员本地使用的版本保持同步。我个人不鼓励开发人员全局安装 npm 模块,除非绝对必要。在这种情况下,您的 CI 服务器(也许还有您的生产服务器)将需要更新以包含完全相同版本的全局包。自动构建系统。我认为您表明您的问题是由不受源代码控制的模块引起的。但我也看到过一些情况,旧的构建系统可能会忽略构建生产应用程序时很重要的文件。像 Webpack 和 Babel 这样的现代构建工具通常包含应用程序引用的每个模块,但是像
grunt
和gulp
这样的旧解决方案可能需要一些微调,以确保文件始终包含在一种自动化的方式(以避免开发人员手动将模块添加到构建系统但经常忘记这样做的情况)。
关于node.js - NodeJS CI/CD 构建缺少文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59275164/