我正在尝试设置一个调用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脚本之前添加了一个导出路径语句。但是错误仍然存在。
我不确定我在哪里做错了,如果有其他方法可以做到这一点,我会非常乐意尝试一下。
答案 0 :(得分:0)
由于我没有收到任何回复,我决定玩游戏并找到一个插件来使用它:
我在关于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)
可能需要显式指定可执行文件,例如cmd
或sh
。
这是一种更通用的方式,可以说明可以在其上执行的系统:
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'
}
}