【问题标题】:Unconditionally run a grunt task even if previous task failed, but maintain the failing exit code即使先前的任务失败,也无条件地运行 grunt 任务,但保持失败的退出代码
【发布时间】:2016-06-17 06:59:36
【问题描述】:

认为这是一个足够普遍的问题,可以通过自我回答的问题来分享。

一般场景

我有一个可能通过或失败的主要任务,我需要无条件地运行一个单独的任务作为拆卸。

我还需要 grunt 最终使用主任务的通过/失败状态退出。

具体场景

  • 我需要在运行量角器之前进行一些设置。
  • 运行量角器后我需要进行一些拆解。
  • 设置和拆卸非常复杂,我不再愿意在量角器的 onPrepare 和 onCleanup 块中执行这些任务。
  • 我想将这些设置和拆卸建模为在量角器作业之前和之后运行的单独的 grunt 任务。
  • 无论量角器的通过/失败,我都需要每次都运行拆解
  • 我需要 grunt 任务的最终退出代码来表示量角器的通过/失败。

假设我有一个名为 E2E 的任务(使用量角器进行 E2E 测试):

尝试1:

grunt.registerTask('E2E', ['setupProtractorEnvironment', 'protractor', 'teardownProtractorEnvironment']);

如果量角器失败,则不运行拆卸。

尝试2:添加 grunt-force-task

我可以使用grunt-force-task 解决部分问题,如下所示:

grunt.registerTask('E2E', ['setupProtractorEnvironment', 'force:protractor', 'teardownProtractorEnvironment']);

现在 teardownProtractorEnvironment 将始终运行,无论量角器是否失败,但退出代码现在始终为 0

尝试3:使用 grunt this.requires()

grunt.registerTask('exitWithProtractorStatus', function() {
  this.requires(['protractor']);
  return true;
})

grunt.registerTask('E2E', ['setupProtractorEnvironment', 'force:protractor', 'teardownProtractorEnvironment', 'exitWithProtractorStatus']);

现在量角器失败时,拆机仍在运行,但退出代码为 3(任务错误)

如果我想在 CI 中使用这个 grunt 任务并在量角器 E2E 失败时失败构建,最终的错误代码很重要。

HTH!

【问题讨论】:

    标签: gruntjs protractor


    【解决方案1】:

    如问题尝试3所示,您可以添加一个新任务,使用grunt的this.requires()来测试之前任务的状态。

    this.requires 记录在这里:http://gruntjs.com/api/inside-tasks#this.requires。基本上它会失败当前任务,除非所有指定的“必需”任务都已经运行并通过。

    【讨论】:

    • 感谢您的这篇文章,即使在将近 4 年后,它仍然非常有帮助。我想补充的一件事是确保您在 this.requires() 中使用正确的任务名称。当我应该使用“jshint:files”时,我使用的是“jshint”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2019-11-05
    • 2020-01-05
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多