使用maven发布插件时传递nexus的凭据

使用maven发布插件时传递nexus的凭据,maven,jenkins,credentials,nexus,maven-release-plugin,Maven,Jenkins,Credentials,Nexus,Maven Release Plugin,我想在发布期间使用物理用户的凭据。我使用以下堆栈:我自己的maven插件包装maven发布插件,jenkins,nexus,git。在Jenkins上,我使用参数和密码掩码插件为执行构建的用户提供用户名和密码。问题是Jenkins、Git和Nexus的凭据可能不同,因此我不能重复使用它们。显然,我可以使用CI用户对所有内容进行身份验证,但由于某些规定,我无法做到这一点 首先,我尝试使用-Dusername和-Dpassword,但1)这只适用于git,2)git和nexus的密码不同。此外,我想

我想在发布期间使用物理用户的凭据。我使用以下堆栈:我自己的maven插件包装maven发布插件,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插件(由发布插件执行)读取~/.m2/settings.xml文件并从中获取(错误的-CI)凭据


除了为具有内置凭据的生成准备自己的自定义settings.xml文件外,还有其他方法吗?我希望避免将凭据存储在本地存储上

您可以使用以下方法添加自己的服务器配置:

org.apache.maven.settings.Settings.addServer(org.apache.maven.settings.Server)
使用
help:effective settings
进行测试和验证,因为我目前没有办法对任何存储库管理器进行测试

只要在Maven deploy插件之前使用自己的服务器配置调用上述方法,您就可以开始了

    Server server = new Server();
    server.setId("myServer");
    server.setUsername("myUserName");
    server.setPassword("myPassword");
    settings.addServer(server);

我试着使用这个,但我不知道为什么maven deploy插件会读取settings.xml而不是使用这个设置。这个版本是作为一个独立的派生版本完成的,与您从命令行执行的主版本不同。您是否查看了
preparationGoals