Maven 与 jenkins slave 和凭证一起发布:如何将 SCM 凭证传递给 maven?

Maven release with jenkins slave and Credentials : how to pass SCM credentials to maven?

我正在使用 Jenkins master/slave 设置。我希望 Jenkins 有一个 "source" 的凭据信息。不是keys/passwords散落一地。

所以,我不想在 Jenkins 中定义我的 SCM(使用来自 Jenkins 凭据提供者的凭据)然后在 pom 中再次定义。xml/settings.xml/id_rsa.pem 取决于工作.每个人都喜欢按照自己的方式做事,我们最终会到处都是密钥文件或密码的副本。迟早有人将 pom 推送到 public 存储库,我们的服务器就会受到威胁...

我看不到将凭据从 Jenkins 获取到某个 maven 发布插件可以使用它们的地方的可维护方法。我错过了什么? (尝试将标签推送到 git

时,maven 发布失败
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] Permission denied (publickey).

)

我显然可以定义一个 "file" 安装在包含 pem 的从机上(我可以想出几种方法来做到这一点)但是当我们轮换密钥以记住它时,我的维护很头疼在多个位置。否则,快照工作一个月,然后发布失败,没有人能理解为什么 mvn 突然无法推送到 git.

(注意只有密钥登录,没有密码)

整个早上都在想办法解决这个问题,然后在 "Build environment" 部分找到 "SSH Agent" 复选框。勾选它,并提供正确的凭据,它就会起作用。 我考虑过删除问题,但在阅读了许多其他高维护建议(涉及 .pem 文件的副本)后,我想我会离开它。

为了使它与 github 存储库一起工作,我必须安装 SSH 代理(如 @P_W999 建议的那样)并将以下配置添加到我的 pom.xml:

[...]
<build>
    <plugins>
        [...]
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5.3</version>
            <configuration>
                <tagNameFormat>v@{project.version}</tagNameFormat>
                <checkModificationExcludes>
                    <checkModificationExclude>pom.xml</checkModificationExclude>
                </checkModificationExcludes>
            </configuration>
        </plugin>
        [...]
    </plugins>
</build>

<scm>
    <connection>scm:git:ssh://git@github.com/${mygithubusername}/${mygithubreponame}.git</connection>
    <developerConnection>scm:git:ssh://git@github.com/${mygithubusername}/${mygithubreponame}.git</developerConnection>
    <url>https://github.com/${mygithubusername}/${mygithubreponame}.git</url>
    <tag>v@{project.version}</tag>
</scm>
[...]