如何使用Maven加密,需要将setting-security.xml文件保存在哪里?

13

我们正在使用TeamCity 9.1和默认捆绑的Maven版本3.0.5。

在构建过程中,我们使用Maven与Nexus服务器交互。

我们想要按照这篇文章所述加密Maven settings.xml文件中的密码: http://maven.apache.org/guides/mini/guide-encryption.html

这需要一个settings-security.xml文件,应该与Maven settings.xml文件在同一个文件夹中。 setting.xml文件保存在TeamCity中,并作为自定义的“用户设置选择”文件部署到服务器上 - 因此我不知道它在代理中被部署到哪里。

我们应该将settings-security.xml文件保存在哪里? 是否需要手动将其部署到所有代理中?如果需要,应该放在哪个文件夹中? (我们有Windows和Linux代理)

我不确定在TeamCity中使用加密的Maven密码的最佳实践是什么,所以我很感激任何帮助。

谢谢


你可以将 settings-security.xml 存储在与 settings.xml 相同的文件夹中,通常是 ${HOME}/.m2/...在 TeamCity 中检查是否有配置文件提供程序进行配置... - khmarbaise
如果您使用mvn的-s选项来指定构建特定的setting.xml,那么如何指定相应的setting-security.xml文件。每个文件都是构建特定的唯一文件。 - Lee Meador
1个回答

5
"我不知道代理服务器部署在哪里",你可以在构建日志输出中找到这个信息。只需搜索"settings"即可。使用User settings文件时,它们通常存储在构建代理的temp目录中。

当你尝试使用加密指南 (按照加密指南) 加密密码时:

mvn --encrypt-password my_password

它期望找到:settings-security.xml;如果没有找到,那么你将会得到一个错误。
[ERROR] Error executing Maven.
[ERROR] java.io.FileNotFoundException: /home/krbuild/.m2/settings-security.xml (No such file or directory)
[ERROR] Caused by: /home/krbuild/.m2/settings-security.xml (No such file or directory)

因此,安全文件需要存储在您打算运行构建配置的每个代理上(不要存储在版本控制系统中)。目前仍没有专门支持此功能的方法;请参见TW-39595

解决方法是设置代理属性,例如:

path.to.maven.security=/path/to/file/security-settings.xml

然后在您的Maven构建步骤中引用它:

-Dsettings.security=%path.to.maven.security%

2
这有助于我们将settings.xml和settings-security.xml文件存储到不同的位置 - mvn -s /path/to/settings.xml -Dsettings.security=/path/to/settings-security.xml clean deploy - slm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接