启动
用 LTS 版本(推荐):
docker run -d \
--name jenkins \
--restart unless-stopped \
-u root \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:2.452.3-lts
两个端口含义:
8080:Web UI50000:JNLP agent 端口(如启用分布式构建)
两个挂载含义:
jenkins_home:所有配置 / 凭据 / Job 都在这里,必须命名卷或宿主机目录/var/run/docker.sock:让 Jenkins Job 里能调用宿主机 docker 命令(DooD 模式)
docker.sock 是一把双刃剑。它给 Jenkins 完全的 docker 控制权,相当于让 Jenkins 容器"穿透"到宿主机。安全做法是用 DinD(独立 Docker-in-Docker)sidecar 替代;先这样跑也没问题,但权限范围要清楚。
首次访问与解锁
首次启动会打印管理员密码:
docker logs jenkins | grep -A1 "Please use the following"
# 或
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
浏览器打开 http://localhost:8080,粘贴密码,按提示装推荐插件。装完后建第一个管理员账号。
插件镜像加速
国内环境下默认 updates.jenkins.io 慢,改成清华源:
docker exec jenkins bash -c '
sed -i "s|updates.jenkins.io|mirrors.tuna.tsinghua.edu.cn/jenkins|g" \
/var/jenkins_home/hudson.model.UpdateCenter.xml
sed -i "s|www.google.com|www.nju.edu.cn|g" \
/var/jenkins_home/updates/default.json
'
重启生效:
docker restart jenkins
也可以挂一个自管的
updates.json 进容器,避免每次都改。生产环境建议在内网搭一个 Jenkins 更新代理。Pipeline 示例
新建 Pipeline Job,把以下脚本粘进去——演示构建、测试、镜像打 tag 三步:
pipeline {
agent any
environment {
IMAGE = "registry.example.com/myapp"
TAG = "${BUILD_NUMBER}"
}
stages {
stage('Checkout') {
steps { checkout scm }
}
stage('Build & Test') {
steps {
sh '''
dotnet restore
dotnet build --no-restore -c Release
dotnet test --no-build -c Release --logger trx
'''
}
}
stage('Docker Build & Push') {
steps {
sh '''
docker build -t ${IMAGE}:${TAG} .
docker push ${IMAGE}:${TAG}
'''
}
}
}
post {
always { junit '**/TestResults/*.trx' }
failure { echo '构建失败:' + currentBuild.currentResult }
}
}
三个阶段对应最常见的 CI 流程:拿代码 → 编译测试 → 镜像推送。后续接 CD 时再加 stage。
备份与升级
备份最简单的方式:备份 jenkins_home 命名卷:
docker run --rm \
-v jenkins_home:/source:ro \
-v $(pwd):/backup \
alpine tar czf /backup/jenkins-$(date +%F).tar.gz -C /source .
升级到新 LTS:
docker pull jenkins/jenkins:2.462.3-lts
docker stop jenkins
docker rename jenkins jenkins-old
docker run -d --name jenkins ... jenkins/jenkins:2.462.3-lts
# 验证 OK 后:docker rm jenkins-old
升级前必须做完整备份;同时检查 官方升级指南,有些大版本需要先升到中间的过渡版本。
常见问题
- Job 内 docker 命令权限被拒:确保容器以
-u root启动,并挂载了docker.sock。 - 插件装一半失败:多半是网络问题。装镜像源后重试,或把 Job 调度到闲置时。
- 磁盘满:
Manage Jenkins → System Log → /var/jenkins_home/logs看一下,旧的构建日志 / 制品可以定期清理。
使用准则
- 永远用 LTS 版本,每周自动发版的 weekly 留给测试尝鲜。
jenkins_home必须挂命名卷或宿主机目录,重建容器不丢数据。- 把
docker.sock视为权限提升:能用就别给,权限边界要清楚。 - 国内环境第一时间换插件镜像源,否则首次安装几乎必卡。