在 github 推送时将静态站点部署到 s3 的最佳策略?
Best strategy to deploy static site to s3 on github push?
我想自动将我们的站点部署到 AWS S3。我已经编写了一个节点脚本来自动构建和上传网站,但我希望只要我们的回购协议的 master
分支在 github 上更新,我就会自动让脚本 运行。
我查看了 AWS CodeDeploy,但看起来它专门用于部署到 EC2。我也看过 AWS Lambda,但似乎没有明确的方法可以使用 git
提取回购协议的副本,因此我可以 运行 脚本。
我可以使用任何服务(最好与 AWS 相关)吗?
而不是直接使用 AWS 服务(正如您所说,他们几乎都希望进行更复杂的设置,部署到 EC2 等),您最好使用 CI 提供商,例如 Shippable, Codeship or Wercker.
这些都能够从 git
更新、运行 构建命令、将实用程序安装到它们的 CI images/containers 并将文件复制到 S3。
可能有一些初创公司已经为您的目的构建了一个精确的工具,但它们还没有出现在我的雷达上:-)
我知道这不是 git 部署....但我没有设置 CI 框,而是使用了 s3cmd。
执行此命令会将我的构建目录与 s3 同步。
s3cmd sync -r ~/code/mysite/build s3://www.mysite.com --delete-removed
我在 Linux 上使用它。不确定他们的 OSX 和 Windows 故事是什么。
如果您真的想要 git 推送解决方案,您可以设置一个定时作业,将您的 git 存储库拉到一个文件夹,然后对其执行此操作。我在其他地方使用便宜的 Linux VM 执行此操作。不过,除非你打算吃饱 CI,否则可能没什么意义。
前段时间我也有同样的目标,现在发布了一个小工具,至少对我来说解决了这个问题。它使用 AWS Lambda
并将存储库的特定分支部署到 push
之后的 S3
。您可以充分利用 GitHub 部署密钥,它作为个人访问令牌的权限较少,并且可以针对每个存储库进行配置。
请看一下github-bucket,也许对你也有帮助。
对于您的简单用例来说可能过于强大,但您可以创建一个非常简单的 CodePipeline 来将您的 github 存储库推送到 S3。
我也推荐使用 codeship,简单易行,但是你需要创建 IAM 用户,并且对 S3 存储桶具有适当的权限(即策略)。
codeship 的基本计划是免费的。
好吧,到目前为止我可以看到 codeship 不会像您在 github 中删除文件那样删除文件,毕竟,s3 不是 github 存储库,但无论如何,putObject许多 github 更新的操作对我来说已经足够好了。
如果您使用的是 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 进行设置。基本上,您只需填写 AWS 控制台中的不同部分。不需要单独的 CI 工具及其增加的复杂性。
在管道的第一步中,从 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 的控制台,位于 "environment variables" 下的“高级”部分。一旦设置了环境变量并且该 AWS 用户具有正确的权限,您就可以 运行 在 CodeDeploy 中使用您想要的任何 aws-cli 命令。
完成此操作后,当您签入 Github 时,CodePipeline 将启动,几分钟后您的文件将在 S3 上。
我过去使用过 Deploy Bot,我对它非常满意。
它可以通过 Git 推送到 S3 甚至 FTP,它还可以 运行 您的构建脚本,甚至可以为您推送通知到 Slack。
我想自动将我们的站点部署到 AWS S3。我已经编写了一个节点脚本来自动构建和上传网站,但我希望只要我们的回购协议的 master
分支在 github 上更新,我就会自动让脚本 运行。
我查看了 AWS CodeDeploy,但看起来它专门用于部署到 EC2。我也看过 AWS Lambda,但似乎没有明确的方法可以使用 git
提取回购协议的副本,因此我可以 运行 脚本。
我可以使用任何服务(最好与 AWS 相关)吗?
而不是直接使用 AWS 服务(正如您所说,他们几乎都希望进行更复杂的设置,部署到 EC2 等),您最好使用 CI 提供商,例如 Shippable, Codeship or Wercker.
这些都能够从 git
更新、运行 构建命令、将实用程序安装到它们的 CI images/containers 并将文件复制到 S3。
可能有一些初创公司已经为您的目的构建了一个精确的工具,但它们还没有出现在我的雷达上:-)
我知道这不是 git 部署....但我没有设置 CI 框,而是使用了 s3cmd。
执行此命令会将我的构建目录与 s3 同步。
s3cmd sync -r ~/code/mysite/build s3://www.mysite.com --delete-removed
我在 Linux 上使用它。不确定他们的 OSX 和 Windows 故事是什么。
如果您真的想要 git 推送解决方案,您可以设置一个定时作业,将您的 git 存储库拉到一个文件夹,然后对其执行此操作。我在其他地方使用便宜的 Linux VM 执行此操作。不过,除非你打算吃饱 CI,否则可能没什么意义。
前段时间我也有同样的目标,现在发布了一个小工具,至少对我来说解决了这个问题。它使用 AWS Lambda
并将存储库的特定分支部署到 push
之后的 S3
。您可以充分利用 GitHub 部署密钥,它作为个人访问令牌的权限较少,并且可以针对每个存储库进行配置。
请看一下github-bucket,也许对你也有帮助。
对于您的简单用例来说可能过于强大,但您可以创建一个非常简单的 CodePipeline 来将您的 github 存储库推送到 S3。
我也推荐使用 codeship,简单易行,但是你需要创建 IAM 用户,并且对 S3 存储桶具有适当的权限(即策略)。
codeship 的基本计划是免费的。
好吧,到目前为止我可以看到 codeship 不会像您在 github 中删除文件那样删除文件,毕竟,s3 不是 github 存储库,但无论如何,putObject许多 github 更新的操作对我来说已经足够好了。
如果您使用的是 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 进行设置。基本上,您只需填写 AWS 控制台中的不同部分。不需要单独的 CI 工具及其增加的复杂性。
在管道的第一步中,从 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 的控制台,位于 "environment variables" 下的“高级”部分。一旦设置了环境变量并且该 AWS 用户具有正确的权限,您就可以 运行 在 CodeDeploy 中使用您想要的任何 aws-cli 命令。
完成此操作后,当您签入 Github 时,CodePipeline 将启动,几分钟后您的文件将在 S3 上。
我过去使用过 Deploy Bot,我对它非常满意。
它可以通过 Git 推送到 S3 甚至 FTP,它还可以 运行 您的构建脚本,甚至可以为您推送通知到 Slack。