持续集成与持续部署:CI/CD实现教程

以下是一个基于常见工具实现 CI/CD 的基本教程示例,这里以 Git、Jenkins、Maven(用于 Java 项目构建和管理依赖,其他语言项目可替换为对应构建工具)以及 Docker(用于容器化部署,非必需但很常用)为例,展示如何搭建一个简单的 CI/CD 流程,你可以根据实际项目情况进行调整和扩展。

一、环境准备

1. 安装 Git
  • 根据操作系统不同,在官网(https://git-scm.com/)下载对应版本的 Git 安装包进行安装。安装完成后,通过命令行输入 git --version 验证是否安装成功。
2. 安装 Jenkins
  • Windows 系统
    • 从 Jenkins 官网(Jenkins)下载 Windows 安装包,运行安装程序,按照提示逐步完成安装。安装完成后,在浏览器中访问 http://localhost:8080(默认端口是 8080,如果安装过程中修改了端口则使用修改后的端口号),按照初始设置向导进行配置,包括安装推荐插件等操作。
  • Linux 系统(以 Ubuntu 为例)
    • 先更新系统软件包列表:sudo apt update
    • 安装 Java 环境(Jenkins 依赖 Java),执行命令 sudo apt install openjdk-11-jdk(这里以 Java 11 为例,可根据需求选择其他版本)。
    • 添加 Jenkins 软件源,在 /etc/apt/sources.list.d/ 目录下创建一个名为 jenkins.list 的文件,内容为 deb https://pkg.jenkins.io/debian-stable binary/,然后运行命令 wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - 导入 Jenkins 官方密钥。
    • 再次更新软件包列表后安装 Jenkins:sudo apt install jenkins,安装完成后,启动 Jenkins 服务 sudo service jenkins start,同样在浏览器中访问 http://<服务器 IP 地址>:8080 进行初始配置。
3. 安装 Maven(针对 Java 项目,其他语言项目按需安装对应构建工具)
  • Windows 系统
    • 从 Maven 官网(Welcome to Apache Maven – Maven)下载二进制压缩包,解压到指定目录(如 C:\Program Files\apache-maven),然后配置环境变量,在系统环境变量的 Path 变量中添加 Maven 的 bin 目录路径(如 C:\Program Files\apache-maven\bin),通过命令行输入 mvn -version 验证安装是否成功。
  • Linux 系统(以 Ubuntu 为例)
    • 执行命令 sudo apt install maven 进行安装,安装完成后通过 mvn -version 检查安装情况。
4. 安装 Docker(如果有容器化部署需求)
  • Windows 系统
    • 从 Docker 官网(https://www.docker.com/)下载 Docker Desktop for Windows 安装包,运行安装程序,按照提示完成安装,安装完成后需重启电脑使 Docker 生效,通过命令行输入 docker --version 验证。
  • Linux 系统(以 Ubuntu 为例)
    • 先卸载旧版本(如果有):sudo apt-get remove docker docker-engine docker.io containerd runc
    • 安装依赖包:sudo apt-get update && sudo apt-get install apt-transport-https ca-certificates curl gnupg lsdv
    • 添加 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
    • 安装 Docker 引擎:sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io,安装完成后通过 docker --version 验证安装情况,并且可以运行 sudo systemctl start docker 启动 Docker 服务,还可以设置开机自启 sudo systemctl enable docker

二、项目配置

1. 创建 Git 仓库
  • 在 Git 服务器(如 GitHub、GitLab 或者自建的 Git 服务器)上创建一个新的项目仓库,用于存放你的项目源代码。如果是本地已有项目,可以通过命令行进入项目目录,执行 git init 创建本地仓库,然后关联远程仓库(例如 git remote add origin <远程仓库 URL>),再将本地代码推送到远程仓库(git push -origin master 等,具体根据实际分支情况)。
2. 在 Jenkins 中配置项目
  • 登录 Jenkins 网页界面,点击 “新建 Item”,输入项目名称,选择 “Freestyle project”(自由风格项目,对于简单项目比较适用,也可以后续探索更复杂的项目类型如 Pipeline 等),点击 “确定”。
  • 在项目配置页面:
    • General(常规):可设置项目的一些基本描述信息等。
    • 源码管理:选择 “Git”,填写你的 Git 仓库地址(如 https://github.com/<用户名>/<项目名>.git),如果是私有仓库,可能需要配置认证信息(如 SSH 密钥或者用户名密码等),然后设置要构建的分支(如 master 或者其他开发分支)。
    • 构建触发器:有多种触发构建的方式,例如 “Poll SCM” 可以设置定时检查代码仓库是否有更新来触发构建(如 */5 * * * * 表示每 5 分钟检查一次);“GitHub hook trigger for GITscm polling”(如果项目托管在 GitHub 上)可以通过 GitHub 推送事件来触发构建,更加实时高效;你也可以手动点击 “立即构建” 按钮来触发构建。
    • 构建环境:根据项目需求配置,比如是否需要使用 Docker 等,这里如果使用 Docker,可勾选相关 Docker 配置选项(后续还需进一步配置 Docker 相关参数)。
    • 构建步骤
      • 对于 Java 项目,如果使用 Maven 构建,添加 “Execute Maven goal” 构建步骤,在 “Goals” 文本框中输入构建命令,比如 clean install(清除之前的构建结果并重新安装项目到本地仓库,一般会生成可部署的 JAR 文件等制品)。
      • 如果有其他操作,比如运行脚本、复制文件等,可以继续添加相应的构建步骤来完成对应的任务。

三、持续集成(CI)流程实现

1. 开发人员提交代码
  • 开发团队成员在本地完成代码编写、测试(本地可以先进行一些简单的单元测试等)后,将代码提交到前面创建的 Git 仓库对应的分支中(如 master 分支或者开发分支),根据设置的构建触发器,会触发 Jenkins 的构建流程。
2. Jenkins 执行构建和自动化测试
  • 当触发构建后,Jenkins 会按照配置的构建步骤进行操作:
    • 首先从 Git 仓库拉取最新的代码到 Jenkins 工作空间(一个临时的目录,用于存放项目代码及构建相关的文件等)。
    • 然后执行 Maven 的构建命令(以 Java 项目为例),进行编译、打包等操作,生成相应的软件制品(如 JAR 文件等)。
    • 接着会执行自动化测试,对于 Java 项目,如果在项目中有使用 JUnit 等测试框架编写的单元测试用例,Maven 在构建过程中会自动运行这些测试用例,并将测试结果反馈给 Jenkins。如果测试不通过,Jenkins 会在构建历史记录中标记该次构建失败,并通过之前配置的通知机制(如邮件等)通知开发人员,开发人员则需要根据测试报告去查找和修复代码中的问题,然后再次提交代码触发新的构建。
3. 查看构建结果与反馈
  • 在 Jenkins 的项目页面,可以查看每次构建的详细情况,包括构建是否成功、构建时间、测试报告等信息。开发人员和相关团队成员可以通过这些信息及时了解代码集成的状态以及存在的问题,持续优化代码质量,确保每次代码提交后都能顺利通过构建和测试环节,保证代码仓库中的代码处于可随时发布的状态。

四、持续交付 / 持续部署(CD)流程实现

1. 制品管理(以 Nexus 为例,也可选用其他制品库)
  • 安装 Nexus(可选步骤,如果已有合适的制品库可跳过)
    • Windows 系统:从 Nexus 官网下载安装包进行安装,按照提示配置相关参数,比如端口号、仓库设置等。
    • Linux 系统(以 Ubuntu 为例):可以下载 Nexus 的压缩包进行解压安装,也可以通过一些包管理工具(如 apt 等)查找是否有对应的安装包进行安装。安装完成后,配置相关参数并启动服务,通过浏览器访问对应的端口(默认是 8081)进入 Nexus 管理界面,创建相应的仓库(如 Maven 仓库用于存储 Java 项目制品等)。
  • 将构建制品推送到制品库
    • 在 Jenkins 的项目配置中添加 “构建后操作” 步骤,选择 “Deploy artifacts to Maven repository”(针对 Java 项目推送制品到 Maven 仓库的情况,其他项目可根据对应工具和制品库进行相应配置),填写 Nexus 仓库的相关信息,如仓库 URL、认证信息(如果需要)等,这样在每次构建成功后,会自动将生成的软件制品(如 JAR 文件等)推送到 Nexus 制品库中进行存储和管理,方便后续部署使用。
2. 环境部署(以下以 Docker 容器化部署为例)
  • 创建 Dockerfile(如果使用 Docker 部署)
    在项目的根目录下创建一个 Dockerfile 文件,用于定义如何将项目打包成一个 Docker 容器,例如对于一个简单的 Java 项目,其 Dockerfile 内容可能如下:
    FROM openjdk:11-jdk-alpine
    WORKDIR /app
    COPY target/*.jar app.jar
    ENTRYPOINT ["java", "-jar", "app.jar"]

    这表示基于 openjdk:11-jdk-alpine 这个基础 Docker 镜像(轻量级的 Java 11 环境镜像),在容器内创建 /app 工作目录,将项目构建生成的 JAR 文件(假设在 target 目录下)复制到容器内的 /app 目录下,并设置容器启动时执行的命令为运行该 JAR 文件。

  • 配置 Jenkins 进行部署(结合 Docker)
    • 在 Jenkins 的项目配置 “构建后操作” 中,添加 “Execute shell”(如果是 Linux 环境)或者 “Execute Windows batch script”(如果是 Windows 环境)等步骤,在脚本内容中编写 Docker 相关的部署命令,比如:
      docker build -t your-project-image.
      docker run -d -p 8080:8080 your-project-image

      这两条命令分别表示根据项目的 Dockerfile 构建一个名为 your-project-image 的 Docker 容器镜像,然后以守护进程模式(-d)运行该容器,并将容器内的 8080 端口映射到主机的 8080 端口(这里端口可根据项目实际需求修改),使得项目可以通过主机的 8080 端口对外提供服务。

    • 验证部署情况
      在目标环境(如预发布环境、生产环境等)中,通过访问相应的 URL(如 http://<服务器 IP 地址>:8080)来验证项目是否成功部署并正常运行,可以进行一些功能测试、性能测试等操作进一步确认软件在该环境下的状态,确保符合质量要求。
    •  

      对于持续交付来说,在完成上述步骤后,还需要相关人员根据业务情况决定何时将软件从预发布环境等最终部署到生产环境中;而对于持续部署,只要前面所有流程(包括构建、测试、制品管理、环境部署验证等)都顺利通过,就会自动将软件部署到生产环境中,无需人工干预,实现快速高效的软件交付和部署。

       

      这就是一个基于常见工具搭建 CI/CD 流程的基本教程,实际应用中可以根据不同的项目类型、团队规模、业务需求等进行更加复杂和精细化的配置与优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61875.shtml

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

相关文章

深入解析 EasyExcel 组件原理与应用

✨深入解析 EasyExcel 组件原理与应用✨ 官方&#xff1a;EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网 在日常的 Java 开发工作中&#xff0c;处理 Excel 文件的导入导出是极为常见的需求。 今天&#xff0c;咱们就一起来深入了解一款非常实用的操作 Exce…

Java爬虫:获取商品详情的实践之旅

在当今这个信息爆炸的时代&#xff0c;数据的价值日益凸显。对于电商行业来说&#xff0c;商品详情的获取尤为重要&#xff0c;它不仅关系到产品的销售&#xff0c;还直接影响到用户体验。传统的人工获取方式耗时耗力&#xff0c;而自动化的爬虫技术则提供了一种高效解决方案。…

C# 数据结构之【树】C#树

以二叉树为例进行演示。二叉树每个节点最多有两个子节点。 1. 新建二叉树节点模型 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace DataStructure {class TreeNode{public int Data { get;…

单片机_简单AI模型训练与部署__从0到0.9

IDE&#xff1a; CLion MCU&#xff1a; STM32F407VET6 一、导向 以求知为导向&#xff0c;从问题到寻求问题解决的方法&#xff0c;以兴趣驱动学习。 虽从0&#xff0c;但不到1&#xff0c;剩下的那一小步将由你迈出。本篇主要目的是体验完整的一次简单AI模型部署流程&#x…

【Spiffo】环境配置:VScode+Windows开发环境

摘要&#xff1a; 在Linux下直接开发有时候不习惯快捷键和操作逻辑&#xff0c;用Windows的话其插件和工具都更齐全、方便&#xff0c;所以配置一个Windows的开发环境能一定程度提升效率。 思路&#xff1a; 自己本地网络内远程连接自己的虚拟机&#xff08;假定用的是虚拟机…

使用eclipse构建SpringBoot项目

我这里用eclipse2018版本做演示&#xff0c;大家有需要的可以下载Eclipse Downloads | The Eclipse Foundation 1.打开eclipse&#xff0c;选择存放代码的位置 2.选择 file >> new >> project >> 选择springboot文件下的 spring starter project 2.这里选择N…

C++ 日期计算器的实现(运算符重载)

目录 一、前言 二、正文 1.1 Date类框架 1.2 两个日期间的直接赋值 1.3判断两个日期是否相同 1.4判断两个日期是否不同 1.5日期加天数 1.6日期天数 1.7日期的前置和后置 1.8日期减天数 1.9自身日期减天数 2.1自身日期前置--和后置-- 2.2两个日期的差值为差距天数 2…

LLM的原理理解6-10:6、前馈步骤7、使用向量运算进行前馈网络的推理8、注意力层和前馈层有不同的功能9、语言模型的训练方式10、GPT-3的惊人性能

目录 LLM的原理理解6-10: 6、前馈步骤 7、使用向量运算进行前馈网络的推理 8、注意力层和前馈层有不同的功能 注意力:特征提取 前馈层:数据库 9、语言模型的训练方式 10、GPT-3的惊人性能 一个原因是规模 大模型GPT-1。它使用了768维的词向量,共有12层,总共有1.…

如何使用 Python 开发一个简单的文本数据转换为 Excel 工具

目录 一、准备工作 二、理解文本数据格式 三、开发文本数据转换为Excel工具 读取CSV文件 将DataFrame写入Excel文件 处理其他格式的文本数据 读取纯文本文件: 读取TSV文件: 四、完整代码与工具封装 五、使用工具 六、总结 在数据分析和处理的日常工作中,我们经常…

太通透了,Android 流程分析 蓝牙enable流程(应用层/Framework/Service层)

零. 前言 由于Bluedroid的介绍文档有限&#xff0c;以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等)&#xff0c;加上需要掌握的语言包括Java/C/C等&#xff0c;加上网络上其实没有一个完整的介绍Bluedroid系列的文档&#xff0…

李继刚:提示词(Prompt)的本质是表达的艺术

看了李继刚在 AI 创新者大会的演讲《提示词的道与术》&#xff0c;收获很大&#xff0c;我分享一下学习笔记。  李继刚&#xff1a;提示词&#xff08;Prompt&#xff09;的本质是表达的艺术 一、提示词的本质是表达 本意、文意和解意的概念&#xff1a; 本意&#xff1a;指…

复古风格渐变褪色人像旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 这种调色风格旨在通过调整色彩和光影&#xff0c;为人像旅拍照片赋予复古的氛围和艺术感。渐变褪色效果增添了一种时光沉淀的感觉&#xff0c;使照片仿佛来自过去的岁月。 预设信息 调色风格&#xff1a;复古风格预设适合类型&#xff1a;人像&#xff0c;街拍&…

Android Studio更改项目使用的JDK

一、吐槽 过去&#xff0c;在安卓项目中配置JDK和Gradle的过程非常直观&#xff0c;只需要进入Android Studio的File菜单中的Project Structure即可进行设置&#xff0c;十分方便。 原本可以在这修改JDK: 但大家都知道&#xff0c;Android Studio的狗屎性能&#xff0c;再加…

字节青训营开课啦

系列文章目录 文章目录 系列文章目录一、字节青训营是什么&#xff1f;二、你将获得三、入营条件四、课程简介1.前端2.后端3.大数据 五、报名 一、字节青训营是什么&#xff1f; 青训营是字节跳动技术团队发起的技术系列培训&人才选拔项目&#xff1b;面向高校在校生&…

医药企业的终端市场营销策略

近年来&#xff0c;随着医药行业的快速发展&#xff0c;终端市场逐渐成为企业竞争的关键领域。在政策趋严、市场环境变化以及数字化转型的大背景下&#xff0c;医药企业如何在终端市场中立于不败之地&#xff1f;本文结合我们在医药数字化领域的经验&#xff0c;为大家剖析终端…

养老院管理系统+小程序项目需求分析文档

智慧综合养老服务平台是以业务为牵引、场景为驱动&#xff0c;围绕“老人”业务域&#xff0c;持续沉淀和打磨形成适应不同养老业务发展需要的业务能力&#xff0c;推动业务模式升级&#xff0c;为养老服务提供数字化解决方案&#xff0c;并依托实体站点与养老机构实现线上线下…

SpringBoot集成ES(ElasticSearch)

1.导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>导入依赖后&#xff0c;注意在依赖中查看对应的版本是否与本机ES对应 2.创建配置并…

数据结构之二:表

顺序表代码&#xff1a;SData/SqList/SeqList.h Hera_Yc/bit_C_学习 - 码云 - 开源中国 链表相关代码&#xff1a;SData/ListLink/main.c Hera_Yc/bit_C_学习 - 码云 - 开源中国 本文主要讲解的是线性表&#xff08;逻辑线性&#xff09;&#xff0c;对于非线性表不做补充。…

《Python基础》之循环结构

目录 简介 一、for循环 1、基本语法与作用 2、使用 range() 函数配合 for 循环 3、嵌套的for循环 二、while循环 1、基本语法与作用 2、while 循环嵌套 &#xff08;1&#xff09;、while循环与while循环嵌套 &#xff08;2&#xff09;、while循环与for循环嵌套 简介 …

基于LiteFlow的风控系统指标版本控制

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 更新日志 最近关于https://github.com/wnhyang/coolGuard此项目更新了如下内容&#xff1a;https://g…