AWS удаляет файлы в S3, используя CodeBuild в CodePipeline - PullRequest
2 голосов
/ 06 марта 2019

Как я могу удалить ненужные файлы из S3 корзины в качестве вывода конвейера в CodePipeline , используя CodeBuild buildspec.yml файл?

Например:

Папка build репозитория GitHub помещается в указанное хранилище S3, поэтому оно может использоваться в качестве статического веб-сайта.

Я положил файл ранее в корзину, которая мне больше не нужна. Как я могу использовать файл buildspec.yml для «очистки» корзины перед тем, как помещать артефакты моего конвейера в корзину?

Пример buildspec.yml file:

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

А как мне ссылаться на нужный сегмент вместо жесткого кодирования имени в файле?

1 Ответ

3 голосов
/ 10 марта 2019

Чтобы удалить файлы в корзине 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}/" 

Альтернативный подход, который вы можете использовать, - объявить жизненный циклуправление на ведре.Например, вы можете сказать «удалить все объекты через 30 дней» следующим образом:

ArtifactsBucket:
  Type: AWS::S3::Bucket
  Properties:
    BucketName: my-artifacts
    LifecycleConfiguration:
      Rules:
        - ExpirationInDays: 30
          Id: Expire objects in 30 days
          Status: Enabled
...