如何在settings.xml中使用artifactory-maven-plugin中的用户名和密码?

时间:2016-09-19 02:05:07

标签: java maven repository maven-plugin artifactory

Hereartifactory-maven-plugin的配置示例:

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.jfrog.buildinfo</groupId>
            <artifactId>artifactory-maven-plugin</artifactId>
            <version>2.6.1</version>
            <inherited>false</inherited>
            <executions>
                <execution>
                    <id>build-info</id>
                    <goals>
                        <goal>publish</goal>
                    </goals>
                    <configuration>
                        <deployProperties>
                            <gradle>awesome</gradle>
                            <review.team>qa</review.team>
                        </deployProperties>
                        <publisher>
                            <contextUrl>https://oss.jfrog.org</contextUrl>
                            <username>deployer</username>
                            <password>{DESede}...</password>
                            <repoKey>libs-release-local</repoKey>
                            <snapshotRepoKey>libs-snapshot-local</snapshotRepoKey>
                        </publisher>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

在这种情况下,我必须手动设置contextUrluserNamepassword。虽然标准maven部署插件使用setting.xml中的这些参数(就像那样):

<servers>
  <server>
    <username>username</username>
    <id>server-id</id>
    <password>pass</password>
  </server>
</servers>

为什么jfrom没有使用来自setting.xml的用户名,网址,...等?有没有办法只指定没有pass和username的服务器ID?

当然有人可以在设置xml中定义属性并在插件定义中使用它们,但在这种情况下,这些属性可以很容易地与所有项目共享,并在第三方构建期间由任何人输出到控制台。

<properties>
   <username></username>
</properties>

2 个答案:

答案 0 :(得分:0)

official documentation实际上暗示了一种不同的方法:

  

确保您的Artifactory发布商凭据安全
  如果您希望保持Artifactory发布者凭据(usernamepassword)的安全(而不是在插件配置中将它们作为自由文本提供),我们建议将它们存储为环境变量或系统属性,并使其具有插件在需要时读取它们。由于通常的Maven部署不支持settings.xml中的环境变量或系统属性,因此此功能对于Maven Artifactory插件是唯一的。

因此,确实引用settings.xml中定义的服务器ID的预期功能未实现

一方注意:为了实施良好实践,应通过Continuous Integration服务器(即Jenkins)以自动方式执行Maven存储库的部署。在这种情况下,CI服务器的Artifactory插件(即Artifactory Jenkins Plugin)将以安全的方式处理它,仅在一个地方(CI服务器)集中此机制,在用户管理和治理之后,避免意外操作从本地机器。否则可能出错的事情(从本地机器发布):

  • 代码可能无法在版本控制下对齐,发布更难以对工件进行故障排除
  • 可能已跳过测试,发布潜在错误
  • 构建可能只能在该计算机上重现,发布不可重构的工件

将它放在pom.xml中可能确实以某种方式暴露于上述问题(团队中的某些人可能错误地触发它),而自动化流程和门将确保某些步骤。

答案 1 :(得分:0)

我同意建立一个自动构建框并使用jenkins / hudson或类似产品将是理想的选择。如果你时间紧张,仍然想要一些更安全的东西,你可以考虑设置ssh身份验证。文档如下:

https://www.jfrog.com/confluence/display/RTF/SSH+Integration