更新帮助我找到了解决方案。谢谢!它比 hussfelt 提出的答案更干净。
使用 awscli
由于使用列出的命令需要进行一些研究,因此我将解释如何为找到此帖子的任何其他人更改我的 .travis.yml。
before_deploy: pip install --user awscli
首先安装 awscli 以启用与您的 S3 存储桶的同步。要在 Travis 的基于容器的架构上运行,我们不能使用 sudo,因此请使用 --user 安装到主目录。在 Linux 上,这是 Travis 的默认操作系统,使用此选项安装的二进制文件位于 ~/.local/bin/-
deploy:
provider: script
接下来,使用script 提供程序运行自定义命令作为部署方法。
script: ~/.local/bin/aws s3 sync dist s3://example.com --region=eu-central-1 --delete
这一行是您的文件已上传。 aws s3 sync 用于在本地机器和存储桶之间同步文件。完整文档可在here 获得。
在我的示例中,dist 是我们要上传到 S3 的构建文件夹。您的构建系统可能将其称为 build 或其他名称。 “example.com”是您的存储桶的名称。需要 region 参数来唯一标识您的存储桶。
这个命令中真正有趣的一点是--delete 开关,它是我们问题的解决方案。设置后,aws 将删除在您的存储桶中找到的所有文件,但不在您的构建目录中。
skip_cleanup: true
on:
branch: master
skip_cleanup 应该被设置,否则您的任何文件都不会被上传。就我个人而言,我喜欢让 Travis 仅部署对 master 的提交,但这里可以进行任何配置。请参阅the docs 了解更多信息。
环境
我们需要提供 aws 我们的 AWS 凭证来授权任何交互。 aws 使用的环境变量是AWS_ACCESS_KEY_ID 和AWS_SECRET_ACCESS_KEY。 hussfelt 写了如何在他们的回答中提供这些。 Travis 文档中也描述了该过程:encryption 和 AWS specifics。
完整解决方案
# Deploy using awscli to enable pruning of removed files
before_deploy: pip install --user awscli
deploy:
provider: script
script: ~/.local/bin/aws s3 sync dist s3://example.com --region=eu-central-1 --delete
skip_cleanup: true
on:
branch: master