例如 Jenkins Home 目录为:
/opt/jenkins
容器内通常对应:
/var/jenkins_home
通过在 Jenkins Home 下新增 init.groovy.d 启动脚本来重置 admin 密码。
操作步骤
先确认 Jenkins 容器名称:
docker ps
查看 Jenkins Home 挂载目录:
docker inspect jenkins | grep -A 10 Mounts
假设你的宿主机目录是:
/opt/jenkins
那么后续操作都在该目录下完成。
停止 Jenkins 容器
docker stop jenkins创建 init.groovy.d 目录
mkdir -p /opt/jenkins/init.groovy.d创建密码重置脚本
创建文件:
vim /opt/jenkins/init.groovy.d/reset-admin-password.groovy
写入以下内容:
#!groovy
import jenkins.model.*
import hudson.security.*
def instance = Jenkins.get()
def hudsonRealm = instance.getSecurityRealm()
if (hudsonRealm instanceof HudsonPrivateSecurityRealm) {
def user = hudsonRealm.getUser("admin")
if (user != null) {
user.addProperty(new HudsonPrivateSecurityRealm.Details("NewPassword123"))
user.save()
println("Admin password has been reset.")
} else {
hudsonRealm.createAccount("admin", "NewPassword123")
println("Admin user has been created.")
}
} else {
println("Current security realm is not Jenkins local user database.")
}
instance.save()
把 NewPassword123改成你自己的密码
启动 Jenkins
docker start jenkins
使用新密码登录
admin/NewPassword123
登录成功后删除脚本
很重要,登录确认成功后,删除重置脚本:
rm -f /opt/jenkins/init.groovy.d/reset-admin-password.groovy然后重启 Jenkins:
docker restart jenkins否则每次 Jenkins 启动时都会重新执行该脚本。
注意事项
该方法只适用于 Jenkins 内置用户数据库
如果 Jenkins 使用的是 LDAP、AD、OAuth、SSO 等外部认证方式,这个脚本可能不会生效。
可以临时关闭安全配置,或修改 Jenkins 的认证方式后再处理。
使用完一定要删除脚本
init.groovy.d 下的脚本会在 Jenkins 启动时执行。
因此重置完成后必须删除。
完整命令示例
假设 Jenkins 容器名为 jenkins,宿主机数据目录为 /opt/jenkins:
docker stop jenkins
mkdir -p /opt/jenkins/init.groovy.d
cat > /opt/jenkins/init.groovy.d/reset-admin-password.groovy <<'EOF'
#!groovy
import jenkins.model.*
import hudson.security.*
def instance = Jenkins.get()
def hudsonRealm = instance.getSecurityRealm()
if (hudsonRealm instanceof HudsonPrivateSecurityRealm) {
def user = hudsonRealm.getUser("admin")
if (user != null) {
user.addProperty(new HudsonPrivateSecurityRealm.Details("NewPassword123"))
user.save()
println("Admin password has been reset.")
} else {
hudsonRealm.createAccount("admin", "NewPassword123")
println("Admin user has been created.")
}
} else {
println("Current security realm is not Jenkins local user database.")
}
instance.save()
EOF
docker start jenkins登录成功后执行:
rm -f /opt/jenkins/init.groovy.d/reset-admin-password.groovy
docker restart jenkins
原创
Docker 部署的 Jenkins 重置 admin 密码
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法