我正在使用Jenkins中的凭据插件来管理我的团队构建的git和数据库访问凭据。我想将凭证从一个jenkins实例复制到另一个独立的jenkins实例。我该怎么做呢?
答案 0 :(得分:21)
更新: TL; DR 在 Filip Stachowiak 的评论中按照下面提供的链接进行操作,这是最简单的方法。万一它不适合你继续阅读。
复制$ HUDSON_HOME / credentials.xml不是解决方案,因为Jenkins会加密密码,除非两者共享一个公用密钥,否则这些密码不能被其他实例解密。
因此,您在两个Jenkins实例(Where's the encryption key stored in Jenkins?)中使用相同的编码键,或者您可以执行的操作:
真正重要的是两个credentials.xml中的用户ID都是相同的。为此(请参阅下面的credentials.xml示例),用户: Jenkins 两个credentials.xml中的标识符<id>c4855f57-5107-4b69-97fd-298e56a9977d</id>
必须相同
<com.cloudbees.plugins.credentials.SystemCredentialsProvider plugin="credentials@1.22">
<domainCredentialsMap class="hudson.util.CopyOnWriteMap$Hash">
<entry>
<com.cloudbees.plugins.credentials.domains.Domain>
<specifications/>
</com.cloudbees.plugins.credentials.domains.Domain>
<java.util.concurrent.CopyOnWriteArrayList>
<com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl>
<scope>GLOBAL</scope>
<id>c4855f57-5107-4b69-97fd-298e56a9977d</id>
<description>Para SVN</description>
<username>jenkins</username>
<password>J1ztA2vSXHbm60k5PjLl5jg70ZooSFKF+kRAo08UVts=
</password>
</com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl>
</java.util.concurrent.CopyOnWriteArrayList>
</entry>
</domainCredentialsMap>
</com.cloudbees.plugins.credentials.SystemCredentialsProvider>
答案 1 :(得分:2)
我也遇到了同样的问题。对我有用的是我将credentials.xml,config.xml和secretts文件夹从现有的jenkins复制到新实例。 jenkins重新启动后工作正常。
答案 2 :(得分:2)
这对我有用。
在Jenkins中创建一个获取凭据并将其写入输出的作业。如果Jenkins用****替换输出中的密码,只需先混淆它(在每个字符之间添加一个空格,反转字符,base64编码等)。
我使用Powershell作业对其进行base64编码:
[convert]::ToBase64String([text.encoding]::Default.GetBytes($mysecret))
然后使用Powershell将base64字符串转换回常规字符串:
[text.encoding]::Default.GetString([convert]::FromBase64String("bXlzZWNyZXQ="))
答案 3 :(得分:1)
经过几天的尝试,这是我发现的将我的秘密从Jenkins 2.176迁移到新的干净的Jenkins 2.249.1的最佳解决方案。 jenkins-cli 是我。
该过程非常简单,只需将凭据从旧实例作为XML文件(未加密)转储到本地计算机或安装Java的Docker pod中,然后上传到新实例。
在开始之前,您应该验证以下内容:
注意:如果您的詹金斯人使用oAuth服务,则需要 为您的用户创建令牌。一旦登录到顶部的詹金斯 正确,如果您单击个人资料,则可以验证用户名和 生成密码。
现在要使用特殊的调味料,您必须在同一台机器/豆荚中执行两个部分:
注意:如果您的实例使用有效的证书,而您想 确保您的连接安全,您必须删除 -noCertificateCheck 从两个命令中标记。
export USER=madox@example.com
export TOKEN=f561banana6ead83b587a4a8799c12c307
export SERVER=https://old-jenkins-url.com/
java -jar jenkins-cli.jar -noCertificateCheck -s $SERVER -auth $USER:$TOKEN list-credentials-as-xml "system::system::jenkins" > /tmp/jenkins_credentials.xml
export USER=admin
export TOKEN=admin
export SERVER=https://new-jenkins-url.com/
java -jar jenkins-cli.jar -noCertificateCheck -s $SERVER -auth $USER:$TOKEN import-credentials-as-xml "system::system::jenkins" < /tmp/jenkins_credentials.xml
答案 4 :(得分:0)
您是否尝试将$ JENKINS_HOME / users文件夹和$ JENKINS_HOME / credentials.xml文件复制到另一个Jenkins实例?