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

相关推荐
q150803962259 小时前
告别复制粘贴!自动化处理文本空行的新思路
运维·自动化
阿幸软件杂货间9 小时前
Blender自动化展UV插件 UV Factory 4.3 v1 – Powerful Modular Uv Tools
自动化·blender·uv
dessler9 小时前
Elasticsearch(ES)分片(Shard)和 副本分片(Replica Shard)
linux·运维·elasticsearch
送秋三十五9 小时前
Docker 构建教程:学习上下文、架构和性能优化技术
学习·docker·架构
Dovis(誓平步青云)10 小时前
《探秘 Linux 进程控制:驾驭系统运行的核心之力》
linux·运维·服务器
Guheyunyi10 小时前
用气安全与能效优化平台
运维·网络·人工智能·安全·音视频
北亚数据恢复10 小时前
服务器数据恢复—硬盘黄灯预警,RAID5阵列数据如何恢复?
运维·服务器
半桔11 小时前
【网络编程】从数据链路层帧头到代理服务器:解析路由表、MTU/MSS、ARP、NAT 等网络核心技术
linux·运维·服务器·网络
weixin_3077791311 小时前
C#实现MySQL→Clickhouse建表语句转换工具
开发语言·数据库·算法·c#·自动化
b***251112 小时前
电池组PACK自动化生产线介绍|深圳比斯特自动化
运维·自动化