我想在发布期间使用物理用户的凭据。我使用以下堆栈:我自己的maven插件包装maven-release-plugin,jenkins,nexus,git。在Jenkins上,我使用参数和密码掩码插件为正在执行构建的用户提供用户名和密码 。问题是Jenkins,Git和Nexus的凭据可能不同,所以我不能重复使用它们。显然我可以使用CI用户来验证所有内容,但由于某些规定我不能这样做。
首先我尝试使用-Dusername和-Dpassword但是1)这只适用于git,2)git和nexus的密码不同。除此之外,我想对git使用基于密钥的身份验证。
然后我尝试通过在执行maven-release-plugin之前更改会话/项目对象来以编程方式更改凭据:
final MavenExecutionRequest request = new DefaultMavenExecutionRequest()
.setLocalRepository(session.getLocalRepository())
.setPluginArtifactRepositories(session.getCurrentProject().getPluginArtifactRepositories())
.setRemoteRepositories(session.getCurrentProject().getRemoteArtifactRepositories())
.setBaseDirectory(new File(properties.getCheckoutDirectory()))
.setPluginGroups(session.getPluginGroups())
.setProjectPresent(true)
.setPom(new File(properties.getCheckoutDirectory() + "/pom.xml"))
.setGoals(Arrays.asList(goal))
.setInteractiveMode(false)
.setUserSettingsFile(new File(session.getSystemProperties().getProperty("user.home") + "/.m2/settings.xml"))
;
request.setUserProperties(preparePropertiesForMvn(properties));
for (ArtifactRepository artifactRepository : session.getCurrentProject().getRemoteArtifactRepositories()) {
if (artifactRepository.getId().equals("nexus-releases")) {
artifactRepository.setAuthentication(new Authentication(properties.getNexusUser(),properties.getNexusPassword()));
}
}
final MavenExecutionResult result = defaultMaven.execute(request);
在最后阶段,maven-deploy-plugin(由release插件执行)读取〜/ .m2 / settings.xml文件并从中获取(错误 - CI)凭据。
除了为构建中创建自己的自定义settings.xml文件以及构建凭据之外,还有其他方法吗?我想避免将凭据存储在本地存储上。
答案 0 :(得分:0)
您可以使用以下方法添加自己的服务器配置:
org.apache.maven.settings.Settings.addServer(org.apache.maven.settings.Server)
使用help:effective-settings
进行测试和验证,因为我目前无法再次测试任何存储库管理器。
只要您在Maven部署插件之前使用自己的服务器配置调用上述方法,就应该好了。
Server server = new Server();
server.setId("myServer");
server.setUsername("myUserName");
server.setPassword("myPassword");
settings.addServer(server);