AWS 使用 CodePipeline 中的 CodeBuild 删除 S3 中的文件
AWS remove files in S3 using CodeBuild in CodePipeline
如何删除 S3 存储桶 中不需要的文件作为 CodePipeline 中管道的输出,使用 CodeBuild 的 buildspec.yml
文件?
例如:
GitHub 存储库的 build
文件夹放在指定的 S3 存储桶中,因此该存储桶可以用作静态网站。
我之前将一个文件推送到了我不再需要的存储桶中。在将管道的工件推送到存储桶之前,如何使用 buildspec.yml
文件到 "clean" 存储桶?
示例buildspec.yml
文件:
version: 0.2
phases:
build:
commands:
- mkdir build-output
- find . -type d -name public -exec cp -R {} build-output \;
- find . -mindepth 1 -name build-output -prune -o -exec rm -rf {} +
post_build:
commands:
- mv build-output/**/* ./
- mv build-output/* ./
- rm -R build-output
artifacts:
files:
- '**/*'
应该命令:
rm -rf *
在build
阶段是这样的?
build:
commands:
- aws s3 rm s3://mybucket/ --recursive
以及如何引用正确的存储桶而不是在文件中硬编码名称?
要删除 S3 存储桶中的文件,您可以使用您已经提到的 aws s3 rm --recursive
命令。
您可以通过在环境变量中设置将存储桶名称从管道传递到 CodeBuild。
ArtifactsBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-artifacts
CodeBuildProject:
Type: AWS::CodeBuild::Project
Properties:
Environment:
EnvironmentVariables:
- Name: ARTIFACTS_BUCKET
Value: !Ref ArtifactsBucket
Type: PLAINTEXT
在构建规范中,您可以参考 ARTIFACTS_BUCKET
env var,例如:
build:
commands:
- aws s3 rm --recursive "s3://${ARTIFACTS_BUCKET}/"
您可以采用的另一种方法是在存储桶上声明 lifecycle management。例如,您可以这样说 "delete all objects after 30 days":
ArtifactsBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-artifacts
LifecycleConfiguration:
Rules:
- ExpirationInDays: 30
Id: Expire objects in 30 days
Status: Enabled
如何删除 S3 存储桶 中不需要的文件作为 CodePipeline 中管道的输出,使用 CodeBuild 的 buildspec.yml
文件?
例如:
GitHub 存储库的 build
文件夹放在指定的 S3 存储桶中,因此该存储桶可以用作静态网站。
我之前将一个文件推送到了我不再需要的存储桶中。在将管道的工件推送到存储桶之前,如何使用 buildspec.yml
文件到 "clean" 存储桶?
示例buildspec.yml
文件:
version: 0.2
phases:
build:
commands:
- mkdir build-output
- find . -type d -name public -exec cp -R {} build-output \;
- find . -mindepth 1 -name build-output -prune -o -exec rm -rf {} +
post_build:
commands:
- mv build-output/**/* ./
- mv build-output/* ./
- rm -R build-output
artifacts:
files:
- '**/*'
应该命令:
rm -rf *
在build
阶段是这样的?
build:
commands:
- aws s3 rm s3://mybucket/ --recursive
以及如何引用正确的存储桶而不是在文件中硬编码名称?
要删除 S3 存储桶中的文件,您可以使用您已经提到的 aws s3 rm --recursive
命令。
您可以通过在环境变量中设置将存储桶名称从管道传递到 CodeBuild。
ArtifactsBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-artifacts
CodeBuildProject:
Type: AWS::CodeBuild::Project
Properties:
Environment:
EnvironmentVariables:
- Name: ARTIFACTS_BUCKET
Value: !Ref ArtifactsBucket
Type: PLAINTEXT
在构建规范中,您可以参考 ARTIFACTS_BUCKET
env var,例如:
build:
commands:
- aws s3 rm --recursive "s3://${ARTIFACTS_BUCKET}/"
您可以采用的另一种方法是在存储桶上声明 lifecycle management。例如,您可以这样说 "delete all objects after 30 days":
ArtifactsBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-artifacts
LifecycleConfiguration:
Rules:
- ExpirationInDays: 30
Id: Expire objects in 30 days
Status: Enabled