【问题标题】:How to set cache-control to max-age=0 with github s3 sync action如何使用 github s3 同步操作将缓存控制设置为 max-age=0
【发布时间】:2020-08-19 21:57:35
【问题描述】:

每次合并到 master 时,我都会将 vue 应用程序上传到我的 s3 存储桶。我的问题是缓存的失效不能完全起作用。我的下一步是在每次推送时向对象index.html 添加元数据。为此我想问一下如何在github操作jakejarvis/s3-sync-actionhttps://github.com/marketplace/actions/s3-sync)中添加它?

或者我必须使用另一个 github 操作来完成该操作吗?

目前我的工作流程是这样的:

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:我知道我需要编写测试????

【问题讨论】:

    标签: vue.js amazon-s3 continuous-deployment cache-control github-actions


    【解决方案1】:

    在你的例子中:

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

    args 生效是因为它按原样传递给aws s3 invocationaws s3 invocation 末尾有$*

    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
    

    【讨论】:

    • 感谢您的回复。如果在这种情况下理解正确,所有文件都会得到cache-control max-age=0 或者?问题是我只想让index.html 拥有这些元标记。
    • 是的,这将为所有文件设置它。我认为您需要第二次调用才能为不同的文件提供单独的 --cache-control
    • 感谢您的帮助!所以你的意思是我需要分叉操作并添加另一个脚本?
    猜你喜欢
    • 2017-07-16
    • 1970-01-01
    • 2018-05-08
    • 2015-12-04
    • 2011-02-25
    • 1970-01-01
    • 2013-04-12
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多