基于 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
相关推荐
就叫飞六吧1 分钟前
git提取当前分支指定文件历史版本
git
数字游民95271 分钟前
网站备案全流程回放(腾讯云)
人工智能·git·github·腾讯云·网站备案·waytoopc
水上冰石2 分钟前
如何查看k8s按照的jenkins插件的路径
容器·kubernetes·jenkins
oMcLin6 分钟前
如何在 CentOS 7.9 上配置并调优 Docker Swarm 集群,确保跨多个节点的高效服务发现与负载均衡?
docker·centos·服务发现
江湖有缘9 分钟前
Fenrus + Docker 实战:构建简洁高效的浏览器新标签页
运维·docker·容器
Albert Edison35 分钟前
【Git】多人协作一(同一分支下)
git·vscode·svn·github
学好statistics和DS44 分钟前
Git 同步冲突
大数据·git·elasticsearch
唯情于酒11 小时前
Docker学习
学习·docker·容器
喵叔哟11 小时前
20.部署与运维
运维·docker·容器·.net
德彪稳坐倒骑驴14 小时前
Git常用命令
git