基于 Git、Jenkins 和 Docker 的自动化持续集成与部署实践

摘要:

在现代软件开发中,持续集成(CI)和持续部署(CD)已成为提升开发效率和软件质量的关键实践。通过将 GitJenkinsDocker 三者结合,可以构建一个高效的自动化构建、测试和部署流水线。

1. 引言

随着软件开发的复杂性和团队协作需求的增加,传统的手动构建和部署方式已无法满足高效、可靠的要求。持续集成和持续部署(CI/CD)作为现代软件开发的最佳实践,能够自动化地将代码从提交到生产环境的整个过程。本文将详细介绍如何将 Git、Jenkins 和 Docker 集成,构建一个完整的自动化 CI/CD 流水线。

2. 环境准备

在开始之前,确保以下环境已准备就绪:

  • Git 仓库: 用于存储源代码,支持团队协作开发。
  • Jenkins 服务器: 用于自动化构建、测试和部署。
  • Docker 环境: 用于容器化应用,确保一致的运行环境。

3. 安装与配置

3.1 安装 Docker

在服务器上安装 Docker:

复制代码
# 更新包索引
sudo apt-get update

# 安装必要的包
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定的仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新包索引
sudo apt-get update

# 安装 Docker
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 启动并设置 Docker 开机自启
sudo systemctl start docker
sudo systemctl enable docker

3.2 安装 Jenkins

使用 Docker 安装 Jenkins:

复制代码
# 拉取 Jenkins 镜像
sudo docker pull jenkins/jenkins:lts

# 创建 Jenkins 工作目录
sudo mkdir -p /home/jenkins/workspace

# 启动 Jenkins 容器
sudo docker run -u root -d --restart=always --privileged=true -p 8080:8080 -p 50000:50000 \
  -v /home/jenkins/workspace/:/var/jenkins_home/workspace \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/bin/docker:/usr/bin/docker \
  --name jenkins jenkins/jenkins:lts

3.3 配置 Jenkins

  1. 访问 Jenkins: 在浏览器中访问 http://<Jenkins 服务器 IP>:8080

  2. 获取初始管理员密码: 运行以下命令获取密码:

    复制代码
    sudo docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
  3. 安装插件: 在 Jenkins 中安装以下插件:

    • Git Plugin
    • Docker Pipeline
    • Maven Integration Plugin
    • SSH Agent
  4. 配置全局工具: 在 Jenkins 的"全局工具配置"中,配置 JDK、Maven 和 Git 的路径。

4. 配置 Git 仓库

  1. 创建 Git 仓库: 在 GitHub、GitLab 或自建 Git 服务器上创建项目仓库。
  2. 生成 SSH 密钥对: 在 Jenkins 服务器上生成 SSH 密钥对,并将公钥添加到 Git 仓库的 SSH 密钥设置中。
  3. 配置 Jenkins 凭据: 在 Jenkins 中添加 Git 仓库的 SSH 凭据。

5. 配置 Jenkins 构建任务

  1. 创建新任务: 在 Jenkins 中创建一个新的"流水线"任务。

  2. 配置源码管理: 在任务配置中,选择 Git,并填写仓库 URL 和凭据。

  3. 配置构建触发器: 选择"GitHub hook trigger for GITScm polling",以便在 Git 仓库有新提交时自动触发构建。

  4. 配置构建脚本: 在流水线脚本中,编写构建、测试和部署的步骤。示例:

    复制代码
    pipeline {
        agent any
        stages {
            stage('Checkout') {
                steps {
                    git credentialsId: 'git-credentials-id', url: 'git@github.com:your-repo.git'
                }
            }
            stage('Build') {
                steps {
                    script {
                        // 构建命令,例如使用 Maven 构建
                        sh 'mvn clean package'
                    }
                }
            }
            stage('Build Docker Image') {
                steps {
                    script {
                        // 构建 Docker 镜像
                        sh 'docker build -t your-image:${BUILD_NUMBER} .'
                    }
                }
            }
            stage('Push Docker Image') {
                steps {
                    script {
                        // 登录 Docker 仓库
                        sh 'docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD'
                        // 推送镜像
                        sh 'docker push your-image:${BUILD_NUMBER}'
                    }
                }
            }
            stage('Deploy') {
                steps {
                    script {
                        // 部署命令,例如使用 Docker 部署
                        sh 'docker run -d -p 8080:8080 your-image:${BUILD_NUMBER}'
                    }
                }
            }
        }
    }

6. 配置 GitHub Webhook

  1. 生成 GitHub Personal Access Token: 在 GitHub 中生成一个 Personal Access Token,用于 Jenkins
相关推荐
rebekk1 小时前
claude工作区与git仓库的关系
linux·git·python
FelixBitSoul1 小时前
Docker 镜像 SIZE、DISK USAGE、Layer、Prune、.dockerignore 全面解析:pull 到底下载多少?
docker
modelmd1 小时前
Docker 重命名数据卷
运维·docker·容器
神の愛1 小时前
GIT,可以参数这篇,需要加以理解,文字比较冗余,还请见谅
git
James5061 小时前
NewAPI使用
人工智能·docker·newapi
jolimark2 小时前
Windows下如何用GCC编译C语言?轻便方法分享
c语言·windows·git·mingw·gcc编译器
geinvse_seg2 小时前
开源实战——手把手教你搭建AI量化分析平台:从Docker部署到波浪理论实战
人工智能·docker·开源·蓝耘元生代·蓝耘maas
△曉風殘月〆2 小时前
一文带你掌握Visual Studio中集成的git功能
git·visual studio
格林威2 小时前
AI视觉项目部署:Docker 部署视觉服务可行性分析
linux·运维·人工智能·数码相机·docker·容器·工业相机