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 实现。

相关推荐
Lalolander7 分钟前
设备工程项目采购中缺料和浪费的痛点和解决思路
大数据·运维·设备工程项目管理系统·设备工程项目质量管控·设备工程项目成本管控
dayuOK630713 分钟前
AI内容创作工具的下一个战场:从“生成”到“全流程自动化”
运维·人工智能·chatgpt·职场和发展·自动化·新媒体运营·媒体
Agent手记31 分钟前
成本数据多系统自动采集与分析实操指南:基于2026大模型Agent的超自动化实践
运维·人工智能·microsoft·ai·自动化
wb18935 分钟前
Kubernetes服务优化
云原生·容器·kubernetes
拉卡拉开放平台38 分钟前
支付系统在文旅场景的进阶之路:聚合收单、分账与自动化对账
大数据·人工智能·自动化
tedcloud1231 小时前
hello-agents部署教程:从零学习AI Agent开发
服务器·人工智能·学习·自动化·powerpoint
szxinmai主板定制专家2 小时前
电力设备RK3568/RK3576+FPGA,多系统混合部署Linux+RTOS RT-THREAD,强实时性
linux·运维·服务器·人工智能·嵌入式硬件·fpga开发
Agent产品评测局2 小时前
新能源制造供应链AI方案主流产品对比测评 —— 2026年企业级自动化选型深度指南
人工智能·ai·chatgpt·自动化·制造
我是坑货2 小时前
Jenkins 构建失败排查记录:mvn -U 把新版依赖被远程旧版覆盖
运维·jenkins
L、2182 小时前
CANN调优工具链全景:从profiler到tensorboard的完整观测体系
linux·运维·服务器·深度学习