基于 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: '[email protected]: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
相关推荐
郭逍遥2 小时前
[学习笔记] 部署Docker搭建靶场
笔记·python·学习·ubuntu·docker·容器·flask
曾经的三心草4 小时前
docker-容器编排
docker·容器·eureka·容器编排
咖啡教室7 小时前
用git rebase命令合并开发阶段中多条commit提交记录
git
m0_748238428 小时前
SpringBoot集成Elasticsearch 7.x spring-boot-starter-data-elasticsearch 方式
spring boot·elasticsearch·jenkins
BillowX9 小时前
部署Jenkins
运维·jenkins
想要打 Acm 的小周同学呀9 小时前
docker安装redis
redis·docker·容器
檀越剑指大厂9 小时前
【Docker系列二】 Docker 镜像
运维·docker·容器
栖山️_0x53179 小时前
ScopeSentry(自动化信息收集工具)搭建[Linux]
linux·网络安全·docker
Steps-of-time10 小时前
Docker容器之网络
网络·docker·容器
IT成长日记10 小时前
Elasticsearch + Docker:实现容器化部署指南
elasticsearch·docker·容器化部署