【问题标题】:Make Gradle build halt/fail on failing Exec task based on output根据输出使 Gradle 在 Exec 任务失败时构建暂停/失败
【发布时间】:2016-02-09 18:00:31
【问题描述】:

我们在 Gradle 构建定义中使用 Exec 任务来运行 Webpack。 此任务有时会失败,但构建任务完成,我们的 Jenkins 服务器认为一切顺利,并发布了包含损坏客户端代码的 war 文件。

在 Exec 任务的输出中,您可以看到 Webpack 出现错误并停止。

我现在想知道是否可以让我的 Exec 任务消耗输出并在退出之前对其做出反应,以便我可以使任务失败。

我玩过 setStandardOutput() 和 standardOutput,但我似乎无法让它工作。

下面是我的任务定义

task webpack(type: Exec) {
    def mainCommand = Os.isFamily(Os.FAMILY_WINDOWS) ? 'webpack.cmd' : 'webpack'

    if (project.environment == 'prod')
        commandLine mainCommand, '-p'
    else
        commandLine mainCommand
}

【问题讨论】:

  • 判断 exec 任务是否通过的标准方法是退出值。如果 exec 命令返回非零退出值,则 gradle 构建失败。您的任务在失败时会返回什么?
  • 我的问题是我无法判断它是否失败
  • 看看这个 sn-p 是否有帮助:gist.github.com/lifuzu/10671707

标签: jenkins gradle webpack


【解决方案1】:

这对我来说似乎很好用。它解析输出,如果输出包含以“error”开头的行,则任务失败。

task webpack(type: Exec) {
    def mainCommand = Os.isFamily(Os.FAMILY_WINDOWS) ? 'webpack.cmd' : 'webpack'
        standardOutput = new ByteArrayOutputStream()
        if (project.environment == 'prod')
            commandLine mainCommand, '-p'
        else
            commandLine mainCommand

    doLast {
        String output = standardOutput.toString()

        if(output.readLines().any{line->line.trim().toLowerCase().startsWith("error")}) {
            throw new GradleException("Error in WebPack: \n${output}")
        } else {
            println "Great success! Output is: ${output}"
        }
    }

}

【讨论】:

    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多