首页 > 解决方案 > 对于后端 NodeJS 应用程序,我是否应该跳过 AWS CodePipeline 上的构建阶段

问题描述

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

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

所以我的问题是:后端应用程序应该像前端应用程序一样构建吗?有没有关于如何做的好资源?

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

非常感谢!

标签: node.jsamazon-web-servicesbuildcontinuous-deploymentaws-codepipeline

解决方案


顾名思义,构建阶段用于构建二进制/工件。举个例子:在部署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. 易于安装和配置构建所需的运行时。

推荐阅读