基于 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 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.rhkb.cn/news/18090.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫实战:股票分时数据抓取与存储 (1)

在金融数据分析中&#xff0c;股票分时数据是投资者和分析师的重要资源。它能够帮助我们了解股票在交易日内的价格波动情况&#xff0c;从而为交易决策提供依据。然而&#xff0c;获取这些数据往往需要借助专业的金融数据平台&#xff0c;其成本较高。幸运的是&#xff0c;通过…

json-schema 的编辑器

最近在找一个 json-schema 的编辑器&#xff0c;在网上找了找&#xff0c;以下两个项目用的比较多 一、两款json-schema-editor 1、vue-json-schema-editor-visual 一个高效易用的基于 Vue Element UI 的 json-schema 编辑器。 git地址&#xff1a;https://github.com/gis…

记一次Self XSS+CSRF组合利用

视频教程在我主页简介或专栏里 &#xff08;不懂都可以来问我 专栏找我哦&#xff09; 目录&#xff1a;  确认 XSS 漏洞 确认 CSRF 漏洞 这个漏洞是我在应用程序的订阅表单中发现的一个 XSS 漏洞&#xff0c;只能通过 POST 请求进行利用。通常情况下&#xff0c;基于 POST 的…

API网关基础知识总结

什么是网关&#xff1f; 微服务背景下&#xff0c;一个系统被拆分为多个服务&#xff0c;但是像安全认证&#xff0c;流量控制&#xff0c;日志&#xff0c;监控等功能是每个服务都需要的&#xff0c;没有网关的话&#xff0c;我们就需要在每个服务中单独实现&#xff0c;这使…

Redis存储⑥Redis五大数据类型之 Zset

目录 1. Zset 有序集合 1.1 Zset 有序集合常见命令 zadd zcard zcount zrange zrevrange zrangebyscore&#xff08;弃用&#xff09; zpopmax bzpopmax zpopmin bzpopmin zrank zrevrank zscore zrem zremrangebyrank zremrangebyscore zincrby 1.2 Zset有…

景联文科技:以精准标注赋能AI未来,打造高质量数据基石

在人工智能蓬勃发展的时代&#xff0c;数据已成为驱动技术革新的核心燃料&#xff0c;而高质量的数据标注则是让AI模型从“感知”走向“认知”的关键桥梁。作为深耕数据服务领域的创新者&#xff0c;景联文科技始终以“精准、高效、安全”为核心理念&#xff0c;为全球AI企业提…

Wireshark TS | 再谈虚假的 TCP Spurious Retransmission

前言 在之前的《虚假的 TCP Spurious Retransmission》文章中曾提到一个错误判断为 TCP Spurious Retransmission&#xff0c;实际为 TCP Out-Of-Order 的案例&#xff0c;本次继续探讨一个虚假的 TCP Spurious Retransmission 案例。 问题背景 TCP Spurious Retransmission…

Redis常用的五种数据结构详解

一、Redis 数据库介绍 Redis 是一种键值&#xff08;Key-Value&#xff09;数据库。相对于关系型数据库&#xff08;比如 MySQL&#xff09;&#xff0c;Redis 也被叫作非关系型数据库。 像 MySQL 这样的关系型数据库&#xff0c;表的结构比较复杂&#xff0c;会包含很多字段&…

Effective Objective-C 2.0 读书笔记——内存管理(上)

Effective Objective-C 2.0 读书笔记——内存管理&#xff08;上&#xff09; 文章目录 Effective Objective-C 2.0 读书笔记——内存管理&#xff08;上&#xff09;引用计数属性存取方法中的内存管理autorelease保留环 ARCARC必须遵循的方法命名原则ARC 的自动优化&#xff1…

PyTorch 混合精度训练中的警告处理与代码适配指南

在最近的 PyTorch 项目开发中&#xff0c;遇到了两个与混合精度训练相关的警告信息。这些警告主要涉及 torch.cuda.amp 模块的部分 API 已被标记为弃用&#xff08;deprecated&#xff09;。本文将详细介绍这些警告的原因、解决方法以及最佳实践。 警告内容 警告 1: torch.cud…

STM32自学记录(九)

STM32自学记录 文章目录 STM32自学记录前言一、DMA杂记二、实验1.学习视频2.复现代码 总结 前言 DMA 一、DMA杂记 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&…

鸿蒙Harmony-UIAbility内状态-LocalStorage详细介绍

鸿蒙Harmony-UIAbility内状态-LocalStorage详细介绍 1.1 Localstorage的概念 LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例&#xff0c;LocalStorage也可以在UIAbility内&#xff0c;页面间共享状态 1.2 Lo…

SiliconCloud 支持deepseek,送2000w token

SiliconCloud SiliconCloud 邀请奖励持续进行&#xff0c;2000 万 Tokens 送不停&#xff01; 邀请好友赚 2000 万 Tokens&#xff1a;每成功邀请一位新用户通过手机号码注册&#xff0c;您将获得 2000 万 Tokens&#xff1b;注册即送 2000 万 Tokens&#xff1a;受邀好友作为…

ubuntu服务器部署

关闭欢迎消息 服务器安装好 ubuntu 系统后&#xff0c;进行终端登录&#xff0c;会显示出很多的欢迎消息 通过在用户的根目录下执行 touch .hushlogin 命令&#xff0c;再次登录终端就不会出现欢迎消息 修改hostname显示 修改 /etc/hostname 文件内容为主机名&#xff0c;保…

排序算法——人无完人

没有哪一个排序方法是完美的&#xff0c;对于不同的需求&#xff0c;排序算法各有自己的优势。金无足赤&#xff0c;人无完人。 &#xff08;这里不再重复所讲排序算法的实现&#xff0c;网上已有很多好的教学。&#xff09; 排序方法除了依靠时间复杂度和空间复杂度来区分&am…

3D模型可视化引擎HOOPS Visualize在桌面端的支持有哪些特点?

在数字化转型日益加速的今天&#xff0c;工业和工程领域的专业人员面临着越来越复杂的设计和数据分析需求。3D模型可视化技术应运而生&#xff0c;并成为了加速设计和制造流程的关键工具。作为业界领先的3D可视化引擎之一&#xff0c;HOOPS Visualize提供了一系列强大的桌面端支…

傅里叶变换推导

基本模型 假设在二维直角坐标系中&#xff0c;可以用相互垂直的基向量和表示&#xff1a; 假设&#xff1a; 假设在上的投影为&#xff0c;那么&#xff1a; 所以&#xff1a; 用公式表达&#xff1a; 但是在实际中&#xff0c;基向量和不一定长度都是1&#xff0c;重新推导一…

数据科学之数据管理|python for office

现如今&#xff0c;随着计算机的逐渐普及。现代化办公成为每个职场人必备的技能&#xff0c;本文档就来介绍&#xff0c;如何使用pytohn实现自动化办公。然而&#xff0c;自动化办公有时并不能减少工作量。自动化办公更适合批量处理文档。单一的文件&#xff0c;小金不建议使用…

【前端框架】Vue3 中 `setup` 函数的作用和使用方式

在 Vue 3 里&#xff0c;setup 函数是组合式 API 的核心入口&#xff0c;为开发者提供了更灵活、高效的组件逻辑组织方式。以下为你详细介绍其作用和使用方式&#xff1a; 作用 1. 初始化响应式数据 在 setup 函数中&#xff0c;我们能够使用 ref 和 reactive 等函数来创建响…

MySQL无法连接到本地localhost的解决办法2024.11.8

问题描述&#xff1a;我的MySQL可以远程连接服务器&#xff0c;但无法连接自己的localhost。 错误提示&#xff1a; 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因&#xff1a; 1. 检查环境变量是否正确&#xff1a;发现没…