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

如何将凭据从一个jenkins实例导出到另一个?,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我正在使用Jenkins中的凭据插件来管理git的凭据和团队构建的数据库访问。我想将凭证从一个jenkins实例复制到另一个独立的jenkins实例。我该怎么做?您是否尝试将$JENKINS_HOME/users文件夹和$JENKINS_HOME/credentials.xml文件复制到另一个JENKINS实例?更新:TL;DR遵循下面由Filip Stachowiak提供的评论,这是最简单的方法。如果它对你不起作用,继续读下去 复制$HUDSON_HOME/credentials.xml不是解

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

您是否尝试将$JENKINS_HOME/users文件夹和$JENKINS_HOME/credentials.xml文件复制到另一个JENKINS实例?

更新:TL;DR遵循下面由Filip Stachowiak提供的评论,这是最简单的方法。如果它对你不起作用,继续读下去

复制$HUDSON_HOME/credentials.xml不是解决方案,因为Jenkins对paswords进行加密,并且这些paswords不能由另一个实例解密,除非两者共享一个公共密钥

因此,要么在两个Jenkins实例()中使用相同的加密键,要么可以执行以下操作:

  • 在第二个Jenkins实例中创建您需要共享的相同用户/密码,以便生成有效的密码
  • 真正重要的是,credentials.xml中的用户ID是相同的。为此(请参见下面的credentials.xml示例),对于user:Jenkins,两个credentials.xml中的标识符
    c4855f57-5107-4b69-97fd-298e56a9977d
    必须相同

    <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>
    
    
    全球的
    c4855f57-5107-4b69-97fd-298e56a9977d
    Para SVN
    詹金斯
    J1ztA2vSXHbm60k5PjLl5jg70ZooSFKF+kRAo08UVts=
    

  • 我也面临着同样的问题。对我有效的是,我将credentials.xml、config.xml和secrets文件夹从现有jenkins复制到新实例中。詹金斯重新启动后,一切都很顺利。

    这就是我的工作

    在Jenkins中创建一个作业,用于获取凭据并将其写入输出。如果Jenkins将输出中的密码替换为****,只需首先混淆它(在每个字符之间添加空格、反转字符、对其进行base64编码等)

    我使用Powershell作业对其进行base64编码:

    [convert]::ToBase64String([text.encoding]::Default.GetBytes($mysecret))
    
    然后使用Powershell将base64字符串转换回常规字符串:

    [text.encoding]::Default.GetString([convert]::FromBase64String("bXlzZWNyZXQ="))
    

    经过几天的尝试,这是我找到的将我的秘密从Jenkins 2.176迁移到新的干净Jenkins 2.249.1的最佳解决方案。Jenkins cli对我来说是最好的方法

    这个过程非常简单,只需将旧实例的凭据作为XML文件(未加密)转储到本地计算机或安装了java的Docker pod,然后上载到新实例

    开始之前,您应验证以下内容:

    • 访问两个Jenkins实例上的凭据部分
    • 从一个实例()下载jenkins-ccli.jar
    • 手头有用户和密码/令牌
    注意:如果您的jenkins使用oAuth服务,您需要 为您的用户创建令牌。一旦在顶端登录到jenkins 右键单击您的配置文件,您可以验证用户名和密码 生成密码

    现在,对于特殊酱汁,您必须从同一台机器/吊舱执行两个部分:

    注意:如果您的实例正在使用有效的证书,并且您希望 保护您的连接您必须删除-noCertificateCheck 来自两个命令的标志


    #老詹金斯垃圾场
    #新詹金斯进口公司
    export USER=admin
    导出令牌=管理员
    导出服务器=https://new-jenkins-url.com/
    java-jar jenkins-cli.jar-noCertificateCheck-s$SERVER-auth$USER:$TOKEN导入凭证为xml“system::system::jenkins”
    我对服务器本身使用ldap身份验证,但这些凭据用于git和数据库访问。它们存放在哪里?在plugins文件夹中?如果您创建全局凭据(在Jenkins管理部分),它们位于credentials.xml文件中。您是否发现credentials.xml文件是可移植的?我的经验表明,用户名/密码是散列的,来自一台机器的文件不会被带有复制文件的新机器识别。通常在windows上,默认安装在C:\Program Files(x86)\Jenkins(=$Jenkins\u HOME)上Jenkins在哪里存储加密密钥?我已经忍受了很长时间了!:(每次迁移Jenkins时,我都必须重新输入所有凭据!如果迁移到已具有凭据的Jenkins服务器,这会起作用吗?例如,在需要合并Jenkins服务器的情况下。@traiano在合并服务器时欢迎IMO,尽管您仍然可以从现有Jenkins服务器迁移凭据重新输入以前的凭据所包含的机密。@Pedro-我刚刚发现这是真的。我已从凭据库中提取了机密,并使用jenkins cli将其导出。@FilipStachowiak链接已断开。请检查此链接。
    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