Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 在travis部署之前如何清除S3存储桶_Amazon Web Services_Amazon S3_Travis Ci - Fatal编程技术网

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

Amazon web services 在travis部署之前如何清除S3存储桶,amazon-web-services,amazon-s3,travis-ci,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.amazo

这是我的
.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
但它只是将文件上传到bucket,而不是同步。
如何同步或清除S3存储桶文件?

为了解决这个问题,我从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来说似乎是强制性的


希望这有帮助

更新帮助我找到了解决方案。谢谢这比侯赛尔提出的答案更清楚

使用awscli 由于使用列出的命令需要一些研究,我将解释如何为找到此帖子的其他人更改我的
.travis.yml

before_deploy: pip install --user awscli
首先安装
awscli
,以启用与S3存储桶的同步。要在Travis基于容器的体系结构上运行,我们不能使用
sudo
,因此请使用
--user
安装到主目录。在Linux(Travis上的默认操作系统)上,使用此选项安装的二进制文件位于
~/.local/bin/
-

deploy:
  provider: script
接下来,使用
脚本
提供程序运行自定义命令作为部署方法

  script: ~/.local/bin/aws s3 sync dist s3://example.com --region=eu-central-1 --delete
这一行是您的文件被上传的地方。aws s3 sync用于在本地计算机和存储桶之间同步文件。可以获得完整的文档

在我的示例中,
dist
是我们想要上传到S3的构建文件夹。您的构建系统可能会将其称为
build
或其他名称。“example.com”是您的bucket的名称。region参数是唯一标识bucket所必需的

这个命令中真正有趣的一点是
--delete
开关,它是我们问题的解决方案。设置后,
aws
将删除在bucket中找到但不在构建目录中的任何文件

  skip_cleanup: true
  on:
    branch: master
应设置“跳过清理”,否则将不会上载任何文件。就我个人而言,我希望Travis deploy只提交给
master
,但这里可以进行任何配置。有关更多信息,请参阅

环境 我们需要向aws提供我们的aws凭证以授权任何交互。
aws
使用的环境变量为
aws\u访问密钥\u ID
aws\u密码\u访问密钥
。Hussell在他们的回答中写到了如何提供这些。Travis文档中也描述了该过程:和

全解 谢谢各位, 上面的脚本帮助我构建了以下适合我的脚本

在脚本之前:
-pip安装awscli
-导出路径=$PATH:$HOME/.local/bin

-AWS\u ACCESS\u KEY\u ID=$AWS\u ACCESS\u KEY AWS\u SECRET\u ACCESS\u KEY=$AWS\u SECRET\u ACCESS\u KEY AWS s3 rm s3://$BUCKET--recursive--region=$region

只想添加到其他人的答案上。不幸的是,我不能发表评论,因为我名声不好

安装awscli 我在
pip install awscli
pip install awscli--user
脚本上遇到错误。以下是我在travisCI安装awscli的工作原理:

before_deploy:
  - pip install awscli --upgrade --user
添加凭据 如果有人想知道如何添加aws凭据,我发现了这个

  • 在travis ci仪表板设置中设置环境变量、
    AWS\u ACCESS\u KEY\u ID
    AWS\u SECRET\u ACCESS\u KEY
    。如果设置了这些变量,aws s3命令应该可以工作

  • 是的,我对这个很感兴趣。2015年6月以来有何进展DBe如果您同时运行多个部署目标,请小心上述脚本,这将在每个部署阶段触发一次。为避免上述情况,您可以在成功后将运行部署脚本的指令移动到
    :“bin/deploy.sh”
    我在travis查找awscli时遇到问题,因此,在部署:pip安装之前,我没有安装:pip安装awscli,而是先安装:pip安装awscli,然后再安装脚本:aws s3 syn dist…..,效果很好,请不要在答案中添加“谢谢”。在网站上投入一些时间,你将获得足够的投票结果,这是表示感谢的堆栈溢出方式。
    before_deploy:
      - pip install awscli --upgrade --user