这是我的.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存储桶文件?
更新帮助我找到了解决方案。谢谢!它比hussfelt提出的答案更清晰。
由于使用列出的命令需要一些研究,我将解释为什么我必须为找到这篇文章的任何其他人改变我的.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
为了解决这个问题,我从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来说似乎是强制性的。
希望这可以帮助!
谢谢大家,上面的脚本帮助我构建了适合我的以下内容
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
只想添加其他人的答案。不幸的是我无法发表评论,因为我的声誉很低。
我在pip install awscli
或pip install awscli --user
脚本上收到错误。以下是在travisCI上安装awscli的有效方法:
before_deploy:
- pip install awscli --upgrade --user
如果有人想知道如何添加aws凭据,我发现这个good answer here。
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
。如果设置了这些变量,你的aws s3命令应该可以工作。