32

有什么方法可以更改 Jenkins Maven 构建的工作目录?

用例

有一个 Maven 构建仅在当前工作目录是其中包含 pom.xml 的目录时才有效,因此我希望 Maven 构建在该目录中执行。

pom.xml 所在的目录位于 git 项目的子目录中。

4

9 回答 9

13

创建一个目标来签出父级。

  • 签出构建目标的父目录
  • 设置构建 -> 目标 = 清洁
  • 运行构建并确定目标工作区目录(控制台输出的第二行,在我的示例 /var/lib/jenkins/workspace/my_project 中)

创建一个目标来构建你的路径

  • 不要选中“在构建开始之前删除工作区”
  • 在 Build -> Advanced - 检查“更改工作区文件夹”并粘贴您的 /yourtargetdirectory

它对我有用。

于 2013-09-12T09:51:54.937 回答
11

不确定何时添加,但对于我面前的 Jenkins(页面底部的 Jenkins 版本为 1.627),现在可以选择定义根 pom.xml 的位置(帮助消息说:

如果您的工作区在第一个模块的根目录以外的某个地方有顶级 pom.xml,请在此处指定路径(相对于模块根目录),例如 parent/pom.xml。如果留空,默认为 pom.xml

)。我遇到了同样的问题,但后来意识到答案正盯着我看(请注意,我不必像 Hua2308 建议的那样点击高级,可能是因为他们改变了 UI)

于 2015-09-02T02:13:33.357 回答
5

作为参考,这对我有用。在“调用顶级 Maven 目标”构建步骤中,有一个“高级...”按钮。如果单击此按钮,则可以指定 POM.xml 文件的相对路径。这应该确保您只在子目录中构建所需的项目。

于 2015-08-14T22:17:36.247 回答
2

您可以使用Maven 的-f选项

-f,--file <arg>    Force the use of an alternate POM file (or directory with pom.xml).

例如,如果您的项目具有以下结构:

README.md
sources
|----pom.xml
|----services
|    |----pom.xml
|    +----src
|----webservices
|    |----pom.xml
|    +----src
+----....
useful
docs

然后你可以Goals使用Invoke top-level Maven targets

-f sources/pom.xml clean install
于 2013-10-09T09:25:04.863 回答
2

我来到这里是因为我遇到了同样的情况,我遇到的 Hudson / Jenkins 版本也有同样的问题,它不允许在调用 maven 之前设置工作目录。

解决方法是配置一个具有所需工作目录的参数,创建一个新命令“mvn”来创建更改目录,然后使用所有参数调用 maven 的原始命令“mvn”。

要遵循的步骤:

  1. 在项目中,应该注意项目需要参数化,在我的例子中,创建参数 WORKING_DIRECTORY,值为 $ {WORKSPACE}/maven,作为“maven”将成为工作目录的子文件夹。 在此处输入图像描述

  2. 创建一个“自定义”版本的 maven 来修改“mvn”命令:

cp -ip /opt/apache-maven-3.5.4 /opt/maven_custom

mv /opt/maven_custom/mvn /opt/maven_custom/mvn_original

vi /opt/maven_custom/mvn:

-- 内容新的 mvn 命令 --

cd $WORKING_DIRECTORY

/opt/maven_custom/bin/mvn_original "$@"

-- 结束内容新的 mvn 命令 --

chmod ugo+x /opt/maven_custom/mvn

  1. 在 hudson/Jenking 中添加新的 maven_custom:

    Hudson 管理员 --> 系统配置 --> Maven --> 添加 maven

  2. 在项目中使用自定义的maven

通过这些更改,maven 在不同的工作目录中运行

于 2019-11-14T16:29:37.587 回答
1

转到您的 maven 项目的配置,然后:

构建>单击“高级”按钮>选中“使用自定义工作区”>设置目录

(我正在使用 Jenkins 版本 1.508)

于 2013-08-16T21:13:01.497 回答
1

当子目录是父根的直接子目录时,您可以使用 mvn --projects ,因为它会更改为子目录。这是一个证明(见最后一行):

U:\git\ics-VCCUSTOM-422>mvn --projects icsIntegrationTest clean verify
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.afklm.vccustom:icsIntegrationTest >----------------
[INFO] Building icsIntegrationTest 13.3.4-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ icsIntegrationTest ---
[INFO] Deleting U:\git\ics-VCCUSTOM-422\icsIntegrationTest\target
[INFO]
[INFO] --- buildnumber-maven-plugin:1.3:create (default) @ icsIntegrationTest ---
[INFO] ShortRevision tag detected. The value is '7'.
[INFO] Executing: cmd.exe /X /C "git rev-parse --verify --short=7 HEAD"
[INFO] Working directory: U:\git\ics-VCCUSTOM-422\icsIntegrationTest
于 2018-11-21T12:59:02.950 回答
0

我们正在使用的 Jenkins 是德语的,所以我试图猜测这些选项是如何翻译的。

转到项目的配置,然后转到增强的项目配置(这是第二部分)并展开它。最后一点应该类似于Change folder of workspace. 我认为这可能是您正在寻找的。

否则,您始终可以转到Build选项并更改 pom.xml 的路径

于 2013-06-26T05:52:28.487 回答
0

解决方案:

cd subfolder; mvn -f ../pom.xml task

Maven 没有提供相反的选项,这意味着这个用例的明智方式,可能是因为 Maven 讨厌你。

于 2016-03-24T12:24:25.367 回答