在Jenkins中从Gradle脚本调用Git时出错

时间:2015-12-01 01:30:07

标签: git jenkins gradle

我正在尝试设置一个调用gradle任务的Jenkins项目。

如果没有jenkins(即从命令行),项目编译正常。

然而,当我从jenkins运行它时,它停在我构建的特定函数以从Git获取总提交编号:

def getBuildNumber = { ->
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'rev-list', 'HEAD', '--count'
        standardOutput = stdout
    } 
    return stdout.toString().trim()
}

它产生了这个错误:

12:19:44.920 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE: Build failed with an exception.
12:19:44.924 [ERROR] [org.gradle.BuildExceptionReporter] 
12:19:44.927 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
12:19:44.928 [ERROR] [org.gradle.BuildExceptionReporter] A problem occurred evaluating root project 'MyProject Bitbucket'.
12:19:44.931 [ERROR] [org.gradle.BuildExceptionReporter] > A problem occurred starting process 'command 'git''

我认为这是由jenkins无法识别命令引起的,所以我在执行gradle脚本之前添加了一个导出路径语句。但是错误仍然存​​在。

我不确定我在哪里做错了,如果有其他方法可以做到这一点,我会非常乐意尝试一下。

2 个答案:

答案 0 :(得分:0)

由于我没有收到任何回复,我决定玩游戏并找到一个插件来使用它:enter image description here

我在关于Gradle Git Plugin的问题中发现了一个问题,并决定在我的构建文件中实现相同的功能。

我将插件添加到我的gradle构建文件中:

plugins {
  id 'org.ajoberstar.grgit' version '1.3.2'
}

我将getBuildNumber转换为:

def getBuildNumber = { ->
  return grgit.log(includes:['HEAD']).size()
}

之后,它在非jenkins和jenkins环境中运行良好。

我仍在为这个问题寻找非插件答案。

答案 1 :(得分:0)

可能需要显式指定可执行文件,例如cmdsh

请参阅Gradle tasks Exec

这是一种更通用的方式,可以说明可以在其上执行的系统:

task myExecTypeTask(type: Exec) {

    workingDir "$projectDir/mySubDir"

    if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {

        commandLine 'cmd', '/c', 'git', 'rev-list', 'HEAD', '--count'

    } else {

        commandLine 'sh', '-c', 'git', 'rev-list', 'HEAD', '--count'

    }
}