以下是使用 Jenkins + Docker 实现一键自动化部署项目的详细步骤,采用模块化拆解方案:
一、环境准备
-
安装 Jenkins
bash# Ubuntu/Debian 示例 sudo apt update sudo apt install openjdk-11-jdk -y wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt update sudo apt install jenkins -y sudo systemctl start jenkins
-
安装 Docker
bash# Ubuntu/Debian 示例 sudo apt install docker.io -y sudo systemctl enable docker sudo usermod -aG docker jenkins # 授权 Jenkins 用户操作 Docker sudo systemctl restart jenkins
二、Jenkins 配置
-
安装插件
- 登录 Jenkins 控制台(
http://<服务器IP>:8080
) - 进入
Manage Jenkins > Manage Plugins
,安装以下插件:Docker Pipeline
Pipeline
SSH Pipeline Steps
(如需远程部署)
- 登录 Jenkins 控制台(
-
配置全局工具
- 进入
Manage Jenkins > Global Tool Configuration
- 配置 JDK、Git、Maven/NodeJS 等项目所需工具路径。
- 进入
-
添加凭证
- 进入
Manage Jenkins > Manage Credentials
- 添加以下凭证:
- Docker Hub 账号(用于推送镜像)
- 目标服务器的 SSH 密钥(如需远程部署)
- 进入
三、项目配置
-
创建 Jenkins Pipeline 任务
- 新建任务 → 选择
Pipeline
→ 输入任务名称 → 点击OK
- 在
Pipeline
配置中选择Pipeline script from SCM
- 配置代码仓库(Git/GitHub/GitLab)和凭据
- 新建任务 → 选择
-
编写 Jenkinsfile
groovypipeline { agent any environment { DOCKER_IMAGE = "your-dockerhub-username/your-app-name:${BUILD_NUMBER}" REMOTE_SERVER = "user@your-server-ip" REMOTE_DIR = "/path/to/deploy" } stages { // 阶段1:拉取代码 stage('Checkout') { steps { git branch: 'main', url: 'https://github.com/your/repo.git' } } // 阶段2:构建 Docker 镜像 stage('Build Image') { steps { script { dockerImage = docker.build(env.DOCKER_IMAGE) } } } // 阶段3:推送镜像到 Docker Hub stage('Push Image') { steps { script { docker.withRegistry('https://registry.hub.docker.com', 'dockerhub-credential-id') { dockerImage.push() } } } } // 阶段4:远程部署(可选) stage('Deploy') { steps { sshagent(['ssh-credential-id']) { sh """ ssh ${REMOTE_SERVER} "docker pull ${DOCKER_IMAGE}" ssh ${REMOTE_SERVER} "docker stop your-container-name || true" ssh ${REMOTE_SERVER} "docker run -d --name your-container-name -p 8080:8080 ${DOCKER_IMAGE}" """ } } } } }
四、Dockerfile 示例
dockerfile
# 基础镜像(根据项目类型选择)
FROM node:14-alpine # 示例:Node.js 项目
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["npm", "start"]
五、触发自动化部署
- 手动触发 :在 Jenkins 任务页面点击
Build Now
- 自动触发 (Webhook 配置):
- 在代码仓库(如 GitHub)中配置 Webhook:
- URL:
http://<jenkins-server-ip>/github-webhook/
- URL:
- 在 Jenkins 任务中勾选
GitHub hook trigger for GITScm polling
- 在代码仓库(如 GitHub)中配置 Webhook:
六、验证部署
- 检查 Jenkins 构建日志是否成功
- 登录目标服务器执行
docker ps
查看容器状态 - 访问
http://your-server-ip:8080
验证应用
常见问题排查
- 权限问题 :确保 Jenkins 用户有 Docker 操作权限(
sudo usermod -aG docker jenkins
) - 网络问题:检查服务器与 Docker Hub/代码仓库的网络连通性
- 端口冲突 :确保目标服务器的
8080
端口未被占用
如果需要更复杂的部署策略(如蓝绿部署、滚动更新),可以结合 docker-compose
或 Kubernetes 实现。