Ruby system() 调用的 Rake 任务返回值

问题描述 投票:0回答:2

我有一个 Rake 任务,如下所示。我想要做的就是运行系统命令,并返回其错误值。在返回之前,我想显示一条消息,内容为“[OK]”或“[FAILED]”。

使用此代码,Rake 每次都会返回成功。

如何让 Rake 任务返回正确的错误值?

task :build do
  status = system BUILD_SHELL_COMMAND
  puts status ? "[OK]" : "[FAILED]"
  status
end
ruby rake rake-task rake-test
2个回答
3
投票

似乎没有办法指定 rake 任务的“返回值”。如果 system() 方法失败,任务就会失败。

执行此操作的标准方法是使用 Rake 的 sh 实用方法:

task :build do
  sh BUILD_SHELL_COMMAND
end

但是,要显示错误/成功消息,对于所讨论的情况,以下操作将不起作用:

task :build do
  sh BUILD_SHELL_COMMAND or fail “[FAILED]”
  puts “[OK]"
end

因为一旦 shell 命令失败,它就不会显示失败消息(实际上这将是一条更长的重要消息:),这正是我们想要的。

这有效:

task :build do
  system BUILD_SHELL_COMMAND or fail “[FAILED]”
  puts “[OK]"
end

0
投票

可以返回一个可以在 shell 或脚本中使用的值。您必须使用 exit 命令以及您想要返回的值,如下所示:

task :build do
  # do something and save a value which should be true or false
  # as example for code below
  done = ... 

  # return a value you can use in shell scripts or CI/CD
  if done
    exit 0
  else
    exit 1
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.