当前位置: 首页 > 知识库问答 >
问题:

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

费朗
2023-03-14

如何使用CodeBuild的buildspec删除S3 bucket中不需要的文件作为CodePipeline中管道的输出。yml文件?

例如:

GitHub repo的build文件夹放在指定的S3 bucket中,因此该bucket可以用作静态网站。

我之前把一个文件推到了桶里,我不再需要了。如何使用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:

commands:
  - aws s3 rm s3://mybucket/ --recursive

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

共有1个答案

轩辕远
2023-03-14

要删除S3桶中的文件,您可以使用aws s3 rm-递归命令,正如您已经提到的。

通过在环境变量中设置,可以将bucket名称从管道传递到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\u BUCKETenv变量,例如:

build:
  commands:
    - aws s3 rm --recursive "s3://${ARTIFACTS_BUCKET}/" 

您可以采取的另一种方法是在bucket上声明生命周期管理。例如,您可以这样说“30天后删除所有对象”:

ArtifactsBucket:
  Type: AWS::S3::Bucket
  Properties:
    BucketName: my-artifacts
    LifecycleConfiguration:
      Rules:
        - ExpirationInDays: 30
          Id: Expire objects in 30 days
          Status: Enabled
 类似资料:
  • 我设置AWS CodeBuild将大量工件文件写入S3。CodeBuild yaml文件定义了哪些文件和CodeBuild项目设置定义了S3存储桶。而且一切正常。 当您从AWS CodePipeline触发AWS CodeBuild时,CodePipeline似乎忽略了AWS CodeBuild的工件设置,而是将工件强制放入codemipline S3桶中的zip文件中。 有没有一种方法可以使用C

  • 如您所见,我正在使用codePipeline和codeBuild自动化部署。我的后端基于无服务器框架,它在触发命令时部署lambda函数。这就是我没有使用codeDeploy进行传统部署的原因<代码>构建规范。yml文件如下所示: 现在,我有3个关于CodeBuild和Serverless的问题: 问题1:命令依赖于一个名为的文件,其中包含数据库密码等秘密。此文件将不会被签入git。你认为在cod

  • 我想自动部署用java开发的AWS Lambda。为此,我创建了CodePipeline,它是在git将命令推送到CodeCommit存储库时触发的。CodePipeline中的下一步是CodeBuild项目。CodeBuild使用以下buildspec。yml文件: 当CodeBuild项目手动运行时,它将上传jar文件到s3桶。这个jar文件可以毫无问题地用于更新lambda,一切都如预期的那

  • 我试图使用cx_Oracle从AWS Lambda函数(python3.7)内部连接到RDS(Oracle)数据库。此外,Lambda函数本身是使用buildspec.yml文件从AWS CodeBuild自动构建的。CodeBuild本身通过配置AWS CodePipeline来运行,这样,每当我将代码放入的存储库(在本例中是AWS CodeCommit)更新时,它都会自动构建这些东西。 我所做

  • 为了清楚我的codePipeline步骤,我决定有几个不同构建规范文件的codeBuild项目。 我面临一个问题,为每个codeBuild项目指定要使用的构建规范文件。当定义云形成模板来部署codeBuild项目时,AWS::CodeBuild::项目的属性需要在上设置;所以我不确定我可以指定在哪里不同的路径。 目前,我的结构如下: codemipeline文件 部署步骤1.1 知道在哪里定义路径