【问题标题】:Passing through credentials for nexus while using maven release plugin在使用 maven 发布插件时传递 nexus 的凭据
【发布时间】:2013-09-29 12:13:18
【问题描述】:

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

除了为具有内置凭据的构建准备自己的自定义 settings.xml 文件之外,还有其他方法吗?我想避免将凭据存储在本地存储中。

【问题讨论】:

    标签: maven jenkins credentials nexus maven-release-plugin


    【解决方案1】:

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

    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);
    

    【讨论】:

    • 我尝试使用它,但我不知道为什么 maven-deploy-plugin 仍然读取 settings.xml 而不是使用此设置。
    • 该版本是从您从命令行执行的主要版本中单独分拆出来的。你看preparationGoals了吗?
    猜你喜欢
    • 2015-04-01
    • 2017-06-21
    • 2016-05-31
    • 2022-01-06
    • 2015-10-13
    • 1970-01-01
    • 2020-10-19
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多