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

相关推荐
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS2 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
AI职业加油站3 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
此冬歌咏3 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
玉&心3 天前
通过Arthas在线诊断K8S中的内存及JVM等使用情况
docker·k8s·arthas
xing-xing3 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
-梅3 天前
linux(8) 软硬链接
linux·运维·服务器
赵文宇(温玉)3 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher