我想自动将我们的站点部署到AWS S3。我已经编写了一个节点脚本来自动构建和上传站点,但是我希望每当我们的repo的master
分支在github上更新时脚本就会自动运行。
我查看了AWS CodeDeploy,但它看起来像是专门部署到EC2。我也看过AWS Lambda,但似乎没有一种明确的方法来使用git
来获取repo的副本,所以我可以运行脚本。
我可以使用的任何服务(最好是与AWS绑定)?
我前段时间有同样的目标,现在已经发布了一个小工具,至少对我来说解决了这个问题。它使用AWS Lambda
并在S3
之后将存储库的特定分支部署到push
。您可以充分利用GitHub部署密钥,该密钥具有较少的个人访问令牌权限,并且可以按存储库进行配置。
请看看github-bucket,它也可能对你有所帮助。
我知道这不是git deploy ....但是我没有设置CI盒子,而是使用了s3cmd。
执行此命令会将我的构建目录与s3同步。
s3cmd sync -r ~/code/mysite/build s3://www.mysite.com --delete-removed
我在Linux上使用它。不确定他们的OSX和Windows故事是什么。
如果你真的在使用git push解决方案,你可以设置一个定时作业,将你的git repo拉到一个文件夹,然后对它执行。我在廉价的Linux VM上的其他地方这样做。除非你打算去完整的CI,否则可能没什么意义。
您可以使用非常简单的两步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完成,在“环境变量”下的“高级”部分中。一旦设置了环境变量,并且该AWS用户具有正确的权限,您就可以在CodeDeploy中运行任何所需的aws-cli命令。
完成此操作后,当您登记到Github时,CodePipeline将启动,几分钟后您的文件将在S3上。
如果您使用的是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方面。
也许你的简单用例功能过于强大,但你可以创建一个非常简单的CodePipeline来将你的github存储库推送到S3。
我还建议使用代码,简单易用,但您需要创建具有适当权限(即策略)的IAM用户到S3存储桶。
代码的基本计划是免费的。
好吧可能有一个问题,到目前为止,我可以看到代码将不会删除文件,因为您删除github中的文件,毕竟,s3不是github repo,但无论如何,许多github更新的putObject操作对我来说已经足够好了。