在 Debian 上搭建 Jenkins 自动化部署流程
一 环境准备与安装
- 安装 Java(推荐 OpenJDK 11 或 17):sudo apt update && sudo apt install -y openjdk-11-jdk(或 openjdk-17-jdk);验证:java -version。
- 添加 Jenkins 官方 APT 仓库 并安装:
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo deb https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt update && sudo apt install -y jenkins
- 启动并设置开机自启:sudo systemctl enable --now jenkins
- 访问 http://<服务器IP>:8080,解锁 Jenkins:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 防火墙放行端口(如使用 UFW):sudo ufw allow 8080/tcp;如启用 Agent 通信,放行 50000/tcp。
二 初始化与安全配置
- 插件安装:进入 Manage Jenkins → Plugin Manager,安装 Pipeline、GitHub Integration、Docker Pipeline、SSH Pipeline Steps/Publish Over SSH、Credentials Binding 等常用插件。
- 更新站点镜像(可选,提升国内下载速度):进入 Manage Jenkins → Plugin Manager → Advanced,将 Update Site URL 替换为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
- 安全配置:启用安全(如 Logged-in users can do anything),创建管理员账户,禁用匿名访问。
三 凭据与工具配置
- 凭据管理(Manage Jenkins → Manage Credentials → System → Global credentials):
- SSH 私钥(类型:SSH Username with private key):用于拉取私有仓库与远程部署。
- Docker Hub 账号(类型:Username with password 或 Docker Credentials):用于推送镜像。
- 代码仓库 Deploy Key(SSH,添加到 GitHub/GitLab Deploy Keys)。
- 全局工具(Manage Jenkins → Global Tool Configuration):配置 JDK、Git、Maven/NodeJS 等工具路径或自动安装。
四 创建流水线并编写 Jenkinsfile
- 新建任务:New Item → Pipeline → 勾选 Pipeline script from SCM → 选择 Git,填写仓库 URL 与凭据。
- 典型流程示例(声明式 Pipeline):
- 拉取代码 → 构建(如 mvn/ npm)→ 测试 → 打包 → 部署。
- 部署方式可选:
- 通过 SSH 将产物(如 target/*.jar)传输到目标服务器并启动;
- 使用 Docker 构建镜像、推送到仓库,远程主机拉取并运行容器。
- 参考 Jenkinsfile(按项目替换占位符):
pipeline {
agent any
environment {
DOCKER_IMAGE = “your-dockerhub-username/your-app:${BUILD_NUMBER}”
REMOTE_SERVER = “user@your-server-ip”
REMOTE_DIR = “/opt/app”
}
stages {
stage(‘Checkout’) { steps { git branch: ‘main’, url: ‘https://github.com/your/repo.git’ } }
stage(‘Build’) { steps { sh ‘mvn -B -DskipTests clean package’ } }
stage(‘Test’) { steps { sh ‘mvn test’ } }
stage(‘Build & Push Image’) {
steps {
script {
dockerImage = docker.build(env.DOCKER_IMAGE)
docker.withRegistry(‘https://registry.hub.docker.com’, ‘dockerhub-credential-id’) {
dockerImage.push()
}
}
}
}
stage(‘Deploy Remote’) {
steps {
sshagent([‘ssh-credential-id’]) {
sh “”"
ssh ${REMOTE_SERVER} “docker pull ${DOCKER_IMAGE}”
ssh ${REMOTE_SERVER} “docker stop your-app || true”
ssh ${REMOTE_SERVER} “docker rm your-app || true”
ssh ${REMOTE_SERVER} “docker run -d --name your-app -p 8080:8080 ${DOCKER_IMAGE}”
“”"
}
}
}
}
}
- 如需使用 Publish Over SSH 传输文件并执行远程命令,可在“系统配置”中添加 SSH Servers,在 Pipeline 中使用 sshPublisher 进行传输与远程执行。
五 触发自动化与运维建议
- 触发方式:
- 轮询 SCM:在流水线配置中设置 “Poll SCM”,如 H/5 * * * *(每 5 分钟检查一次)。
- Webhook:在 GitHub/GitLab 配置 Webhook,指向 http:///github-webhook/(或 gitlab-webhook),实现代码推送即构建。
- 运行与扩展:
- 生产环境建议 Master/Agent 分离,在 Manage Nodes 添加 Agent 节点分担构建压力。
- 使用 Docker 运行 Jenkins 可简化环境管理:docker run -d -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkins/jenkins:lts;如需在容器内构建镜像,可挂载 /var/run/docker.sock。
- 稳定性与可观测性:
- 在 Pipeline 中使用 options { timeout; retry; timestamps } 控制运行时长与重试;
- 在 post 阶段添加通知(如邮件、企业微信/钉钉机器人)或结果归档,便于回溯。