什么是CI/CD?让你的项目变得更加敏捷!

news2024/11/24 0:39:31

在今天这个快速变化的时代,开发者们需要与时俱进,不断提升自己的工作效率。在这篇文章里,将一起探讨如何使用CI/CD和Github Action让你的项目更加高效,快速响应市场变化。

一、什么是CI?

CI(持续集成,Continuous Integration)是一种软件开发实践,它要求开发者频繁地将代码集成到共享的主干分支中。每次集成都会触发自动化的构建和测试,以便尽早发现和修复问题,减少整体风险。

二、什么是CD?

CD(持续交付和持续部署,Continuous Delivery/Deployment)是一种紧密跟随CI的实践。它要求在一个自动化的、可复制的环境中,持续地将软件交付给客户或部署到生产环境。这样可以确保软件始终处于可交付或可部署的状态。

三、使用CI/CD的目的

采用CI/CD的主要目的是提高软件开发过程的效率和质量,从而加快交付速度,缩短反馈周期,降低风险,提高客户满意度。CI/CD在敏捷开发、DevOps等现代软件开发方法中扮演着核心角色。

四、Github Action是什么

Github Action是GitHub提供的一项自动化服务,它允许你在GitHub仓库中直接定义、构建和执行CI/CD流水线。你可以创建自定义的工作流程,以响应各种事件,如代码提交、Pull Request或者定时任务。

五、如何在自己的项目上使用Github Action

  1. 在你的GitHub仓库中创建一个名为.github/workflows的目录。
  2. 在该目录中创建一个YAML文件,如ci-cd.yml,来定义你的工作流程。
  3. 编辑YAML文件,编写工作流程的各个步骤,如检出代码、构建、测试、部署等。
  4. 提交YAML文件到仓库,Github Action会自动执行你定义的工作流程。

六、Github + DockerHub等于CI/CD

通过将Github Action与DockerHub等其他服务相结合,你可以更轻松地实现CI/CD。例如,你可以将构建好的Docker镜像推送到DockerHub,然后使用Kubernetes等工具将镜像部署到生产环境。

七、如何利用Github Action实现CI/CD:一个实战案例

在前面的文章中,已经了解了CI/CD的基本概念和Github Action的功能。接下来,将通过一个实际的Github项目来详细介绍如何使用Github Action实现CI/CD流程。

以下是整个CI/CD过程的简要概述:

  1. 定义workflow
  2. 本地修改代码
  3. 创建PR(Pull Request)
  4. 合并PR
  5. workflow自动触发完成CI/CD

具体步骤如下:

1. 定义workflow

在你的GitHub仓库中创建一个名为.github/workflows的目录,然后创建一个YAML文件,如ci-cd.yml,用于定义你的CI/CD流程。具体可以看看这里

2. 本地修改代码

在本地环境中修改代码并进行测试,确保代码的质量和可用性。

3. 创建PR(Pull Request)

将本地修改的代码提交到GitHub仓库,并创建一个PR,以便其他团队成员进行代码审查(呜呜呜,然而我没有其他成员)。

4. 合并PR

在代码审查通过后,合并PR到主干分支。

5. workflow自动触发完成CI/CD

一旦PR被合并,Github Action会自动触发定义好的workflow。在本案例中,workflow将完成以下任务:

CI:自动构建Docker镜像,推送到DockerHub

  1. 检出代码:Github Action会自动将最新的代码检出到工作环境中。
  2. 构建Docker镜像:根据项目中的Dockerfile,构建新的Docker镜像。
  3. 推送Docker镜像到DockerHub:将构建好的Docker镜像推送到DockerHub,以便其他人可以轻松获取和使用。

CD:自动拉取最新Docker镜像,启动项目,并重启相关服务

  1. 登录部署服务器:通过SSH登录到目标服务器。
  2. 拉取最新Docker镜像:从DockerHub拉取最新版本的Docker镜像。
  3. 启动项目:运行新的Docker镜像,启动项目实例。
  4. 重启相关服务:如果项目依赖其他服务,例如Ngin等,确保这些服务也被正确地重启。

在这个时序图中,可以看到整个实战案例中的CI/CD流程。首先,开发者将本地的更改推送到GitHub仓库,并创建并合并Pull Request。当Pull Request被合并时,GitHub Action会自动触发CI/CD工作流程。接下来,GitHub Action会执行一系列操作,包括检出代码、构建Docker镜像、推送镜像到Docker Hub以及登录部署服务器、拉取最新镜像、启动项目实例并重启相关服务。这个时序图可以帮助你更直观地理解CI/CD的过程。

小插曲!推荐一款好用的软件JNPF快速开发平台jnpfsoft.com,采用业内领先的SpringBoot微服务架构、支持SpringCloud模式,完善了平台的扩增基础,满足了系统快速开发、灵活拓展、无缝集成和高性能应用等综合能力;采用前后端分离模式,前端和后端的开发人员可分工合作负责不同板块,省事又便捷。

Github Action的优劣势

优势

  1. 与GitHub仓库紧密集成,方便使用。
  2. 支持丰富的事件触发器和可自定义的工作流程。
  3. 免费额度较为充足,适合个人项目和小团队。
  4. 有大量的开源Action可供选择,可以节省时间和精力。

劣势

  1. 对于大型项目和企业级用户,可能需要更高的性能和更多的资源,而Github Action的免费额度有限。
  2. 与第三方服务的集成可能不如专业的CI/CD平台灵活。
  3. 部分高级功能需要付费使用。

在这里,非常希望听到你关于CI/CD和Github Action的看法。你是否已经在项目中应用了这些实践?你认为它们如何帮助你提高效率和质量?请在评论区留下你的想法,让我们一起交流、学习、进步!

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

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

相关文章

【Java面试丨并发编程】线程的基础知识

一、进程与线程的区别 1. 进程 程序是由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存在指令运行过程中还需要用到磁盘、网络等设备进程就是用来加载指令、管理内存、管理IO的当一个程序被…

青岛大学_王卓老师【数据结构与算法】Week05_08_顺序栈的操作2_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础…

C++学习 内存分区模型

内存分区模型 C程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理。全局区:存放全局变量和静态变量以及常量。栈区:由编译器自动分配释放,存放函数的参数值&#…

【TI毫米波雷达笔记】DCA1000EVM+mmWave Studio数据采集的MIMO模式设置(多天线发射工作模式)

【TI毫米波雷达笔记】DCA1000EVMmmWave Studio数据采集的MIMO模式设置(多天线发射工作模式) 以IWR6843AOP为例 其为3发4收的雷达 MIMO模式有两种 TDM-MIMO和BPM-MIMO TDM-MIMO模式(时分复用) TDM-MIMO模式是最简单和常用的MIM…

Vector - CANoe - CAPL文件加密

目录 为什么会有CAPL文件加密需求? 加密文件介绍 “*.can”和“*.cin” 文件创建 <

win11安装virtual box和vagrant,附带centos7镜像

环境检查 1. 开启CPU虚拟化 修规bios配置 configuration -> Intel Virtual Technology 改为 enabled 2. 关闭hyper-v 以管理员启动 powershell&#xff0c;执行&#xff1a; bcdedit /set hypervisorlaunchtype off 3. 关闭wsl虚拟机 以管理员启动 powershell&#x…

C#探索之路(10):实现一个简单应用的功能——志愿填报

C#探索之路(10)&#xff1a;实现一个简单应用的功能——志愿填报 文章目录 C#探索之路(10)&#xff1a;实现一个简单应用的功能——志愿填报1、前景&#xff1a;2、需求分析3、功能实现3.1、界面交互-输入3.2、界面交互-输出 3、代码示例&#xff1a;4、效果图&#xff1a;5、总…

利用缓存模拟进度条(c实现)

代码如下&#xff1a; #include <stdio.h> #include <Windows.h>int main() {int total 100;int progress 0;char progressBar[101] {};while (progress < total) {progressBar[progress] #;printf("[%-100s] %d%%", progressBar, progress);ffl…

音视频开发实战03-FFmpeg命令行工具移植

一&#xff0c;背景 作为一个音视频开发者&#xff0c;在日常工作中经常会使用ffmpeg 命令来做很多事比如转码ffmpeg -y -i test.mov -g 150 -s 1280x720 -codec libx265 -r 25 test_h265.mp4 &#xff0c;水平翻转视频&#xff1a;ffmpeg -i src.mp4 -vf hflip -acodec copy …

爬虫相关知识与面试题目

常见的反爬虫和应对方法 参考:https://www.cnblogs.com/bsdr/p/5151891.html 0x01 常见的反爬虫 这几天在爬一个网站&#xff0c;网站做了很多反爬虫工作&#xff0c;爬起来有些艰难&#xff0c;花了一些时间才绕过反爬虫。在这里把我写爬虫以来遇到的各种反爬虫策略和应对的…

判断 Mac显卡 mps 是否可以正常运行

文章目录 Mac MPS介绍判断 Mac mps 是否可以正常运行Mac 指定 mps 进行推理示例Mac M1 GPU 训练 相比 CPU 速度提升对比&#x1f4d9; 开心搬砖每一天 Mac MPS介绍 使用 Apple 的 Metal Performance Shaders (MPS) 作为 PyTorch 的后端来启用加速 GPU 训练。 MPS 后端扩展了 P…

SpringBoot源码分析(5)--createApplicationContext创建应用上下文

文章目录 一、前言二、ApplicationContext简述2.1、Spring IOC容器实现方式 三、createApplicationContext/创建应用上下文3.1、DefaultResourceLoader3.2、AbstractApplicationContext3.3、GenericApplicationContext3.3.1、SimpleAliasRegistry3.3.2、DefaultSingletonBeanRe…

ARM中栈的种类与运用

1. 栈的概念 栈&#xff0c;本身是一段内存&#xff0c;程序运行时用于保存一些临时数据&#xff0c;如局部变量、参数、返回地址等等。 学习了数据结构&#xff0c;对栈的概念相信大家都不陌生&#xff0c;后进先出的数据结构&#xff0c;即最后进栈的元素最先出栈。但是在C语…

用html+javascript打造公文一键排版系统5:二级标题排版

公文中二级标题的一般以&#xff08;X&#xff09;标注&#xff08;其中X为由"一二三四五六七八九十"中的字符组成的字符串&#xff09;&#xff0c;用楷体字加粗。 首先我们要判断一段文字是否包含二级标题&#xff0c;最简单的方法 就是判断文字中的头一个字符是否…

springBoot整合二维码

一、引入坐标 <!-- 二维码 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.2.1</version></dependency><dependency><groupId>com.google.zxing</group…

Unhandled error during execution of component event handler at

Unhandled error during execution of component event handler at 执行组件事件处理程序期间出现未处理的错误 在 意思就是有些地方的值用早了,在没有数据之前就使用了 我这次报错是子组件的表单校验 调用事件就报错了 解决方法 setTimeout(() > { //调用方法 }, 0); 就是…

chapter10:SpringBoot与缓存

尚硅谷SpringBoot整合教程 1. JSR107 缓存开发规范&#xff0c;Java Caching 定义了5个核心接口&#xff0c; 分别是CachingProvider&#xff0c;CacheManager&#xff0c;Cache&#xff0c;Entry和Expiry。 CachingProvider&#xff1a;定义了创建&#xff0c;配置&#xff…

【bug】flameshot在ubuntu上的4K屏幕,双屏幕上用不了截图

问题 直接在4K屏幕上运行flameshot截图&#xff0c;直接黑屏 主屏 &#xff1a;4K 副屏&#xff1a;2k 解决 2.1长按1-2秒开机键&#xff0c;先回到桌面。 2.2 设置主屏缩放为125% 2.3 设置键盘快捷键命令为env QT_AUTO_SCREEN_SCALE_FACTOR1 flameshot gui 替代flameshot的…

第51步 深度学习图像识别:Convolutional Vision Transformer建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;Convolutional Vision Transformers Convolutional Vision Transformer&#xff08;ConViT&#xff09;是一种结合了卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09…

飞机【频闪灯、导航灯】效果的设置——灯和灯的光晕

一、飞机外部灯光系统——频闪灯和防撞灯——闪烁效果 二、实现的原理 如下图所示&#xff0c;灯效果的组成包含两部分&#xff0c;一是灯本身&#xff0c;二是灯光产生的光晕 灯—— 就是一个球&#xff08;Sphere&#xff09;,给它一个Emission(自发光)材质光晕——光晕的…