如何在travis部署之前清除S3存储桶

时间:2015-06-12 16:43:09

标签: amazon-web-services amazon-s3 travis-ci

这是我的.travis.yml

deploy:
  provider: s3
  access_key_id: $AWS_ACCESS_KEY
  secret_access_key: $AWS_SECRET_KEY
  bucket: domain.com
  skip_cleanup: true
  acl: public_read
  region: ap-northeast-1
  endpoint: domain.com.s3-website-ap-northeast-1.amazonaws.com
  detect_encoding: true
  on:
    branch: master

但它只是将文件上传到存储桶而不是同步。 如何同步或清除S3存储桶文件?

4 个答案:

答案 0 :(得分:4)

更新帮助我找到了解决方案。谢谢!它比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_IDAWS_SECRET_ACCESS_KEY。 hussfelt写了如何在他们的答案中提供这些内容。 Travis文档中还描述了该过程:encryptionAWS 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

答案 1 :(得分:2)

为了解决这个问题,我从pip安装了AWS cli并执行了一个部署之前的脚本。

这是您在.travis.yml中所需要的:

before_install:
  - pip install --user awscli
  - export PATH=$PATH:$HOME/.local/bin
before_deploy: bin/deploy.sh

您还需要在.travis.yml中保护两个环境变量,这些变量已由aws-cli准备好了:

travis encrypt AWS_ACCESS_KEY_ID=YOUR_KEY_HERE --add
travis encrypt AWS_SECRET_ACCESS_KEY=YOUR_SECRET_HERE --add

你的bin / deploy.sh应该类似于以下内容

#!/bin/sh

echo "Clearing bucket: s3://your-bucket/path/inside/bucket/if/you/want"
aws s3 rm s3://your-bucket/path/inside/bucket/if/you/want --recursive --region eu-central-1

不是我们指定区域,这对于aws cli来说似乎是强制性的。

希望这有帮助!

答案 2 :(得分:0)

谢谢你们, 上面的脚本帮助我构建了对我有用的以下内容

before_script: - pip install awscli - export PATH=$PATH:$HOME/.local/bin - AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY aws s3 rm s3://$BUCKET --recursive --region=$REGION

答案 3 :(得分:0)

只想添加其他人的答案。不幸的是,由于声誉低下,我无法发表评论。

安装awscli

我在$ ./alubio ssh, s 1 mosh, m 2 telnet, t 3 pip install awscli脚本上遇到错误。这是在travisCI上安装awscli的方法:

pip install awscli --user

添加凭据

如果有人还想知道如何添加AWS凭证,我就找到了good answer here

  1. 在travis-ci仪表板设置中设置您的ENV变量before_deploy: - pip install awscli --upgrade --user AWS_ACCESS_KEY_ID。如果设置了这些变量,则aws s3命令应该可以使用。