Jenkins 渐变-不同的任务使用不同的参数
我有两个任务,任务1应该压缩png文件,任务2不应该压缩png文件,所以我想添加一个参数来控制它Jenkins 渐变-不同的任务使用不同的参数,jenkins,gradle,Jenkins,Gradle,我有两个任务,任务1应该压缩png文件,任务2不应该压缩png文件,所以我想添加一个参数来控制它 project.ext.set("compressPngs", 1); task taskCompressPngs(type:Exec){ commandLine "myshell.sh" args compressPngs } task task_1(dependsOn:'taskCompressPngs'){} task task_2(dependsOn:'taskCompr
project.ext.set("compressPngs", 1);
task taskCompressPngs(type:Exec){
commandLine "myshell.sh"
args compressPngs
}
task task_1(dependsOn:'taskCompressPngs'){}
task task_2(dependsOn:'taskCompressPngs'){}
gradle.taskGraph.whenReady { taskGraph ->
if (taskGraph.hasTask(task_1))
{
compressPngs=1
}
if (taskGraph.hasTask(task_2))
{
compressPngs=0
}
}
但是,当我运行task_1或task_2时,在task'taskCompressPngs'中,“compressPngs”传递给我的脚本'myshell.sh'总是1,为什么?如何解决此问题?在更改配置值之前配置taskCompressPngs。条件配置很少是一个好的解决方案。更好的方法是声明两个
Exec
任务。正如其他人所提到的,可能最好使用并使用两个单独的任务,但如果您真的认为不能,这里有几个其他选项应该可以使用
1) 检查梯度起动参数
根据命令行上传递给gradle的任务配置可重用任务
task taskCompressPngs(type: Exec) {
def compressPngs = 1
if(gradle.startParameter.taskNames.toString().toLowerCase().contains("task_2")) compressPngs = 0
commandLine "myshell.sh $compressPngs".tokenize()
}
这为您提供了一个在配置时可用的变量(gradle.startParameter.taskNames
)
这里,只有在运行gradle时在命令行上指定了任务2时,我们才将compressPngs更改为0
也就是说,gradlew task_1
将运行myshell.sh 1
,但gradlew task_2
(甚至gradlew task_1 task_2
)将运行myshell.sh 0
此逻辑还可以应用于taskCompressPngs任务之外的项目属性,例如,如果您也想更改其他任务
同样,只有在用于运行gradle的命令中指定了“task_2”时,这才有效
2) 使用DefaultExecAction而不是Exec任务
您可以编写自定义任务并检查其中的任务图,而不是使用类型为Exec
的任务
task taskCompressPngs << {
def compressPngs = 1
if(gradle.taskGraph.hasTask(two)) compressPngs = 2
org.gradle.process.internal.DefaultExecAction e = new org.gradle.process.internal.DefaultExecAction(getServices().get(org.gradle.api.internal.file.FileResolver.class))
e.commandLine("myshell.sh $compressPngs".tokenize())
e.execute()
}
task taskCompressPngs为什么task_2在不应该压缩时依赖于taskCompressPngs?整个任务图是这样的:task_2(task_1)->task'osbuild'->符号->包->taskCompressPngs,“->”的意思取决于。我只是想让任务图变得清晰。也许在doLast{}中移动“args compressPngs”就可以了。这样,在配置之后就可以进行设置。但正如聪明的彼得·尼德维泽所说;条件配置很少是一个好的解决方案。我遵从Peter N的建议,但如果您坚持尝试,下面的链接可能会很有用-我已经尝试过,但不适合我。