从 s3 下载到动作工作流程

Download from s3 into a actions workflow

我正在处理 2 个 github 操作工作流程:

  1. 训练模型并将其保存到 s3(每月)
  2. 从 s3 下载模型并将其用于预测(每天)

使用 https://github.com/jakejarvis/s3-sync-action 我能够完成第一个工作流程。我训练了一个模型,然后将目录 'models' 与 s3 上的存储桶同步。

我原计划使用相同的操作来下载用于预测的模型,但看起来这个操作是单向的,只上传不下载。

我通过创建工作流并尝试与运行程序同步来找到困难的方法:

  retreive-model-s3:
    runs-on: ubuntu-latest
    steps:
      - name: checkout current repo
        uses: actions/checkout@master
      - name: make dir to sync with s3
        run: mkdir models
      - name: checkout s3 sync action
        uses: jakejarvis/s3-sync-action@master
        with:
          args: --follow-symlinks
        env:
          AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_S3_ENDPOINT: ${{ secrets.AWS_S3_ENDPOINT }}
          AWS_REGION: 'us-south'  # optional: defaults to us-east-1
          SOURCE_DIR: 'models'    # optional: defaults to entire repository
      - name: dir after
        run: |
          ls -l
          ls -l models
      - name: Upload model as artifact
        uses: actions/upload-artifact@v2
        with:
          name: xgb-model
          path: models/regression_model_full.rds

在运行时,当我登录UI时,我可以看到对象regression_model_full.rds确实存在,只是没有下载。我仍然不确定这是否符合预期(操作的名称 'sync' 让我感到困惑)。

对于我们的 s3,我们必须使用参数 AWS_S3_ENDPOINT。我发现了另一个动作,AWS S3 here but unlike the sync action I started out with there's no option to add AWS_S3_ENDPOINT. Looking at the repo 也已经两年了,除了他 8 个月前的自述更新。

在工作流程中从 s3 下载的 'prescribed' 或传统方式是什么?

我遇到了和你一样的问题。我试图从 S3 下载以更新 GitHub 中的目录文件夹。

我从操作中学到的是,如果您要更新存储库中的某些文件,则必须遵循正常的方法,就像您在本地进行操作一样,例如)结帐、进行更改、推送。

因此,对于您的特定工作流程,您必须使用 actions/checkout@master 在工作流程中检查您的存储库,并且在与特定目录同步后,我没有做的主要问题是将更改推回存储库!这让我可以每天更新我的文件夹。

无论如何,这是我的脚本,希望你觉得它有用。我正在使用您最后提到的 AWS S3 操作。

# This is a basic workflow to help you get started with Actions

name: Fetch data.

# Controls when the workflow will run
on:
  schedule:
    # Runs "at hour 6 past every day" (see https://crontab.guru)
    - cron: '00 6 * * *'
    
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - uses: keithweaver/aws-s3-github-action@v1.0.0 # Verifies the recursive flag
        name: sync folder
        with:
          command: sync
          source: ${{ secrets.S3_BUCKET }}
          destination: ./data/
          aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws_region: ${{ secrets.AWS_REGION }}
          flags: --delete
      - name: Commit changes
        run: |
         git config --local user.email "action@github.com"
         git config --local user.name "GitHub Action"
         git add .
         git diff-index --quiet HEAD || git commit -m "{commit message}" -a
         git push origin main:main

旁注:标志 --delete 允许您通过删除 s3 文件夹中不再存在的任何文件来使当前文件夹与 s3 文件夹保持同步