在github push上将静态站点部署到s3的最佳策略是什么?

时间:2015-09-11 18:55:15

标签: git amazon-web-services github amazon-s3 deployment

我想自动将我们的网站部署到AWS S3。我编写了一个节点脚本来自动构建和上传站点,但是我希望只要我们的repo的master分支在github上更新,脚本就会自动运行。

我查看了AWS CodeDeploy,但它看起来像是专门部署到EC2。我也查看了AWS Lambda,但似乎没有一种明确的方法可以使用git来获取repo的副本,因此我可以运行该脚本。

我可以使用的任何服务(最好是与AWS绑定)?

8 个答案:

答案 0 :(得分:12)

前段时间我有同样的目标,现在已经发布了一个小工具,至少对我来说解决了这个问题。它使用AWS Lambda并在S3之后将存储库的特定分支部署到push。您可以充分利用GitHub部署密钥,该密钥具有较少的个人访问令牌权限,并且可以按存储库进行配置。

请查看github-bucket,它也可能会有所帮助。

github-s3-deploy-architecture

答案 1 :(得分:10)

而不是直接使用AWS服务(正如您所说他们几乎都期望更复杂的设置,部署到EC2等),您可能最好使用CI提供程序,例如Shippable,{{3 }或Codeship

这些都能够从git更新,运行构建命令,将实用程序安装到其CI映像/容器并将文件复制到S3。

可能有一些创业公司为您的目的建立了一个精确的工具,但它们还没有出现在我的雷达上: - )

答案 2 :(得分:9)

我知道它不是git deploy ....但是我没有设置CI盒子,而是使用了s3cmd。

http://s3tools.org/s3cmd

执行此命令会将我的构建目录与s3同步。

s3cmd sync -r ~/code/mysite/build s3://www.mysite.com --delete-removed

我在Linux上使用它。不确定他们的OSX和Windows故事是什么。

如果你真的在git push解决方案之后,你可以设置一个定时作业,将你的git repo拉到一个文件夹然后对它执行。我在廉价的Linux VM上的其他地方这样做。除非你打算去完整的CI,否则可能没那么重要。

答案 3 :(得分:7)

您可以使用非常简单的两步CodePipeline进行设置。基本上,您只需在AWS控制台中填写不同的部分。不需要单独的CI工具及其增加的复杂性。

在pipline的第一步,从Github拉出并存储在S3中。您可以通过AWS控制台轻松设置它。

在下一个CodeDeploy步骤中,您可以使用AWS CLI(预装在CodeDeploy中)执行

cd /path/to/public/directory && aws s3 sync --acl public-read --delete . s3://your.bucket.name

您必须为AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY设置环境变量,以便AWS CLI可以在部署步骤中运行,也可以在AWS控制台中为CodeDeploy完成,位于&#34下的高级部分;环境变量"。一旦设置了环境变量,并且该AWS用户具有正确的权限,您就可以在CodeDeploy中运行任何所需的aws-cli命令。

完成此操作后,当您签入Github时,CodePipeline将启动,几分钟后您的文件将在S3上。

答案 4 :(得分:6)

如果您使用TravisCI,deployment非常简单。您需要添加到.travis.yml的唯一部分是:

deploy:                         
  provider: s3                         
  access_key_id: "YOUR AWS ACCESS KEY"
  secret_access_key:
    secure: "w/DlbHt1+IAMENCRYPTED"
  bucket: "YOUR BUCKET"

My blog post解释了AWS端的所有细节(用户设置,IAM和S3存储桶配置)以及github和travisCI端。

答案 5 :(得分:1)

对于您的简单用例可能过于强大,但您可以创建一个非常简单的CodePipeline来将您的github存储库推送到S3。

答案 6 :(得分:0)

我还建议使用代码,简单易用,但您需要为S3存储桶创建具有适当权限(即策略)的IAM用户。

代码的基本计划是免费的。

好吧可能有问题到目前为止我可以看到代码将不会删除文件,因为你删除github中的文件,毕竟s3不是github repo,但无论如何,许多github更新的putObject操作只是运行良好对我来说。

答案 7 :(得分:0)

我过去使用过Deploy Bot,我对它非常满意。

它可以通过Git推送到S3甚至FTP,它也可以运行你的构建脚本,甚至可以为你推送Slack通知。

https://deploybot.com/