有个需求需要将老的jenkins下的job和凭据迁移到新jenkins上。因为2套jenkins的内容不通,所以凭据加解密的密钥也不同,没办法直接将credentials.xml文件下的凭据内容直接复制追加到新jenkins的credentials.xml文件内(该存储凭据的文件在$JENKINS_HOME/目录下)。
找了下资料(下面链接),由于python3和依赖没有装,用了粗糙的方法。直接通过脚本批量获取了待解密的密码串,然后通过管理员权限登入jenkins平台,在系统管理》脚本命令行中将需要解密的密钥串通过解密命令进行了解密。然后登入新的jenkins执行加密命令进行加密。并修改credentials.xml内容
//解密
println(hudson.util.Secret.fromString("{XXX=}").getPlainText())
//加密 xxx为明文密码
println(hudson.util.Secret.fromString("xxx").getEncryptedValue())
批量解析加密可以在脚本命令行执行
com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach{
it.properties.each { prop, val ->
println(prop + ' = "' + val + '"')
}
println("-----------------------")
}
另外还需要考虑凭据是凭据类型:可以参考如何从凭据.xml解密詹金斯密码?
https://xn--thibaud-dya.fr/jenkins_credentials.html
https://github.com/tweksteen/jenkins-decrypt/blob/master/decrypt.py
另外job迁移合并
job迁移合并比较简单,将老jenkins的$JENKINS_HOME/jobs下的job通过rsync命令拷贝到新的jenkins的jobs目录下即可。
日志和archive存储目录不需要可以剔除掉
rsync --exclude=/**/log --exclude=/**/archive/ -avzP $JENKINS_HOME/jobs root@127.0.0.1:$JENKINS_HOME/jobs/