使用上传云存储操作替换文件夹

Replace folder using upload-cloud-storage action

我在 github 操作中有以下工作流程:

name: Move artifacts

on:
  push:
    branches:
      - main

jobs:
  move_artifacts:
    name: Move artifacts
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - id: upload-files
        uses: google-github-actions/upload-cloud-storage@main
        with:
          credentials: ${{ secrets.gcp_credentials }}
          path: .
          destination: my-bucket/my-folder/

并且,当触发此工作流时,存储库中的文件将复制到 GCS 中,但是,如果 GCS 文件夹中还有其他文件,则这些文件不会被删除。

如何以 my-bucket/my-folder 的内容与 repo 的内容完全相同的方式进行上传?我怎样才能删除不再在存储库中的文件?

您可以尝试使用 gsutil 从存储桶中删除文件,如下所示:

- name: Set up Cloud SDK
  uses: google-github-actions/setup-gcloud@master
  with:
    project_id: ${{ secrets.GCP_PROJECT_ID }}
    service_account_key: ${{ secrets.GCP_SA_KEY }}
    export_default_credentials: true


- name: Delet files from bucket
  run: gsutil rm gs://my-bucket/my-folder/**

您可以使用以下 Github 操作在目标中拥有与源中相同的文件:

name: Copy files to GCS
on:
  push:
    branches: [main]

jobs: 
  copy-files-gcs:
    name: Copy directory to GCS
    runs-on: ubuntu-latest

    # Add "id-token" with the intended permissions.
    permissions:
      contents: 'read'
      id-token: 'write'   
  
    steps:
    - name: Checkout
      uses: actions/checkout@v3

    - id: 'auth'
      uses: 'google-github-actions/auth@v0'
      with:
        credentials_json: '${{ secrets.GCP_CREDENTIALS }}'

    - name: 'Set up Cloud SDK'
      uses: 'google-github-actions/setup-gcloud@v0'

    - name: 'Use gcloud CLI'
      run: 'gsutil -m rsync -R -d kavach gs://<your-bucket>'

同步目标文件夹中文件的关键是 rsync 的 -d 标志,它删除目标中不存在于源中的文件.