【问题标题】:Externalising SCM credentials with Maven使用 Maven 外部化 SCM 凭证
【发布时间】:2010-11-18 08:12:12
【问题描述】:

有没有一种方法可以将我的 SCM 凭据外部化,这样它们就不会存储在项目的 POM 中?问题是如果它们包含在项目的 POM 中,那么在部署项目时它们将对所有人可见。

【问题讨论】:

    标签: svn version-control maven-2 maven-scm


    【解决方案1】:

    对于某些 SCM 提供商,您可以在 settings.xml<servers> 部分指定您的凭据。作为<id>,使用您的存储库的域名。这对我有用。 SubVersion 也可以。

    例如,给定我的pom.xml 包含:

    <scm>
      <connection>scm:hg:http://jukito.googlecode.com/hg/</connection>
      <developerConnection>scm:hg:https://jukito.googlecode.com/hg/</developerConnection>
      <url>http://code.google.com/p/jukito/source/browse/</url>
    </scm>
    

    然后我可以在settings.xml 中指定我的凭据:

    <server>
      <id>jukito.googlecode.com</id>
      <username>philippe.beaudoin</username>
      <password>1234567890ABC</password>
    </server>
    

    【讨论】:

    • 谢谢,这似乎也适用于 svn。你知道这是否记录在某处吗?
    • 我不知道。我花了一段时间才找到它,我相信我在网上到处收集信息。
    • @Jörn Horstmann 这在 maven 参考书的附件 A.2.2 中有描述,见sonatype.com/books/mvnref-book/reference/…
    • ...端口号在这里很重要,正如@mudged 指出的那样;因此考虑了在同一主机上运行的不同进程/服务器(@01es)
    • 请注意,这也适用于使用 ssh 的 git。在我的例子中,对于 我使用:scm:git:ssh://git@bitbucket.org/{account}/{project},然后在我的 settings.xml 中我使用 &lt;id&gt;bitbucket.org&lt;/id&gt;&lt;privateKey&gt;/c/Users/neil.hunt/.ssh/id_rsa&lt;/privateKey&gt;
    【解决方案2】:

    我已经设法通过使用上面提供的解决方案来实现这一点,即将新的服务器配置添加到我的 settings.xml 并将域名作为 id。

    <server>
      <id>domain.name:port</id>
      <username>[username]</username>
      <password>[password]</password>
    </server>
    

    除了上一个答案,如果您在 URL 中指定一个端口,这也需要包含在 server.id 中。我发现的另一个怪癖是,如果密码包含任何可能干扰命令行调用的字符,则需要将密码放在引号中。

    您不能在 $user.home/.scm/svn-settings.xm 中使用以下内容,因为它无效! &lt;svn-settings&gt;下没有&lt;user&gt;&lt;password&gt;这样的元素(指定here

    <svn-settings>
      <user>[svn user]</user>
      <password>[svn password]</password>
    </svn-settings>
    

    【讨论】:

      【解决方案3】:

      我意识到这个问题已经过时并且答案已被接受,但为了完整起见,我想提供以下替代方案,这在某些情况下可能是首选。

      动机

      有时会发生同一台服务器用于多种用途的情况,这需要不同的用户凭据。例如,它用于托管 Nexus 驱动的 Maven 存储库以及对同一用户具有不同凭据的 SVN 服务器。在这种情况下,需要有多个&lt;server&gt; 条目具有相同的idusername,但不同的password。然而,这是不可行的。

      解决方案

      Maven 发布插件支持标志usernamepassword,可以作为release:preparerelease:perform 命令的一部分提供。 usernamepassword 的值应与各自的 SVN 凭据匹配。

      mvn release:prepare -Dusername=[username] -Dpassword=[password] 
      

      【讨论】:

      • 在命令中传递这些不是一个好主意,因为任何人都可以查看 runnignprocesses 以获取您的凭据。
      • @Eddie 你能推荐一个更好的选择吗?
      • @Ev0oD - 是的,理想情况下使用 Maven 的内置加密,但在 settings.xml 中至少要有凭据
      【解决方案4】:

      这可以为许多 SCM 提供程序完成,我假设 Subversion 是基于您的标签的实现。

      您可以在 $user.home/.scm/svn-settings.xml(或 [maven home]/conf/.scm/svn-settings.xml,尽管这意味着它们仍然可见)中定义您的 Subversion 设置给系统用户)

      在该文件中,您可以设置 Subversion 服务器的用户名和密码。文件内容应如下所示:

      <svn-settings>
        <user>[svn user]</user>
        <password>[svn password]</password>
      </svn-settings>
      

      您可以在该配置文件中定义一些其他属性。有关详细信息,请参阅Subversion SCM page 的“提供程序配置”部分。

      其他 SCM 提供程序也有类似的方法,例如在 CVS 中,设置存储在同一位置(.scm 文件夹)的 cvs-settings.xml 中,有关详细信息,请参阅CVS SCM page

      【讨论】:

      • 嗨 Rich,您的建议不起作用(至少对我而言)。此外,在您的链接上没有关于用户名和密码的内容......所以,必须有另一种解决方案......
      • 设置文件中不支持用户和密码。
      • 感谢丰富的链接!
      • 对我也不起作用。菲利普的答案应该被标记为“正确”。
      猜你喜欢
      • 2014-08-24
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 2013-07-30
      • 2016-11-22
      • 1970-01-01
      相关资源
      最近更新 更多