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

问题描述 投票:8回答:4

这是我的.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存储桶文件?

amazon-web-services amazon-s3 travis-ci
4个回答
4
投票

更新帮助我找到了解决方案。谢谢!它比hussfelt提出的答案更清晰。

Using 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

Environment

我们需要向aws提供我们的AWS凭证以授权任何交互。 aws使用的环境变量是AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY。 hussfelt写了如何在他们的答案中提供这些内容。该过程也在Travis文档中描述:encryptionAWS specifics

Full solution

# 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

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来说似乎是强制性的。

希望这可以帮助!


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


0
投票

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

installing awscli

我在pip install awsclipip install awscli --user脚本上收到错误。以下是在travisCI上安装awscli的有效方法:

before_deploy:
  - pip install awscli --upgrade --user

添加凭据

如果有人想知道如何添加aws凭据,我发现这个good answer here

  1. 在travis-ci仪表板设置中设置您的ENV变量,AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY。如果设置了这些变量,你的aws s3命令应该可以工作。
© www.soinside.com 2019 - 2024. All rights reserved.