如何使用 CodeBuild 的{{1删除 S3存储桶中不需要的文件,作为 CodePipeline 中管道的输出}}文件?
例如:
将GitHub存储库的buildspec.yml
文件夹放入指定的S3存储桶中,以便将该存储桶用作静态网站。
我较早地将文件推送到了我不再需要的存储桶中。在将管道的工件推送到存储桶之前,如何使用build
文件“清理”存储桶?
示例buildspec.yml
文件:
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
该如何引用正确的存储桶,而不是对文件中的名称进行硬编码?
答案 0 :(得分:2)
要删除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
然后在buildspec中,您可以引用ARTIFACTS_BUCKET
env var,例如:
build:
commands:
- aws s3 rm --recursive "s3://${ARTIFACTS_BUCKET}/"
您可以采用的另一种方法是在存储桶上声明lifecycle management。例如,您可以说“ 30天后删除所有对象”,如下所示:
ArtifactsBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-artifacts
LifecycleConfiguration:
Rules:
- ExpirationInDays: 30
Id: Expire objects in 30 days
Status: Enabled