【问题标题】:Gradle "gradle-wrapper.properties" dynamic/configurable distributionUrlGradle“gradle-wrapper.properties”动态/可配置的distributionUrl
【发布时间】:2019-06-14 11:18:45
【问题描述】:

我有一个 gradle 项目,我们使用 gradlew.sh 来构建它。

两个不同的团队使用同一个 GIT 项目/分支。

两个团队有两个不同的 jenkins 实例,其中包含构建项目的自动化。

现在假设 jenkins 自动化的两个团队都克隆和签出相同的项目和分支,我希望为两个团队的 distributionUrl 使用两个不同的值

这是因为第一队无法访问第二队的distributionUrl,反之亦然

有没有办法让这个值动态化,例如从命令行传递它,使用环境变量或其他东西?

我尝试了所有方法,但它不起作用,gradle 总是采用 gradle-wrapper.properties distributionUrl 中指定的值,而没有给我任何覆盖它的更改。

如果我的问题不清楚,或者您想了解更多信息,请随时告诉我,我会更新我的问题。

【问题讨论】:

    标签: jenkins gradle


    【解决方案1】:

    这是在命令行中传递分发 url 的方式:

    ./gradlew wrapper 
      --gradle-distribution-url=https://[your-artifactory]/gradle-distribution/gradle-4.10.3-bin.zip
      --gradle-distribution-sha256-sum=8626cbf206b4e201ade7b87779090690447054bc93f052954c78480fa6ed186e
    

    来源:https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:adding_wrapper

    【讨论】:

    • 这是控制用于生成包装器(即 gradlew 包装器)的分布的设置,而不是运行包装器时使用的分布(例如 gradlew build)
    • @AdrianBaker 1) 此命令更新您的gradle/wrapper/gradle-wrapper.properties 文件中的distributionUrl。这就是./gradlew ... commands 期间使用的分布。 2) 您正在使用./gradlew wrapper,因此,步骤 1) 中的分发将适用。尝试运行两次./gradlew wrapper --gradle-distribution-url=https://alex 看看会发生什么。如果您想控制发行版以生成包装器,我建议使用集中安装的 gradle 发行版,例如 /usr/local/bin/gradle
    • 对于一个空的 .gradle 目录,./gradlew wrapper --gradle-distribution-url=https://alex 做的第一件事就是下载gradle-wrapper.properties 中的 dist。这是有道理的,--gradle-distribution-url 是包装器任务的参数,要解释和运行包装器任务,首先需要从某个地方下载 gradle。
    【解决方案2】:

    目前无法将分发 URL 动态传递给 gradle 包装器。所以我建议在 Jenkins 中这样做:

    将 shell 脚本步骤放在 Jenkins 中实际的 Gradle 构建步骤之前,并在该 shell 脚本步骤中重写 gradle-wrapper.properties

    【讨论】:

    • 这正是我的想法,实际上有一个 Gradle 命令可以让你做到这一点,而无需 bash grep 或任何正则表达式。不幸的是,这种方法对我来说并不完全有效,因为我在自动化中得到了一些逻辑,需要本地 repo 与远程对齐,所以如果我有本地修改,该过程将失败......
    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2014-03-12
    相关资源
    最近更新 更多