Jenkins 中存储的加密密钥在哪里?

Where's the encryption key stored in Jenkins?

我正在尝试将凭据从一个 Jenkins 迁移到另一个,但 usernames/passwords 在 ${JENKINS_HOME}/credentials.xml

中进行了哈希处理

我找到了这个 ,但问题是它没有说明人们会在哪里找到加密密钥才能成功迁移凭据。

非常感谢任何帮助!

编辑:更多信息.. 我的 ${JENKINS_HOME} 位于一个单独的卷上,我将其分离并重新连接到新 VM,但它仍然不适合我。

我发现 this analysis (link is dead as of June 2020, archived here) 非常有帮助。简而言之:

Jenkins uses the master.key to encrypt the key hudson.util.Secret. This key is then used to encrypt the password in credentials.xml.

当我需要 bootstrap 使用一些默认密码的新 Jenkins 实例时,我使用包含

的模板目录树
  • secrets/hudson.util.Secret
  • secrets/master.key

这很好用。

关于 JENKINS 迁移,我最近遇到了这种情况,经过几次测试后,我的解决方法对我有用。

这是我所做的:

  1. 我将以下文件和文件夹从 Source Jenkins 移动到目标:

    • $JENKINS_HOME/secret.key
    • $JENKINS_HOME/secrets
    • $JENKINS-HOME/users
    • $JENKINS_HOME/credentials.xml
  2. 请注意:这些文件不需要移动:

    • $JENKINS_HOME/identity.key.enc
    • $JENKINS_HOME/secrets/org.jenkinsci.main.modules.instance_identity.InstanceIdentity.KEY

否则你会在启动 Jenkins 后看到以下错误:

java.lang.AssertionError: InstanceIdentity is missing its singleton
  1. Jenkins 会自动生成这两个文件。一旦开始,你应该很好。