Gradle 项目未在 Jenkins 下正确命名档案
Gradle Project Not Naming Archives Properly Under Jenkins
我有许多 Gradle 构建在命令行、buildship 等方面运行良好
但是现在我正在将它们移植到 Jenkins 系统中。它产生了一些非常奇怪的结果。我几乎是詹金斯的新手,所以这可能有一个简单的答案。目前还没找到。
我正在使用 Gradle Plugin for Jenkins, v.1.24 在 Jenkins 中配置我的构建。但是,Jenkins(至少在我配置时)将其构建结构组织为 {jenkins root}/data/jobs/{project_name}/workspace
。当代码从源代码管理中签出时,它存放在该目录中,而不是在名为 {project_name}
.
的目录中
Gradle 似乎假设它所在的目录 运行 命名了项目,当我 运行 在 Jenkins 之外时,这个假设是正确的。 Gradle 看到的项目名称是从源代码管理中检出的项目名称。 Project.name 是 gradle 项目的可获取但不可设置的 属性。因此在 Jenkins 案例中,gradle 构建的档案被命名为 workspace*
而不是 {project_name}*
。它在它发布到的存储库中也被命名为 workspace
。我一定遗漏了一些非常明显的东西,但我终究无法弄清楚它是什么。
有人解决过这个问题吗?
更新 - 看来问题是设计我的 Jenkins 实例的人对 Gradle 一无所知。我上面描述的 {jenkins root}/data/jobs/{project_name}/workspace
布局不是 Jenkins 所必需的,但出于某种原因显然在其他一些非 Gradle 上下文中被认为是有用的。所以问题就变成了,在 Jenkins 配置中设置的项目布局在哪里 - 或者 - 可以以某种方式修改 Gradle 以采用不同的项目 layout/naming 策略。
Gradle seems to assume that the directory in which it is running names the project
是的,这是 gradle 的默认行为,但可以轻松覆盖。如果它只是您关心的输出工件名称,请使用以下内容覆盖 jar 名称:
jar{
baseName 'actualProjectName'
}
设置管理Jenkins→配置系统→高级.. .(右上角那个)→ 工作区根目录:${JENKINS_HOME}/workspace/${ITEM_FULLNAME}
.
内联帮助:
Specify where Jenkins would store job workspaces on the master node. (It has no effect on builds run on slaves.) This value can include the following variables.
${JENKINS_HOME}
— Jenkins home directory.
${ITEM_ROOTDIR}
— Root directory of a job for which the default workspace is allocated.
${ITEM_FULL_NAME}
— '/'-separated job name, like "foo/bar".
Changing this value allows you to put workspaces on SSD, SCSI, or even ram disks. Default value is ${ITEM_ROOTDIR}/workspace
.
.../jenkins/config.xml
...
<workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULLNAME}</workspaceDir>
...
我有许多 Gradle 构建在命令行、buildship 等方面运行良好
但是现在我正在将它们移植到 Jenkins 系统中。它产生了一些非常奇怪的结果。我几乎是詹金斯的新手,所以这可能有一个简单的答案。目前还没找到。
我正在使用 Gradle Plugin for Jenkins, v.1.24 在 Jenkins 中配置我的构建。但是,Jenkins(至少在我配置时)将其构建结构组织为 {jenkins root}/data/jobs/{project_name}/workspace
。当代码从源代码管理中签出时,它存放在该目录中,而不是在名为 {project_name}
.
Gradle 似乎假设它所在的目录 运行 命名了项目,当我 运行 在 Jenkins 之外时,这个假设是正确的。 Gradle 看到的项目名称是从源代码管理中检出的项目名称。 Project.name 是 gradle 项目的可获取但不可设置的 属性。因此在 Jenkins 案例中,gradle 构建的档案被命名为 workspace*
而不是 {project_name}*
。它在它发布到的存储库中也被命名为 workspace
。我一定遗漏了一些非常明显的东西,但我终究无法弄清楚它是什么。
有人解决过这个问题吗?
更新 - 看来问题是设计我的 Jenkins 实例的人对 Gradle 一无所知。我上面描述的 {jenkins root}/data/jobs/{project_name}/workspace
布局不是 Jenkins 所必需的,但出于某种原因显然在其他一些非 Gradle 上下文中被认为是有用的。所以问题就变成了,在 Jenkins 配置中设置的项目布局在哪里 - 或者 - 可以以某种方式修改 Gradle 以采用不同的项目 layout/naming 策略。
Gradle seems to assume that the directory in which it is running names the project
是的,这是 gradle 的默认行为,但可以轻松覆盖。如果它只是您关心的输出工件名称,请使用以下内容覆盖 jar 名称:
jar{
baseName 'actualProjectName'
}
设置管理Jenkins→配置系统→高级.. .(右上角那个)→ 工作区根目录:${JENKINS_HOME}/workspace/${ITEM_FULLNAME}
.
内联帮助:
Specify where Jenkins would store job workspaces on the master node. (It has no effect on builds run on slaves.) This value can include the following variables.
${JENKINS_HOME}
— Jenkins home directory.${ITEM_ROOTDIR}
— Root directory of a job for which the default workspace is allocated.${ITEM_FULL_NAME}
— '/'-separated job name, like "foo/bar".Changing this value allows you to put workspaces on SSD, SCSI, or even ram disks. Default value is
${ITEM_ROOTDIR}/workspace
.
.../jenkins/config.xml
...
<workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULLNAME}</workspaceDir>
...