如何将凭证从一个jenkins实例导出到另一个jenkins实例?

时间:2015-06-08 08:53:52

标签: jenkins jenkins-plugins

我正在使用Jenkins中的凭据插件来管理我的团队构建的git和数据库访问凭据。我想将凭证从一个jenkins实例复制到另一个独立的jenkins实例。我该怎么做呢?

5 个答案:

答案 0 :(得分:21)

更新: TL; DR Filip Stachowiak 的评论中按照下面提供的链接进行操作,这是最简单的方法。万一它不适合你继续阅读。

复制$ HUDSON_HOME / credentials.xml不是解决方案,因为Jenkins会加密密码,除非两者共享一个公用密钥,否则这些密码不能被其他实例解密。

因此,您在两个Jenkins实例(Where's the encryption key stored in Jenkins?)中使用相同的编码键,或者您可以执行的操作:

  1. 在第二个Jenkins实例中创建相同的用户/密码,以便生成有效密码
  2. 真正重要的是两个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

#新JENKINS导入#

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实例?