如何在 Github 工作流上运行 Ruby 脚本

Posted

技术标签:

【中文标题】如何在 Github 工作流上运行 Ruby 脚本【英文标题】:How to run a Ruby script on a Github Workflow 【发布时间】:2020-03-26 18:10:48 【问题描述】:

我有一个 Ruby 脚本,我想在创建拉取请求时运行它。此拉取请求验证一系列条件以确保拉取请求可以合并。这是一个非常简单的脚本,没有外部 gem,只有标准的 Ruby。

我正在尝试在运行步骤的作业上运行此脚本。问题是,我不确定应该保存文件的路径。

脚本被称为:validator.rb。在我的本地计算机上,我可以使用以下命令运行脚本:

ruby -r ./validator.rb -e "Validator.new.validate_something 'One parameter'"

这在本地运行良好,但是当我将其推送到 GitHub 时它失败了。我将脚本保存为 .github/workflows/ruby-scripts,所以我的工作如下所示:

jobs:
  title:
    name: "Title"
    runs-on: ubuntu-latest
    steps:
      - run: ruby -r ./ruby-scripts/validator.rb -e "Validator.new.validate_something '$ github.event.pull_request.title'"

我得到:

Run ruby -r ./ruby-scripts/validator.rb -e "Validator.new.validate 'Create README.md'"
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:29: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:30: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/local/lib/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- ./ruby-scripts/validator.rb (LoadError)
  from /usr/local/lib/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:92:in `require'
##[error]Process completed with exit code 1.

我尝试了所有可能的路径组合,但每次都失败。

运行 pwdls 返回:

 - run: pwd => /home/runner/work/repo-name/repo-name
 - run: ls => shell: /bin/bash -e 0

这样做的正确方法是什么?

【问题讨论】:

- run: ruby -r ruby-scripts/validator.rb -e 也没用? 嗨@AlexGolubenko,感谢您的帮助。它也没有用。我想我测试了所有可能的组合,但什么也没有。 你能得到脚本来打印ls 并找出目录中的内容吗?权限也可能是相关的,Ruby 有时不善于报告错误。 @simonwo 用运行结果编辑了问题,我也运行了一个密码 这是因为你没有检查你的回购。默认情况下,除非您使用 Checkout GitHub Action 签出代码,否则不会签出您的存储库。 【参考方案1】:

正如我在 cmets 中提到的,您的工作流程无法正常工作的原因是您忘记了签出存储库的关键步骤。默认情况下,除非您使用 Checkout GitHub Action 签出存储库,否则工作区是空的。

来自 GitHub Action 的自述文件:

此操作检出您在$GITHUB_WORKSPACE 下的存储库,以便您的工作流可以访问它。

这是一个例子:

- name: Checkout Repo
  uses: actions/checkout@v2

(就是这样,真的)

(注意:您不必为步骤指定名称。)

【讨论】:

【参考方案2】:

对我来说,问题还在于文件的位置。 ruby 脚本在存储库的根目录中运行,而不是在与工作流 YAML 相同的路径中(正如我所期望的那样)。

我正在运行 run: ruby -r ./my-file.rb,其中 my-file.rb 位于工作流 yaml 旁边。

我通过添加这一步实现了这一点:

- run: ruby -e 'p `ls`.split("\n")'

在 ruby​​ 数组中打印ls 的输出。

我修复了使用: run: ruby ./.github/workflows/my_file.rb

【讨论】:

以上是关于如何在 Github 工作流上运行 Ruby 脚本的主要内容,如果未能解决你的问题,请参考以下文章

iOS- 如何在运行时使用Google Cloud Storage在gitHub工作流程中注入gc_keys.json文件?

如何使用 Ruby 编写 shell 脚本?

如何在 webrtc 的画布流上添加音频流

如何使用Ruby进行shell脚本编写?

如何在 Ruby 脚本中运行 Rake 任务?

让 Ruby 服务在 Elastic Beanstalk 上运行