在 Debian 上使用 Jenkins 部署应用的实操指南
一 环境准备与安装
- 安装 Java 11(Jenkins 2.x 常用版本):
- 执行:
sudo apt update && sudo apt install -y openjdk-11-jdk
- 验证:
java -version
- 添加 Jenkins 官方 APT 仓库(签名校验更稳妥):
- 导入密钥:
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
- 添加源:
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
- 安装:
sudo apt update && sudo apt install -y jenkins
- 启动与开机自启:
sudo systemctl enable --now jenkins
- 检查状态:
sudo systemctl status jenkins
- 防火墙放行端口(如使用 UFW):
sudo ufw allow 8080/tcp
- 如启用 JNLP 代理还需放行 50000/tcp:
sudo ufw allow 50000/tcp
二 初始化与安全配置
- 解锁 Jenkins:
- 访问:
http://<服务器IP>:8080
- 初始管理员密码:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 插件与更新源:
- 首次可安装“推荐插件”,或手动安装:Pipeline、GitHub Integration、Docker、Kubernetes CLI、Credentials Binding
- 国内可加速插件更新:进入 Manage Jenkins → Plugin Manager → Advanced,将 Update Site URL 替换为:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
- 安全设置:
- 启用安全:进入 Manage Jenkins → Security → Enable security
- 选择 Logged-in users can do anything,创建管理员账户,禁用匿名访问
三 创建部署流水线
- 准备代码仓库与凭据:
- 生成 SSH 密钥:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/jenkins_github
- 将公钥添加到代码托管(如 GitHub Deploy Keys)
- 在 Jenkins 中添加凭据:Manage Jenkins → Credentials → System → Global credentials,类型选 SSH Username with private key,ID 设为 github-ssh
- 新建任务:
- 选择 Pipeline,在 Pipeline 配置中选择 Pipeline script from SCM,配置 Git 仓库地址与凭据
- 示例声明式流水线(可按需扩展测试与部署阶段):
- pipeline {
agent any
stages {
stage(‘拉取代码’) {
steps { git ‘git@github.com:your-org/your-repo.git’ }
}
stage(‘运行测试’) {
steps { sh ‘python -m pytest tests/’ }
}
stage(‘构建打包’) {
steps { sh ‘python setup.py build’ }
}
stage(‘部署’) {
steps { sh ‘./deploy.sh’ }
}
}
post {
always {
mail to: ‘team@example.com’,
subject: “构建完成: ${currentBuild.fullDisplayName}”,
body: “构建结果:${currentBuild.result}”
}
}
}
- 触发与验证:
- 提交代码触发构建,查看 Console Output 与 构建状态,确认部署脚本执行成功
四 部署方式选择
- 直接在 Jenkins Agent 主机部署(简单、直接)
- 适合单机或小规模环境;在部署阶段使用 SSH 或 SCP 将制品复制到目标主机并重启服务
- 使用 Docker 构建与运行(环境一致性更好)
- 在流水线中执行
docker build -t your-app:${BUILD_NUMBER} .
- 推送到镜像仓库:
docker push your-registry/your-app:${BUILD_NUMBER}
- 在目标主机拉取并运行:
docker run -d --name app -p 8080:8080 your-registry/your-app:${BUILD_NUMBER}
- 在容器内运行 Jenkins 并复用宿主机 Docker(便于在流水线内构建镜像)
- 运行容器(挂载 Docker 套接字与数据卷):
docker run -d --name jenkins-blueocean -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
- 注意权限与安全性(容器内以合适用户运行,谨慎挂载宿主 Docker 套接字)
五 常见问题与优化
- 插件安装慢:更换 Update Site 为清华镜像源,显著提升下载速度
- 构建/部署权限不足:
- 在目标主机为 Jenkins 用户配置 SSH 免密登录,或使用 sudo 并配置免密(谨慎评估安全影响)
- 端口与连通性:
- 确保 8080/50000 已放行;云服务器需检查 安全组/防火墙策略
- 日志与排错:
- Jenkins 日志:
sudo journalctl -u jenkins -f
- 构建日志:在任务页面查看 Console Output
- 资源与扩展:
- 生产建议 8 核 CPU / 16GB 内存 / 100GB SSD,必要时分离 Master/Agent 架构,提高稳定性与扩展性