Skip to content

构建环境隔离

通过 Profile 区分环境

kotlin
// build.gradle.kts
val profile = project.findProperty("profile") as String? ?: "dev"

sourceSets {
    main {
        resources {
            srcDir("src/main/resources")
            srcDir("src/main/resources-$profile")
        }
    }
}
bash
./gradlew build -Pprofile=prod

通过环境变量区分

kotlin
val isCI = System.getenv("CI") != null
val buildEnv = System.getenv("BUILD_ENV") ?: "local"

tasks.named<Test>("test") {
    if (isCI) {
        maxParallelForks = 4
        // CI 环境不显示测试输出(减少日志)
        testLogging { showStandardStreams = false }
    } else {
        maxParallelForks = 1
        testLogging { showStandardStreams = true }
    }
}

隔离敏感配置

properties
# ~/.gradle/gradle.properties(用户级,不提交 Git)
prod.db.password=secret-password
signing.key=gpg-key-content
maven.publish.password=nexus-password
kotlin
// build.gradle.kts
val prodDbPassword = providers.gradleProperty("prod.db.password")

tasks.register("deployProd") {
    doLast {
        require(prodDbPassword.isPresent) { "prod.db.password 未配置!" }
        // 使用密码部署
    }
}

Docker 化构建

dockerfile
# Dockerfile.build(用于 CI 构建环境)
FROM eclipse-temurin:17-jdk AS builder

WORKDIR /workspace
COPY gradlew .
COPY gradle gradle
COPY build.gradle.kts settings.gradle.kts gradle.properties ./
COPY src src

# 构建(利用 Docker 层缓存)
RUN ./gradlew build --no-daemon -x test

FROM eclipse-temurin:17-jre
WORKDIR /app
COPY --from=builder /workspace/build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

下一步

至此你已完成所有核心章节的学习!