有什么方法可以更改 Jenkins Maven 构建的工作目录?
用例
有一个 Maven 构建仅在当前工作目录是其中包含 pom.xml 的目录时才有效,因此我希望 Maven 构建在该目录中执行。
pom.xml 所在的目录位于 git 项目的子目录中。
有什么方法可以更改 Jenkins Maven 构建的工作目录?
有一个 Maven 构建仅在当前工作目录是其中包含 pom.xml 的目录时才有效,因此我希望 Maven 构建在该目录中执行。
pom.xml 所在的目录位于 git 项目的子目录中。
创建一个目标来签出父级。
创建一个目标来构建你的路径
它对我有用。
不确定何时添加,但对于我面前的 Jenkins(页面底部的 Jenkins 版本为 1.627),现在可以选择定义根 pom.xml 的位置(帮助消息说:
如果您的工作区在第一个模块的根目录以外的某个地方有顶级 pom.xml,请在此处指定路径(相对于模块根目录),例如 parent/pom.xml。如果留空,默认为 pom.xml
)。我遇到了同样的问题,但后来意识到答案正盯着我看(请注意,我不必像 Hua2308 建议的那样点击高级,可能是因为他们改变了 UI)
作为参考,这对我有用。在“调用顶级 Maven 目标”构建步骤中,有一个“高级...”按钮。如果单击此按钮,则可以指定 POM.xml 文件的相对路径。这应该确保您只在子目录中构建所需的项目。
您可以使用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
我来到这里是因为我遇到了同样的情况,我遇到的 Hudson / Jenkins 版本也有同样的问题,它不允许在调用 maven 之前设置工作目录。
解决方法是配置一个具有所需工作目录的参数,创建一个新命令“mvn”来创建更改目录,然后使用所有参数调用 maven 的原始命令“mvn”。
要遵循的步骤:
在项目中,应该注意项目需要参数化,在我的例子中,创建参数 WORKING_DIRECTORY,值为 $ {WORKSPACE}/maven,作为“maven”将成为工作目录的子文件夹。 在此处输入图像描述
创建一个“自定义”版本的 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
在 hudson/Jenking 中添加新的 maven_custom:
Hudson 管理员 --> 系统配置 --> Maven --> 添加 maven
在项目中使用自定义的maven
通过这些更改,maven 在不同的工作目录中运行
转到您的 maven 项目的配置,然后:
构建>单击“高级”按钮>选中“使用自定义工作区”>设置目录
(我正在使用 Jenkins 版本 1.508)
当子目录是父根的直接子目录时,您可以使用 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
我们正在使用的 Jenkins 是德语的,所以我试图猜测这些选项是如何翻译的。
转到项目的配置,然后转到增强的项目配置(这是第二部分)并展开它。最后一点应该类似于Change folder of workspace
. 我认为这可能是您正在寻找的。
否则,您始终可以转到Build
选项并更改 pom.xml 的路径
解决方案:
cd subfolder; mvn -f ../pom.xml task
Maven 没有提供相反的选项,这意味着这个用例的明智方式,可能是因为 Maven 讨厌你。