gpt4 book ai didi

amazon-web-services - AWS使用CodePipeline中的CodeBuild删除S3中的文件

转载 作者:行者123 更新时间:2023-12-03 15:44:45 26 4
gpt4 key购买 nike

如何使用 CodeBuild buildspec.yml文件删除 S3存储桶中不需要的文件,作为 CodePipeline 中管道的输出?

例如:

GitHub存储库的build文件夹放置在指定的S3存储桶中,因此该存储桶可用作静态网站。

我将文件早些时候推到了我不再需要的存储桶中。在将管道的工件推送到存储桶之前,如何使用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阶段?
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

然后,在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

关于amazon-web-services - AWS使用CodePipeline中的CodeBuild删除S3中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55025290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com