我有许多Gradle版本,可以从命令行,构建版等中运行良好。
但是现在我将它们移植到Jenkins系统。它产生了一些非常奇怪的结果。我几乎是Jenkins的新手,所以这可能有一个简单的答案。到目前为止,我还没有找到它。
我正在使用Gradle Plugin for Jenkins, v.1.24在Jenkins中配置我的版本。但是,Jenkins(至少在配置它时)将其构建结构组织为{jenkins root}/data/jobs/{project_name}/workspace
。从源代码管理中检出代码时,它将存放在该目录中,而不是存储在名为{project_name}
的目录中。
Gradle似乎假设它运行的目录命名项目,当我在Jenkins之外运行时,这个假设是正确的。 Gradle看到的项目名称是从源代码管理中签出的项目的名称。 Project.name是一个gettable但不是gradle项目的可设置属性。因此,在Jenkins案例中,gradle构建的归档名为workspace*
而不是{project_name}*
。它在它发布的存储库中也被命名为workspace
。我必须遗漏一些非常明显的东西,但对于我的生活,我无法弄清楚它是什么。
有没有人在努力解决这个问题?
更新 - 看来问题是设计我的Jenkins实例的人对Gradle一无所知。 Jenkins不需要我上面描述的{jenkins root}/data/jobs/{project_name}/workspace
布局,但显然在某些其他非Gradle上下文中被认为是有用的。所以问题就变成了,在Jenkins配置中设置的项目布局在哪里 - 或者 - 可以以某种方式修改Gradle以采用不同的项目布局/命名策略。
答案 0 :(得分:1)
设置管理Jenkins →配置系统→ 高级... (顶部的那个)→工作区根目录:${JENKINS_HOME}/workspace/${ITEM_FULLNAME}
。
内联帮助:
指定Jenkins在主节点上存储作业工作区的位置。 (它对从属运行的构建没有影响。)该值可以包括以下变量。
${JENKINS_HOME}
- Jenkins主目录。${ITEM_ROOTDIR}
- 为其分配默认工作区的作业的根目录。${ITEM_FULL_NAME}
- '/' - 分隔的工作名称,例如“foo / bar”。更改此值允许您将工作区放在SSD,SCSI甚至ram磁盘上。默认值为
${ITEM_ROOTDIR}/workspace
。
.../jenkins/config.xml
...
<workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULLNAME}</workspaceDir>
...
答案 1 :(得分:0)
Gradle似乎假设它运行的目录命名项目
是的,这是gradle的默认行为,但可以轻松覆盖。如果它只是您关注的输出工件名称,请使用以下命令覆盖jar名称:
jar{
baseName 'actualProjectName'
}