Gruntjs 即使前一个任务失败,也无条件运行grunt任务,但保留失败的退出代码
认为这是一个足够普遍的问题,可以通过自我回答的问题来分享 一般情况 我有一个可能通过或失败的主要任务,我需要无条件地运行一个单独的任务作为拆卸 我还需要grunt使用主任务的通过/失败状态最终退出 具体场景Gruntjs 即使前一个任务失败,也无条件运行grunt任务,但保留失败的退出代码,gruntjs,protractor,Gruntjs,Protractor,认为这是一个足够普遍的问题,可以通过自我回答的问题来分享 一般情况 我有一个可能通过或失败的主要任务,我需要无条件地运行一个单独的任务作为拆卸 我还需要grunt使用主任务的通过/失败状态最终退出 具体场景 在运行量角器之前,我需要做一些设置 运行量角器后,我需要进行一些拆卸 设置和拆卸已经够复杂了,在量角器onPrepare和onCleanup块中执行这些任务我已经不舒服了 我想将这些设置和拆卸建模为在量角器作业之前和之后运行的单独grunt任务 无论量角器通过/失败,我每次都需要运行拆卸
- 在运行量角器之前,我需要做一些设置
- 运行量角器后,我需要进行一些拆卸
- 设置和拆卸已经够复杂了,在量角器onPrepare和onCleanup块中执行这些任务我已经不舒服了
- 我想将这些设置和拆卸建模为在量角器作业之前和之后运行的单独grunt任务
- 无论量角器通过/失败,我每次都需要运行拆卸
- 我需要grunt任务的最终退出代码来表示量角器的通过/失败
grunt.registerTask('E2E', ['setupProtractorEnvironment', 'protractor', 'teardownProtractorEnvironment']);
如果量角器失败,则不运行拆卸
尝试2:添加grunt force任务
我可以使用以下方法解决部分问题:
grunt.registerTask('E2E', ['setupProtractorEnvironment', 'force:protractor', 'teardownProtractorEnvironment']);
现在,无论量角器是否失败,TeardownDrugatorEnvironment将始终运行,但退出代码现在始终为0
尝试3:使用grunt this.requires()
现在,当量角器失败时,拆卸仍会运行,但退出代码为3(任务错误)
如果我想在CI中使用这个grunt任务,并在量角器E2E失败时失败构建,那么最后的错误代码很重要
嗯 如问题尝试3所示,您可以添加一个新任务,该任务使用grunt的
this.requires()
来测试以前任务的状态
此。此处记录了所需的
:。基本上,除非所有指定的“必需”任务都已运行并通过,否则它将无法完成当前任务。感谢您的这篇文章,即使在将近4年后,它也非常有用。我想补充的一件事是确保在这个.requires()中使用正确的任务名称。当我应该使用“jshint:files”时,我正在使用“jshint”
grunt.registerTask('exitWithProtractorStatus', function() {
this.requires(['protractor']);
return true;
})
grunt.registerTask('E2E', ['setupProtractorEnvironment', 'force:protractor', 'teardownProtractorEnvironment', 'exitWithProtractorStatus']);