我试图仅在设置环境变量时尝试运行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特定范围内,例如doFirstdoLast

task onlyRunIfItIsCI() {
    doFirst {
        println System.env['CI']
    }
    doLast {
        println System.env['CI']
    }
    onlyIf {
        System.env['CI'] == "true"
    }
}

clean.dependsOn onlyRunIfItIsCI
请注意,为了实际执行,我们需要使用dependsOn
另一个示例是frominto是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

07-28 03:48
查看更多