当前位置: 首页 > article >正文

基于 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

http://www.kler.cn/a/540391.html

相关文章:

  • 探秘AES加密算法:多种Transformation全解析
  • SpringAI系列 - 使用LangGPT编写高质量的Prompt
  • idea 如何使用deepseek 保姆级教程
  • 鸿蒙 router.back()返回不到上个页面
  • Spring Boot 的问题:“由于无须配置,报错时很难定位”,该怎么解决?
  • 如何在Windows中配置MySQL?
  • 【Elasticsearch】集群配置性能优化
  • D3实现站点路线图demo分享
  • 【Deepseek】本地部署Deepseek
  • C# OpenCV机器视觉:对位贴合
  • 【开源免费】基于SpringBoot+Vue.JS校园网上店铺系统(JAVA毕业设计)
  • QNX800 run in Raspberry Pi
  • DeepSeek 实践总结
  • Vue全流程--Vue3组合一ref与reactive(实现响应式)
  • 零阶保持器(ZOH)变换和Tustin离散化变换以及可视化
  • 大语言模型RAG,transformer
  • 微信小程序分包异步化
  • 【时时三省】(C语言基础)基础习题1
  • Open Liberty使用指南及开发示例(二)
  • C++基础知识学习记录—补充
  • 2.10作业
  • 说一下 Tcp 粘包是怎么产生的?
  • ElasticSearch进阶
  • 服务器使用宝塔面板Docker应用快速部署 DeepSeek-R1模型,实现Open WebUI访问使用
  • Godot开发框架探索#2
  • 线程状态示意图