持续集成与持续部署: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 流程的基本教程,实际应用中可以根据不同的项目类型、团队规模、业务需求等进行更加复杂和精细化的配置与优化。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux安装mysql57——笔记

rpm -qa | grep mysql有东西就rpm -e 文件名 下载 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm安装 yum -y install mysql57-community-release-el7-10.noarch.rpm安装 yum -y install mysql-community-server如果出现Error: GPG c…

基于Java Springboot高校会议室预订管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

基于 NCD 与优化函数结合的非线性优化 PID 控制

基于 NCD 与优化函数结合的非线性优化 PID 控制 1. 引言 NCD&#xff08;Normalized Coprime Factorization Distance&#xff09;优化是一种用于非线性系统的先进控制方法。通过将 NCD 指标与优化算法结合&#xff0c;可以在动态调整控制参数的同时优化控制器性能。此方法特别…

数据库表设计范式

华子目录 MYSQL库表设计&#xff1a;范式第一范式&#xff08;1NF&#xff09;第二范式&#xff08;2NF&#xff09;第三范式&#xff08;3NF&#xff09;三范式小结巴斯-科德范式&#xff08;BCNF&#xff09;第四范式&#xff08;4NF&#xff09;第五范式&#xff08;5NF&…

中国省级新质生产力发展指数数据(任宇新版本)2010-2023年

一、测算方式&#xff1a;参考C刊《财经理论与实践》任宇新&#xff08;2024&#xff09;老师的研究&#xff0c;新质生产力以劳动者劳动资料劳动对象及其优化组合的质变为 基本内涵&#xff0c;借 鉴 王 珏 和 王 荣 基 的 做 法构建新质生产力发展水平评价指标体系如下所示&a…

【爬虫】Firecrawl对京东热卖网信息爬取(仅供学习)

项目地址 GitHub - mendableai/firecrawl: &#x1f525; Turn entire websites into LLM-ready markdown or structured data. Scrape, crawl and extract with a single API. Firecrawl更多是使用在LLM大模型知识库的构建&#xff0c;是大模型数据准备中的一环&#xff08;在…

Admin.NET框架前端由于keep-alive设置缓存导致的onUnmount未触发问题

bug版本&#xff1a;next分支&#xff0c;基于.NET6版本&#xff1b; 问题描述&#xff1a; 1、添加keep-alive后&#xff0c;在其下运行的组件会出现onActived(被关注时)和onDeactived(取消关注时)生命周期&#xff0c;而组件原有生命周期为onMounted(被创造时)和onUnmounted(…

机器学习day7-线性回归3、逻辑回归、聚类、SVC

7欠拟合与过拟合 1.欠拟合 模型在训练数据上表现不佳&#xff0c;在新的数据上也表现不佳&#xff0c;常发生在模型过于简单无法处理数据中的复杂模式时。 特征&#xff1a; 训练误差较高 测试误差也高 模型过于简化&#xff0c;不能充分学习训练数据中的模式 2.过拟合 …

【鸿蒙开发】第二十二章 IPC与RPC进程间通讯服务

目录 1 IPC与RPC通信概述 2 实现原理 3 约束与限制 4 使用场景 5 开发步骤 5.1 Native侧开发步骤 5.2 ArkTS侧开发步骤 6 远端状态订阅开发实例 6.1 使用场景 6.1.1 Native侧接口 6.2 ArkTS侧接口 6.3 Stub感知Proxy消亡&#xff08;匿名Stub的使用&#xff09; 1 …

【开发小技巧11】用经典报表实现badge list效果,根据回显内容用颜色加以区分

之前使用badge list实现首页指标数据回显&#xff0c;但是无法根据对应数据进行个性化动态展示&#xff0c;那要如何解决呢&#xff1f;下面就来看看如何通过经典报表实现badge list效果&#xff0c;根据回显内容用颜色加以区分。 普通经典报表 想要做成类似这样的效果并且能…

rust中解决DPI-1047: Cannot locate a 64-bit Oracle Client library问题

我们在使用rust-oracle crate连接oracle进行测试的过程中&#xff0c;会发现无法连接oracle&#xff0c;测试运行过程中抛出“DPI-1047: Cannot locate a 64-bit Oracle Client library”错误。该问题是由于rust-oracle需要用到oracle的动态连接库&#xff0c;我们通过安装orac…

cocos creator 3.8 一些简单的操作技巧,材质的创建 1

这是一个飞机的3D模型与贴图 导入到cocos中&#xff0c;法线模型文件中已经包含了mesh、material、prefab&#xff0c;也就是模型、材质与预制。界面上创建一个空节点Plane&#xff0c;将模型直接拖入到Plane下。新建材质如图下 Effect属性选择builtin-unlit&#xff0c;不需…

python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改

Two-Step Vertification required&#xff1a; Please enter the mobile app OTPverification code: 01.因为巡检的服务器要双因子认证登录&#xff0c;也就是登录堡垒机时还要输入验证码。这对我的巡检查服务器的工作带来了不便。它的机制是每一次登录&#xff0c;算一次会话…

数据集-目标检测系列- 荷花 莲花 检测数据集 lotus>> DataBall

数据集-目标检测系列- 荷花 莲花 检测数据集 lotus>> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 贵在坚持&#xff01; 数据样例项目地址&#xff1a; * 相关项目 1&#xff09;数据集可视化项…

操作系统——揭开盖子

计算机执行时——取指执行 es:bx等于从0x9000开始&#xff0c;到0x90200结束

CTF 攻防世界 Web: SSRF Me write-up

题目名称-SSRF ME captcha 解码 目录扫描没有发现有用结果&#xff0c;根据提示 url 可能用来访问内部资源&#xff0c;根据题目名称可以猜测 ssrf。 其中 Captcha 用到 md5 加密截取&#xff0c;而且在每一次刷新网页时候会改变&#xff0c;可以写代码爆力枚举 Captcha 的值…

医学图像语义分割:前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室

医学图像语义分割&#xff1a;前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室 语义分割网络FCN&#xff1a;通过将全连接层替换为卷积层并使用反卷积上采样&#xff0c;实现了第一个端到端的像素级分割网络U-Net&#xff1a;采用对称的U形编解码器结构&#xff…

WPF窗体基本知识-笔记-命名空间

窗体程序关闭方式 命名空间:可以理解命名空间的作用为引用下面的控件对象 给控件命名:一般都用x:Name,也可以用Name但是有的控件不支持 布局控件(容器)的类型 布局控件继承于Panel的控件,其中下面的border不是布局控件,panel是抽象类 在重叠的情况下,Zindex值越大的就在上面 Z…

pytorch官方FasterRCNN代码详解

本博文转自捋一捋pytorch官方FasterRCNN代码 - 知乎 (zhihu.com)&#xff0c;增加了其中代码的更详细的解读&#xff0c;以帮助自己理解该代码。 代码理解的参考Faster-RCNN全面解读(手把手带你分析代码实现)---前向传播部分_手把手faster rcnn-CSDN博客 1. 代码结构 作为 to…

大数运算(加减乘除和输入、输出模块)

为什么会有大数呢&#xff1f;因为long long通常为64位范围约为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807&#xff0c;最多也就19位&#xff0c;那么超过19位的如何计算呢&#xff1f;这就引申出来大数了。 本博客适合思考过这道题&#xff0c;但是没做出来或…