我试图仅在设置环境变量时尝试运行gradle任务。我在https://discuss.gradle.org/t/how-do-i-run-a-task-only-if-an-environment-variable-is-defined/12438中找到了这个onlyIf
函数
所以我写了这个
task onlyRunIfItIsCI() {
println System.env['CI']
onlyIf {
System.env['CI'] == "true"
}
}
但是,无论我是否设置CI
,它仍然可以运行。我有想念吗? 最佳答案
显然,在Gradle中,它有2个执行阶段,第一个是配置阶段,第二个是执行阶段。
无论onlyIf
如何,配置都将运行。为了确保onlyIf
生效,我们应该将通用执行包装在gradle特定范围内,例如doFirst
或doLast
task onlyRunIfItIsCI() {
doFirst {
println System.env['CI']
}
doLast {
println System.env['CI']
}
onlyIf {
System.env['CI'] == "true"
}
}
clean.dependsOn onlyRunIfItIsCI
请注意,为了实际执行,我们需要使用dependsOn
。另一个示例是
from
和into
是gradle特定的命令,在配置过程中将不会运行该命令。task copyPreCommitToGitHook(type: Copy) {
from new File(rootProject.rootDir, 'storage/pre-commit')
into { new File(rootProject.rootDir, '.git/hooks') }
onlyIf {
System.env['CI'] == null
}
}
tasks.getByPath(':app:preBuild').dependsOn copyPreCommitToGitHook