【问题标题】:Should I skip the Build stage on AWS CodePipeline for a backend NodeJS application对于后端 NodeJS 应用程序,我是否应该跳过 AWS CodePipeline 上的构建阶段
【发布时间】:2021-08-08 10:23:42
【问题描述】:

我已经编写了一个后端 NodeJS (Typescript) 应用程序(连接到数据库等,通常的东西),并成功创建了一个 CodePipeline,它在目标 EC2 上提取源代码,然后运行 ​​npm install & start。

我的一个朋友指出我跳过了构建阶段,我无法真正想出一个有效的解释。我知道我尝试过但最终放弃了,但不幸的是我找不到证明这样做的理由。

所以我的问题是:后端应用程序是否应该像前端应用程序一样构建?有没有什么好的资源可以说明如何做到这一点?

另外,构建阶段的意义何在?与直接在 EC2 上提取源代码并编译它们有何不同?只是为了节省编译时间吗?

非常感谢!

【问题讨论】:

  • this 有意义吗?
  • 教程只是说跳过构建阶段而没有任何解释,所以恐怕它并没有真正的帮助
  • 构建阶段通常用于测试您的应用程序,运行单元测试。如果您没有,那么您的情况就不需要构建阶段。

标签: node.js amazon-web-services build continuous-deployment aws-codepipeline


【解决方案1】:

顾名思义,构建阶段用于构建二进制/工件。举个例子:在部署ECS之前,我们需要构建docker镜像,并且需要像ECR一样上传到registry。使用 CodeBuild(Build Stage)可以实现这个 docker 镜像的创建和上传。然后使用 Deploy Stage 将 docker 映像部署到 ECS。另一个示例是为 Java 应用程序构建 jar 文件并将其上传到 S3 以将其部署到 Lambda。在 CodeBuild 中,您可以安排执行顺序。首先执行源代码分析然后构建创建然后自动化单元测试等...另外请注意,您也可以使用构建阶段进行部署。没有限制。考虑 Java 示例。创建 Jar 文件后,CodeBuild 将其上传到 S3,然后 CodeBuild 将此 Jar 文件部署到相应的 Lambda。根据您的要求,您可以跳过或包含构建阶段。

Also, what's the point of the Build stage? How is it really different 
from just pulling the sources & compiling them on the EC2 directly? Is 
it just to save compilation time?  

注册您的上述观点:

CodeBuild 为每个构建启动一个新的 docker 容器。所有构建命令都在这个 docker 容器内执行(CodeBuild 读取一个名为 buildspec.yml 的文件。您需要在 buildspec.yml 中添加构建/部署命令,并且需要在代码存储库中维护此文件。CodeBuild 执行本文中提到的命令文件。)对于您的情况,npm build 命令将在此 docker 内执行。然后它创建构建并将其上传到您的 EC2。执行完所有操作后,CodeBuild 会销毁此 docker 映像。

通过使用这种方法

  1. 您可以跟踪所有构建的记录。
  2. 保持 EC2 清洁。这种方法避免了在 EC2 中安装不必要的软件包。
  3. 易于安装和配置构建所需的运行时。

【讨论】:

  • 这是对构建阶段的一个很好的解释,但是它没有回答我的问题,即:我应该跳过 nodeJS 后端应用程序的构建阶段吗?看起来几乎所有教程都这样做,但他们没有提供任何解释。如果代码在 Typescript 中,则必须以某种方式对其进行编译:我应该使用构建阶段来执行此操作,还是应该只在 EC2 上部署并直接从源代码运行 npm start?前端/网络构建会有什么不同吗?
猜你喜欢
  • 2021-08-07
  • 1970-01-01
  • 2019-12-10
  • 2021-11-29
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 2016-04-22
相关资源
最近更新 更多