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

news/2025/2/11 8:23:57/

摘要:

在现代软件开发中,持续集成(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 anystages {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.ppmy.cn/news/1571108.html

相关文章

Enterprise Architect 17 全面升级:重塑建模体验,赋能复杂系统设计

在数字化转型的浪潮中&#xff0c;复杂系统设计已成为企业创新和发展的重要推动力。作为一款广受认可的建模工具&#xff0c;Sparx Systems 的 Enterprise Architect&#xff08;EA&#xff09;以其丰富的功能和灵活性&#xff0c;赢得了全球用户的信赖。近日&#xff0c;Sparx…

【Unity】性能优化:UI的合批 图集和优化

目录 前言一、合批测试二、图集 前言 注意&#xff1a;DC指的是Draw Call。 温馨小提示&#xff1a;Frame Debugger 窗口&#xff08;菜单&#xff1a;Window > Analysis > Frame Debugger&#xff09;会显示绘制调用信息&#xff0c;并允许您控制正在构建的帧的“回放”…

Redis企业开发实战(五)——点评项目之分布式锁Redission与秒杀优化

目录 一、Redisson (一)Redisson基本介绍 (二)Redisson入门 1.引入依赖 2.配置Redisson客户端 3.使用Redission的分布式锁 4.tryLock参数解析 4.1tryLock() 4.2tryLock(long waitTime, TimeUnit unit) 4.3tryLock(long waitTime, long leaseTime, TimeUnit unit) 4…

电子时钟html

要求&#xff1a; 电子时钟的时间需与北京时间实时对应。 原理&#xff1a; 获取当地时间&#xff0c;我发现不用UTC8&#xff0c;当地时间已经与北京时间一致。获取时分秒&#xff0c;小于十的补零。调用clock更新&#xff0c;这样刷新的时候还会有内容。设置每秒钟调用一次。…

2021版小程序开发5——小程序项目开发实践(2)-完

2021版小程序开发5——小程序项目开发实践(2) 学习笔记 2025 使用uni-app开发一个电商项目继续&#xff1b; 过滤器的使用 filters: {toFixed(num){return Number(num).toFixed(2)} }<!-- 通过管道符 | 使用过滤器 --> <view> {{ item.price | toFixed }}</vi…

Jenkins数据备份到windows FTP服务器

文章目录 背景1. 安装配置 FileZilla Server&#xff08;Windows&#xff09;1.1 下载并安装 FileZilla Server1.2 配置 FTP 用户和共享目录 2. 安装并配置 FTP 客户端&#xff08;CentOS&#xff09;2.1 在 CentOS 安装 lftp 3. 编写 Jenkins 备份脚本3.1 赋予执行权限3.2 测试…

在阿里云ECS上一键部署DeepSeek-R1

DeepSeek-R1 是一款开源模型&#xff0c;也提供了 API(接口)调用方式。据 DeepSeek介绍&#xff0c;DeepSeek-R1 后训练阶段大规模使用了强化学习技术&#xff0c;在只有极少标注数据的情况下提升了模型推理能力&#xff0c;该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…

设计模式中的关联和依赖区别

在设计模式中&#xff0c;“关联”&#xff08;Association&#xff09;和“依赖”&#xff08;Dependency&#xff09;是两种不同的关系&#xff0c;它们有着不同的含义和使用场景。以下是它们之间的区别&#xff1a; 1. 关联&#xff08;Association&#xff09; 定义&…