Jenkins+Docker 实现一键自动化部署项目

以下是使用 Jenkins + Docker 实现一键自动化部署项目的详细步骤,采用模块化拆解方案:


一、环境准备

  1. 安装 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
  2. 安装 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 配置

  1. 安装插件

    • 登录 Jenkins 控制台(http://<服务器IP>:8080)
    • 进入 Manage Jenkins > Manage Plugins,安装以下插件:
      • Docker Pipeline
      • Pipeline
      • SSH Pipeline Steps(如需远程部署)
  2. 配置全局工具

    • 进入 Manage Jenkins > Global Tool Configuration
    • 配置 JDK、Git、Maven/NodeJS 等项目所需工具路径。
  3. 添加凭证

    • 进入 Manage Jenkins > Manage Credentials
    • 添加以下凭证:
      • Docker Hub 账号(用于推送镜像)
      • 目标服务器的 SSH 密钥(如需远程部署)

三、项目配置

  1. 创建 Jenkins Pipeline 任务

    • 新建任务 → 选择 Pipeline → 输入任务名称 → 点击 OK
    • 在 Pipeline 配置中选择 Pipeline script from SCM
    • 配置代码仓库(Git/GitHub/GitLab)和凭据
  2. 编写 Jenkinsfile

    groovy 复制代码
    pipeline {
        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"]

五、触发自动化部署

  1. 手动触发 :在 Jenkins 任务页面点击 Build Now
  2. 自动触发 (Webhook 配置):
    • 在代码仓库(如 GitHub)中配置 Webhook:
      • URL: http://<jenkins-server-ip>/github-webhook/
    • 在 Jenkins 任务中勾选 GitHub hook trigger for GITScm polling

六、验证部署

  1. 检查 Jenkins 构建日志是否成功
  2. 登录目标服务器执行 docker ps 查看容器状态
  3. 访问 http://your-server-ip:8080 验证应用

常见问题排查

  1. 权限问题 :确保 Jenkins 用户有 Docker 操作权限(sudo usermod -aG docker jenkins)
  2. 网络问题:检查服务器与 Docker Hub/代码仓库的网络连通性
  3. 端口冲突 :确保目标服务器的 8080 端口未被占用

如果需要更复杂的部署策略(如蓝绿部署、滚动更新),可以结合 docker-compose 或 Kubernetes 实现。

相关推荐
Initialize-le3 小时前
Nginx 504 超时、499 一堆?网关排查法
运维·nginx
Android系统攻城狮5 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_delay调用流程与实战(七十二)
linux·运维·服务器·gstreamer音视频·音视频进阶
快乐的韭菜根根5 小时前
ubuntu 安装slurm并配置
linux·运维·ubuntu
U-Mail邮件系统6 小时前
自建邮箱服务器有哪些软件?三款主流邮件服务器软件推荐
运维·服务器
建筑工程企业管理系统6 小时前
工程进度统计管理系统自动化汇总数据,解决施工企业手工对账误差难题
大数据·人工智能·自动化
空空dream6 小时前
03 | 离线部署 FastAPI + Ollama(qwen2:0.5b):从 Docker 联调到 Kubernetes 验收
docker·ai·kubernetes·fastapi
天远数科7 小时前
零信任架构实战:基于天远贷前风险报告构建自动化消金信贷风控与多头共债排查网关
运维·人工智能·架构·自动化
别动我齐刘海9 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
honsor9 小时前
机房IP化改造首选:以太网温湿度传感器,PoE供电+Modbus TCP一网搞定
linux·运维·服务器
星创易联9 小时前
PLC数据采集与远程运维平台:从边缘计算到集中监控
大数据·运维·边缘计算