11

我在 S3 存储桶中有一个站点,配置为用于 Web 访问,aws s3 sync每次推送特定的 git 存储库时我都会运行一个命令(我目前正在使用 Gitlab)。

因此,如果我推送到stable分支,Gitlab 运行器会执行npm start build构建站点的命令,然后aws s3 sync同步到特定的存储桶。

我想迁移到 CodeCommit 并使用纯 AWS 工具来做同样的事情。


到目前为止,我能够成功设置存储库,创建用于构建工件的CodeBuild,并且工件被存储(未部署)到 S3 存储桶。不同之处在于我无法将其部署到存储桶的根文件夹而不是子文件夹,似乎该过程不是为此而设计的。由于 Web 访问的配置方式,我需要它位于根文件夹中。

对于部署过程,我查看了CodeDeploy,但它实际上并没有让我部署到 S3 存储桶,它只使用存储桶作为部署到 EC2 实例的中介。到目前为止,我觉得CodeDeploy仅对涉及 EC2 的部署有用。

本教程与我的要求相似,使用CodePipelineCodeBuild,但部署步骤实际上是一个命令(与我在 Gitlab 上所做的相同),并且CodePipelineaws s3 sync上的实际部署步骤被禁用。

我正在寻找一种解决方案,其中涉及使用为此特定目的而制作的 AWS 功能,但我找不到任何解决方案。

我也知道LambCI,但对我来说看起来像CodePipeline / CodeBuild正在做的事情,存储工件(不部署到存储桶的根文件夹)。另外,我正在寻找一个不需要我学习或部署新配置文件(AWS 配置文件之外)的选项。

AWS 功能的当前状态是否可以做到这一点?

4

3 回答 3

9

今天,AWS 宣布了一项新功能,即在 CodePipeline 的部署阶段以 S3 为目标的能力。该公告在此处,文档包含此处提供的教程。

使用 CodeBuild/CodePipeline 方法,您现在应该能够在部署阶段选择 S3 作为部署提供程序,而不是在构建脚本中执行同步。要配置阶段,您需要提供 S3 存储桶名称,指定是否提取工件 zip 的内容,如果是,请提供可选的提取路径。这应该允许您通过省略路径将内容直接部署到存储桶的根目录。

于 2019-01-18T03:24:27.493 回答
6

我正在处理类似的问题,据我所知,没有适合将应用程序部署到 S3 的服务。

AWS CodeDeploy 确实用于部署作为服务器运行的代码。

我的解决方案是使用具有三个阶段的 CodePipeline:

  1. Source 从 AWS CodeCommit 获取源代码
  2. 使用 AWS CodeBuild 构建
  3. 自定义 lambda 函数,在成功构建后从 S3 工件存储中获取工件,解压缩并将文件复制到我的 S3 网站主机。

在此处输入图像描述

我使用了 SeamusJ 的这个 AWS lambda 函数https://github.com/SeamusJ/deploy-build-to-s3

必须进行一些更改,我使用 node-unzip-2 而不是 unzip-stream 从 s3 解压缩工件。

我还必须更改 website.ts 文件中的 ACL

于 2017-09-10T14:01:15.450 回答
2

从 CodeBuild 上传是目前可用的最佳解决方案。

在这个答案中有一些关于如何通过 CodePipeline 编排此部署的建议。

于 2017-09-05T22:57:20.423 回答