【问题标题】:Why does Jenkins change my gradlew, and how to prevent that?为什么詹金斯会改变我的 gradlew,以及如何防止这种情况发生?
【发布时间】:2013-03-28 16:05:50
【问题描述】:

我正在尝试使用gradle release-plugin“发布”我的项目

该插件首先检查我的工作副本是否干净,以便仅发布正确版本的内容。

这在我的本地机器上运行良好。但是当我在 Jenkins 的工作中尝试同样的事情时,构建失败并抱怨工作场所中的各种东西发生了变化。我决定很多东西只是jenkins内部使用的,添加到gitignore

caches/
native/
wrapper/

但它也认为 gradlew 已更改:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':checkCommitNeeded'.
> You have uncommitted files:
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   M gradlew
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

为什么 Jenkins 会更改该文件,我该如何防止呢?

我认为 Jenkins 工作的以下设置可能是相关的:

  • Checkout/merge to local branch (optional) 设置为 master。如果没有此设置,发布插件会抱怨不在分支上

  • Clean after checkout 当前已选中,但选中/取消选中它并没有什么不同

  • Make gradlew executable 已被选中,至少在我看来是一个可能的原因,但取消选中它会导致构建失败,因为 gradlew 不可执行

【问题讨论】:

  • 除非你运行 Wrapper 类型的 gradle 任务,否则我认为不会更改 gradlew。
  • 我有点同意。但我不知道是什么导致包装器运行。它当然不在我明确调用的任务中,它们也没有包装器作为依赖项(至少那将是一个非常奇怪的依赖项)
  • 我使用 jenkins gradle 插件为此创建了一个错误:issues.jenkins-ci.org/browse/JENKINS-17505

标签: jenkins gradle gradlew gradle-release-plugin


【解决方案1】:

相当老的问题,但是为了记录到这里来的任何人,詹金斯在这里没有错,你应该提交 gradlew 并设置可执行位:

# git update-index --chmod=+x gradlew
# git commit

那么您将不再需要 jenkins 设置来将其设置为可执行,这是导致您的问题的解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多