从 s3 下载到动作工作流程
Download from s3 into a actions workflow
我正在处理 2 个 github 操作工作流程:
- 训练模型并将其保存到 s3(每月)
- 从 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 文件夹保持同步
我正在处理 2 个 github 操作工作流程:
- 训练模型并将其保存到 s3(每月)
- 从 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 文件夹保持同步