每次合并到master时,我都将一个vue应用程序上传到我的s3存储桶中。我的问题是缓存的失效不能完全起作用。我的下一步是在每次推送时将元数据添加到对象index.html
。为此,我想问一下如何在github动作jakejarvis/s3-sync-action
(https://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:我知道我需要编写测试🙈
with:
args: --acl public-read --delete
[args
生效,因为它按原样传递到了aws s3
invocation,后者的末尾是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