Как установить cache-control на max-age = 0 с помощью github s3 syn c action - PullRequest
2 голосов
/ 05 мая 2020

Я загружаю приложение vue в свою корзину s3 при каждом слиянии для мастеринга. Моя проблема в том, что аннулирование кеша полностью не работает. Мой следующий шаг - добавление метаданных к объекту index.html на каждые sh pu. Для этого я хотел спросить, как добавить его в действие github jakejarvis/s3-sync-action (https://github.com/marketplace/actions/s3-sync)?

Или мне нужно использовать другое действие github для выполнения sh, что ?

Мой рабочий процесс на данный момент выглядит так:

name: Build

on:
  push:
    branches: [master]

  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Use Node.js 12.x
        uses: actions/setup-node@v1
        with:
          node-version: '12.x'

      - name: npm install
        run: |
          npm ci
      - name: build
        run: |
          npm run build

      - name: Deploy to S3
        uses: jakejarvis/s3-sync-action@master
        with:
          args: --acl public-read --delete
        env:
          AWS_S3_BUCKET: ${{ secrets.AWS_STAGING_BUCKET_NAME }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: ${{ secrets.AWS_REGION }}
          SOURCE_DIR: 'dist'

      - name: Invalidate cloudfront
        uses: muratiger/invalidate-cloudfront-and-wait-for-completion-action@master
        env:
          DISTRIBUTION_ID: ${{ secrets.AWS_STAGING_DISTRIBUTION_ID }}
          PATHS: '/*'
          AWS_REGION: ${{ secrets.AWS_REGION }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

Результат, который я ищу, состоит в том, что index.html имеет другие метаданные Cache-Control: max-age=0 после каждого развертывания. На данный момент я добавляю его вручную в консоль управления s3, что для меня не очень хорошее решение. Поскольку метаданные удаляются после каждого развертывания.

Я нашел ответы о том, как это сделать с помощью aws -cli, но я не знаю, что это можно добавить в моем действии.

aws s3 cp s3://[mybucket]/index.html s3://[mybucket]/index.html --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=0,public

PS: Я знаю, что нужно писать тесты ?

1 Ответ

2 голосов
/ 12 мая 2020

В вашем примере:

    with:
      args: --acl public-read --delete

args вступает в силу, потому что он передается как есть в aws s3 вызов , который имеет $* в конце:

sh -c "aws s3 sync ${SOURCE_DIR:-.} s3://${AWS_S3_BUCKET}/${DEST_DIR} \
              --profile s3-sync-action \
              --no-progress \
              ${ENDPOINT_APPEND} $*"

Если вы также хотите установить --cache-control max-age=0,public, добавьте его в args:

    with:
      args: --acl public-read --delete --cache-control max-age=0,public
...