AWS使用CodePipeline中的CodeBuild删除S3中的文件

问题描述 投票:1回答:1

如何使用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

我如何引用正确的存储桶而不是硬编码文件中的名称?

amazon-web-services amazon-s3 aws-codepipeline aws-codebuild
1个回答
3
投票

要删除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
© www.soinside.com 2019 - 2024. All rights reserved.