如何将凭据从一个jenkins实例导出到另一个?
我正在使用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实例导出到另一个?,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不是解
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
- 手头有用户和密码/令牌
#老詹金斯垃圾场
#新詹金斯进口公司
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