【问题标题】:GitHub Actions not creating files when it's in a subdirectoryGitHub Actions 在子目录中时不创建文件
【发布时间】:2021-09-23 19:16:02
【问题描述】:

我正在尝试学习如何使用 GitHub Actions,但遇到了一个小问题。当我在本地运行代码时,python training/train.py 运行时创建的文件会在正确的文件夹中创建。但是,当我尝试对 GitHub Actions 执行相同操作时,仅当我选择在根目录而不是 /training/outputs/ 中创建文件时才会创建文件。有没有办法解决这个问题?

这是我的 GitHub 存储库:https://github.com/JayThibs/github-actions-ml-template

【问题讨论】:

  • 可能与执行脚本的用户权限有关。您是否尝试将sudopython training/train.py 一起使用?否则,它也可以在执行脚本之前使用cd /training/outputs/,将文件直接添加到该子目录中。
  • 不幸的是,我确实尝试过使用 sudo,但没有成功。而且我宁愿弄清楚如何在不必 cd 的情况下做到这一点,因为它会在未来引起问题,然后我想在几个不同的目录中创建输出。
  • 您可以尝试在这里创建文件夹$GITHUB_WORKSPACE/training/outputs/。如果您将本地 env 上的 env GITHUB_WORKSPACE 设置为空值,您将获得脚本在本地和构建代理上工作。

标签: github continuous-integration github-actions


【解决方案1】:

我已经想出了如何解决这个问题,所以我想我应该在这里分享。

由于我使用的是 CML(连续机器学习),我可以在我的 GitHub Actions cml.yaml 文件中简单地包含以下行:

cml-pr training/outputs/*

这是因为 cml 不会自动将输出推送到我的代码。

除了使用cml-pr,还可以手动使用以下github推送:

git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"

git add training/outputs/*
git commit --message "Commit training outputs"
git push

请记住,如果多个同时运行之间存在竞争条件,后一种解决方案将无法正常处理合并冲突。

由于该操作会将文件推送到您的存储库,因此如果您的操作在推送时触发,它将触发另一个 GitHub 操作。要解决这个问题,只需在提交消息中添加类似 [skip ci] 的内容,GitHub 就会阻止触发操作。你可以在这里了解更多信息:https://github.blog/changelog/2021-02-08-github-actions-skip-pull-request-and-push-workflows-with-skip-ci/

GitHub 上的 0x2b3bfa0 帮助我解决了这个问题,您可以在这里找到我们的对话:https://github.com/iterative/cml/issues/658

【讨论】:

    猜你喜欢
    • 2020-01-08
    • 1970-01-01
    • 2022-01-25
    • 2021-05-23
    • 2020-12-17
    • 2021-10-30
    • 2020-09-15
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多