这是我的.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存储桶文件?
答案 0 :(得分:4)
更新帮助我找到了解决方案。谢谢!它比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
答案 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)
只想添加其他人的答案。不幸的是,由于声誉低下,我无法发表评论。
我在$ ./alubio
ssh, s 1
mosh, m 2
telnet, t 3
或pip install awscli
脚本上遇到错误。这是在travisCI上安装awscli的方法:
pip install awscli --user
如果有人还想知道如何添加AWS凭证,我就找到了good answer here。
before_deploy:
- pip install awscli --upgrade --user
,AWS_ACCESS_KEY_ID
。如果设置了这些变量,则aws s3命令应该可以使用。