GitHub Workflow中AWS S3同步:仅覆盖指定文件夹的配置验证
你的S3同步配置问题解析
你的修改配置存在几个问题,无法实现预期需求,正确的写法如下:
name: Copy files to the s3 website content bucket if: ${{ success() }} run: aws s3 sync ./pages/first-website s3://${{env.AWS_S3_BUCKET}}/pages/first-website --delete --acl public-read
问题点说明:
- 本地路径不要加开头的
/:GitHub Workflow的工作目录是项目根目录,用相对路径./pages/first-website(或直接pages/first-website)才能正确指向目标文件夹。 - 多余的
--include和--exclude完全没必要:当你把源目录指定为pages/first-website时,aws s3 sync只会同步这个目录下的所有内容到S3的对应路径,不会碰桶里的其他文件。加上--delete后,只会删除S3目标路径(s3://bucket/pages/first-website)里那些本地源目录不存在的旧文件/文件夹,不会影响桶内其他文件夹的内容。 - 原配置里的
--include "/pages/first-website"路径匹配错误:sync的过滤规则是基于源目录的相对路径,当源是pages/first-website,这里的include路径应该针对该目录下的文件而非绝对路径,且--exclude "*"会先排除所有内容,后续的include路径也匹配不到,反而会导致什么都同步不了。
验证逻辑:
这个正确命令会完成以下操作:
- 将本地
pages/first-website下的所有文件和子文件夹同步到S3桶的pages/first-website路径下 - 删除S3该路径下存在但本地已删除的旧文件/文件夹
- 保持桶内其他路径的内容完全不动,仅处理指定文件夹
内容的提问来源于stack exchange,提问作者user2953989
相关产品推荐
相关产品推荐

