当前位置: 首页 > news >正文

用GitHub Actions实现CI/CD

目录

  • 简介
  • GitHub Actions基础
  • 工作流配置文件
  • 实战案例
    • Node.js应用
    • Python应用
    • Docker容器构建与部署
  • 最佳实践
  • 常见问题与解决方案
  • 总结

简介

持续集成/持续部署(CI/CD)已成为现代软件开发不可或缺的一部分。它通过自动化构建、测试和部署过程,帮助开发团队更快、更可靠地交付软件。GitHub Actions是GitHub提供的内置CI/CD解决方案,它允许开发者直接在GitHub仓库中自动化软件开发工作流程。

本文将详细介绍如何使用GitHub Actions实现CI/CD流程,从基础概念到实战案例,帮助你快速掌握这一强大工具。

GitHub Actions基础

GitHub Actions的核心概念包括:

  • 工作流(Workflow): 可配置的自动化流程,由一个或多个作业组成
  • 事件(Event): 触发工作流的特定活动,如push、pull request等
  • 作业(Job): 在同一运行器上执行的一组步骤
  • 步骤(Step): 可以运行命令或操作的单个任务
  • 操作(Action): 可重用的独立命令,是工作流的最小构建块
  • 运行器(Runner): 执行工作流的服务器

GitHub Actions的主要优势:

  1. 与GitHub深度集成:无需配置外部服务
  2. 丰富的市场:提供大量预构建的Actions
  3. 多平台支持:支持Linux、Windows和macOS
  4. 矩阵构建:可在多个操作系统和语言版本上测试
  5. 免费额度:公共仓库完全免费,私有仓库有每月免费配额

工作流配置文件

GitHub Actions的工作流通过YAML文件定义,存放在仓库的.github/workflows目录下。一个基本的工作流配置文件结构如下:

name: CI/CD Pipelineon:push:branches: [ main ]pull_request:branches: [ main ]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Set up environmentrun: echo "Setting up environment"- name: Buildrun: echo "Building application"- name: Testrun: echo "Running tests"- name: Deployif: github.ref == 'refs/heads/main'run: echo "Deploying to production"

这个示例工作流在每次向main分支推送代码或创建针对main分支的pull request时触发,并在Ubuntu最新版本上运行一系列步骤。

实战案例

Node.js应用

下面是一个用于Node.js应用的CI/CD工作流示例:

name: Node.js CI/CDon:push:branches: [ main ]pull_request:branches: [ main ]jobs:build:runs-on: ubuntu-lateststrategy:matrix:node-version: [14.x, 16.x, 18.x]steps:- uses: actions/checkout@v3- name: Use Node.js ${{ matrix.node-version }}uses: actions/setup-node@v3with:node-version: ${{ matrix.node-version }}cache: 'npm'- name: Install dependenciesrun: npm ci- name: Run lintingrun: npm run lint- name: Run testsrun: npm test- name: Buildrun: npm run builddeploy:needs: buildif: github.ref == 'refs/heads/main'runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Deploy to Herokuuses: akhileshns/heroku-deploy@v3.12.12with:heroku_api_key: ${{ secrets.HEROKU_API_KEY }}heroku_app_name: ${{ secrets.HEROKU_APP_NAME }}heroku_email: ${{ secrets.HEROKU_EMAIL }}

这个工作流实现了:

  • 在多个Node.js版本上进行构建和测试
  • 只在main分支上进行部署
  • 使用Heroku进行部署,通过GitHub Secrets存储敏感信息

Python应用

以下是一个Python应用的CI/CD工作流示例:

name: Python CI/CDon:push:branches: [ main ]pull_request:branches: [ main ]jobs:test:runs-on: ubuntu-lateststrategy:matrix:python-version: [3.8, 3.9, 3.10]steps:- uses: actions/checkout@v3- name: Set up Python ${{ matrix.python-version }}uses: actions/setup-python@v4with:python-version: ${{ matrix.python-version }}cache: 'pip'- name: Install dependenciesrun: |python -m pip install --upgrade pippip install flake8 pytestif [ -f requirements.txt ]; then pip install -r requirements.txt; fi- name: Lint with flake8run: |flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics- name: Test with pytestrun: |pytestdeploy:needs: testif: github.ref == 'refs/heads/main'runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Set up Pythonuses: actions/setup-python@v4with:python-version: '3.10'- name: Install dependenciesrun: |python -m pip install --upgrade pippip install build- name: Build packagerun: python -m build- name: Publish to PyPIuses: pypa/gh-action-pypi-publish@release/v1with:user: __token__password: ${{ secrets.PYPI_API_TOKEN }}

这个工作流实现了:

  • 在多个Python版本上进行测试
  • 使用flake8进行代码质量检查
  • 使用pytest运行测试
  • 构建Python包并发布到PyPI

Docker容器构建与部署

以下是一个Docker应用的CI/CD工作流示例:

name: Docker CI/CDon:push:branches: [ main ]tags: [ 'v*.*.*' ]pull_request:branches: [ main ]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Set up Docker Buildxuses: docker/setup-buildx-action@v2- name: Login to DockerHubif: github.event_name != 'pull_request'uses: docker/login-action@v2with:username: ${{ secrets.DOCKERHUB_USERNAME }}password: ${{ secrets.DOCKERHUB_TOKEN }}- name: Extract metadataid: metauses: docker/metadata-action@v4with:images: username/app-nametags: |type=semver,pattern={{version}}type=ref,event=branchtype=sha- name: Build and pushuses: docker/build-push-action@v3with:context: .push: ${{ github.event_name != 'pull_request' }}tags: ${{ steps.meta.outputs.tags }}labels: ${{ steps.meta.outputs.labels }}cache-from: type=ghacache-to: type=gha,mode=maxdeploy:needs: buildif: startsWith(github.ref, 'refs/tags/')runs-on: ubuntu-lateststeps:- name: Deploy to productionuses: appleboy/ssh-action@masterwith:host: ${{ secrets.SERVER_HOST }}username: ${{ secrets.SERVER_USER }}key: ${{ secrets.SSH_PRIVATE_KEY }}script: |docker pull username/app-name:${{ github.ref_name }}docker-compose up -d

这个工作流实现了:

  • 构建Docker镜像并推送到DockerHub
  • 使用标签自动版本化镜像
  • 通过SSH部署到生产服务器

最佳实践

使用GitHub Actions时,以下最佳实践可以帮助你更有效地实现CI/CD:

  1. 使用矩阵构建:在多个环境中测试应用
  2. 缓存依赖:使用actions/cache加速工作流
  3. 使用环境变量和密钥:通过GitHub Secrets安全存储敏感信息
  4. 分解工作流:将复杂工作流拆分为多个小型工作流
  5. 使用依赖作业:通过needs关键字确保作业按正确顺序执行
  6. 使用条件执行:只在特定条件下运行某些步骤
  7. 使用社区Actions:利用现有的Actions而不是从头开始
  8. 设置超时:为长时间运行的作业设置超时,避免资源浪费
  9. 使用工作流可视化工具:利用GitHub提供的可视化工具分析工作流

常见问题与解决方案

1. 工作流执行时间过长

解决方案:

  • 使用缓存减少依赖安装时间
  • 只运行必要的测试
  • 使用矩阵构建时限制组合数量
# 使用缓存示例
- name: Cache node modulesuses: actions/cache@v3with:path: ~/.npmkey: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}restore-keys: |${{ runner.os }}-node-

2. 敏感信息泄露

解决方案:

  • 使用GitHub Secrets存储敏感信息
  • 避免在日志中打印敏感信息
  • 使用环境文件传递敏感值
# 使用环境文件示例
- name: Set environment variablesrun: |echo "API_URL=${{ secrets.API_URL }}" >> $GITHUB_ENV

3. 工作流失败难以调试

解决方案:

  • 使用详细的步骤名称
  • 添加调试信息
  • 使用actions/upload-artifact上传日志和构建产物
# 上传构建产物示例
- name: Upload build artifactsuses: actions/upload-artifact@v3with:name: build-artifactspath: dist/

总结

GitHub Actions为开发者提供了一个强大且灵活的CI/CD解决方案,它与GitHub深度集成,使得自动化软件开发工作流变得简单高效。通过本文介绍的基础知识、实战案例和最佳实践,你应该能够为自己的项目配置适合的CI/CD流程。

随着项目的发展,你可以不断优化和扩展工作流,添加更多自动化步骤,如代码质量检查、安全扫描、自动发布等,进一步提高开发效率和软件质量。

GitHub Actions的生态系统也在不断发展,新的功能和社区Actions不断涌现,持续关注GitHub Actions的更新和社区最佳实践,将帮助你更好地利用这一工具。


参考资源:

  • GitHub Actions 官方文档
  • GitHub Actions 市场
  • GitHub Actions 社区论坛

相关文章:

用GitHub Actions实现CI/CD

目录 简介GitHub Actions基础工作流配置文件实战案例 Node.js应用Python应用Docker容器构建与部署 最佳实践常见问题与解决方案总结 简介 持续集成/持续部署(CI/CD)已成为现代软件开发不可或缺的一部分。它通过自动化构建、测试和部署过程,帮助开发团队更快、更可…...

使用AI工具打造专业级PPT的完整方案,结合 DeepSeek构思、Kimi生成内容、Napkin优化设计 等工具,分阶段详细说明流程及工具使用

以下是使用AI工具打造专业级PPT的完整方案,结合 DeepSeek构思、Kimi生成内容、Napkin优化设计 等工具,分阶段详细说明流程及工具使用: 一、全流程阶段划分 阶段目标核心工具1. 构思阶段明确主题、结构、核心信息,生成大纲与逻辑…...

【数据结构】线性表( List)和 顺序表(ArrayList)

【数据结构】线性表( List)和 顺序表(ArrayList) 一、线性表 List二、List 接口的常用方法三、ArrayList与顺序表3.1 引入顺序表的原因?3.2 ArrayList 的使用3.2.1 ArrayList 的创建3.2.2 添加元素:list.ad…...

嵌入式开发--STM32软件和硬件CRC的使用--续篇

本文是《嵌入式开发–STM32软件和硬件CRC的使用》的续篇,又踩到一个坑,发出来让大家避一下坑。 按照G0系列的设置,得出错误的结果 前文对应的是STM32G0系列,今天在用STM32G4系列时,按照前文的设置,用硬件…...

探索鸡养殖虚拟仿真实验:科技赋能养殖新体验

在科技飞速发展的今天,虚拟仿真技术逐渐渗透到各个领域,就连传统的养殖业也迎来了数字化的变革。最近,我参与了一场别开生面的鸡养殖虚拟仿真实验,不仅学到了专业的养殖知识,还收获了前所未有的沉浸式体验。现在&#…...

知识图谱中医知识问答系统|养生医案综合可视化系|推荐算法|vue+flask+neo4j+mysql

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站,有好处! ✅编号 :F040 pro ✅技术架构: vueflaskmysqlneo4jltpac ✅实现功能:实现基于中医药材和药方的知识图谱可视化,在…...

【AI】——结合Ollama、Open WebUI和Docker本地部署可视化AI大语言模型

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…...

AI 模型高效化:推理加速与训练优化的技术原理与理论解析

AI 模型高效化:推理加速与训练优化的技术原理与理论解析 文章目录 AI 模型高效化:推理加速与训练优化的技术原理与理论解析一、推理加速:让模型跑得更快的“程序员魔法”(一)动态结构自适应推理:像人类一样…...

python学习—详解word邮件合并

系列文章目录 python学习—合并TXT文本文件 python学习—统计嵌套文件夹内的文件数量并建立索引表格 python学习—查找指定目录下的指定类型文件 python学习—年会不能停,游戏抽签抽奖 python学习—循环语句-控制流 python学习—合并多个Excel工作簿表格文件 pytho…...

vscode与vim+cscope+tags热键冲突

[ctrl w] s 对于vim时水平分割窗口热键 对vscode, [ctrl w]时关闭当前窗口热键 在vscode中如下配置可以发送热键到shell, 跳过vscode:...

直播系统源码开发:解锁幸运礼物功能的商业魔力与运营策略

在当今如火如荼的直播经济中,幸运礼物功能已成为平台提升用户黏性、刺激消费的"黄金按钮"。山东布谷科技将深入剖析幸运礼物功能的技术逻辑与商业价值,并为运营者提供一套完整的策略框架,帮助您在激烈的直播赛道中脱颖而出。 一、…...

毕业设计效率提升工具与避坑指南

本文为毕业设计后的经验记录,包含写作过程中的一些实用工具和注意事项。 一、📌实验及写作实用技巧二、🚀 效率提升工具三、📊论文完成后的格式检查 本文为毕业设计后的经验记录,包含写作过程中的一些实用工具和注意事…...

Python网络爬虫设计(二)

目录 六、BeautifulSoup库 1、常见的提取分析网页内容的三种方式 (1)正则表达式 (2)BeautifulSoup库 (3)pyppeteer库中的元素查找函数 2、HTML中的tag 3、BeautifulSoup库的安装和导入 4、Beautiful…...

滑动窗口209. 长度最小的子数组

1.题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入&…...

如何避免被目标网站识别为爬虫?

文章目录 前言1. 合理设置请求头2. 控制请求频率3. 模拟真实用户行为4. 使用代理 IP5. 处理验证码6. 会话管理 前言 为避免被目标网站识别为爬虫,可从请求头设置、请求频率控制、模拟用户行为、使用代理、处理验证码和会话管理等多个方面采取措施,以下是…...

Dell戴尔服务器 PowerEdge R750xs + window server2012r2 || 2016

因要求需要给新服务器装个 win server2012或者2016系统 XXX使用U盘制作PE系统U盘安装系统不行,适合普通win8,win10,win11U盘制作PE系统U盘安装win10系统教程U盘制作PE系统U盘安装win10系统教程https://mp.weixin.qq.com/s/t0W8aNJaHPAU8T78nh…...

如何通过数据分析提升软件开发项目的成功率?

引言 在软件开发中,项目延期、超预算、需求反复变更等问题屡见不鲜。数据分析作为项目管理的重要工具,正在被越来越多的企业用于提升项目成功率。通过科学利用项目数据,团队可以做出更准确的决策,避免重复踩坑,从而大幅…...

模型的RAG

RAG 什么是RAG 当岳不群相当武林的盟主时候,你的给他一个葵花宝典(秘籍RAG) RAG的原理 建立索引: 首先要清洗和提取原始数据,将 PDF、Docx等不同格式的文件解析为纯文本数据 然后将文本数据分割成更小的片段(chunk&#xff09…...

基于多模态双路TCN-SE-YOLO的小目标检测

首先声明:该思路在小目标检测领域尚未有成果发表,感兴趣的小伙伴可以借鉴! 一、引言 1.1 研究背景 小目标检测在交通监控(车牌识别)、工业检测(PCB缺陷)及农业(病虫害斑点)等领域具有重要应用价值传统单模态检测方法在复杂场景下的漏检率高达40%以上(VisDrone 2021…...

idea maven 命令后控制台乱码

首先在idea中查看maven的编码方式 执行mvn -v命令 查看编码语言是GBK C:\Users\13488>mvn -v Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: D:\maven\apache-maven-3.6.3\bin\.. Java version: 1.8.0_202, vendor: Oracle Corporation, runt…...

在Vmware15(虚拟机免费) 中安装纯净win10详细过程

一、软件备选 1. VMware15.5.1 网盘下载地址 链接: https://pan.baidu.com/s/1y6GLJ2MG-1tomWblt3otsg?pwdim8e 提取码: im8e 2. windows镜像下载 去官网下载ios包 链接:https://www.microsoft.com/zh-cn/software-download/windows10 二、在VMware15.5.1下安装w…...

RISC-V 与 OpenHarmony 的结合意义与应用建议

RISC-V 与 OpenHarmony 的结合意义与应用建议 一、结合的意义 (一)硬件与软件的协同创新 RISC-V 作为硬件层的开源指令集架构,为 OpenHarmony 提供了强大的硬件支持。这种支持不仅体现在硬件性能的提升上,还为 OpenHarmony 的分…...

让SQL飞起来:搭建企业AI应用的SQL性能优化实战

我上一篇文章已经讲解过了如何使用公开的AI模型来优化SQL.但这个优化方法存在一定的局限性.因为公开的AI模型并不了解你的数据表结构是什么从而导致提供的优化建议不太准确.而sql表结构又是至关重要的安全问题,是不能泄露出去的.所以在此背景下我决定搭建一个自己的AI应用在内网…...

驱动开发硬核特训 · Day 14:深入理解 Power 管理驱动架构与实战应用

在嵌入式系统中,Power(电源)管理驱动既关乎系统稳定性,又直接影响功耗与续航,是系统设计中绕不开的核心模块。今天我们通过理论实战的形式,一次性讲清楚: Linux 中电源管理驱动的核心框架Regul…...

备份思科路由器设备文件实例

实例需求: (1)备份路由器的配置文件startup-config和映像文件 (2)备份交换机的配置文件startup-config和映像文件 注:PC3为TFTP服务器 结构示意图: 实例配置一: 备份路由器的配置文件startup-config和映像文件 步骤: 在PC3上打开tftp服务。确保PC3可以ping通11.1.1.…...

游戏引擎学习第231天

设定当天的主题 我们现在到了一个很少出现在直播中的阶段,但今天是那种需要解释计算机科学基础概念的日子。因此,今天我们将讨论这个内容,今天的重点是“大O表示法”(Order Notation),我将用黑板来解释这些…...

PclSharp ——pcl的c#nuget包

简介: NuGet Gallery | PclSharp 1.8.1.20180820-beta07 下载.NET Framework 4.5.2 Developer Pack: 下载 .NET Framework 4.5.2 Developer Pack Offline Installer 离线安装nupkg: nupkg是visual studio 的NuGet Package的一个包文件 安…...

Java性能剖析工具箱

1. 基础知识 1.1 Java性能调优概述 1.1.1 性能调优的重要性 性能调优是提升系统效率、降低成本和增强用户体验的关键步骤。通过优化,可以减少响应时间、降低资源消耗并提高系统的稳定性和可扩展性。 1.1.2 性能问题的常见表现 高CPU使用率:可能由热点方法或线程阻塞引起。…...

信息学奥赛一本通 1622:Goldbach’s Conjecture | 洛谷 UVA543 Goldbach‘s Conjecture

【题目链接】 ybt 1622:Goldbach’s Conjecture 洛谷 UVA543 Goldbach’s Conjecture 【题目考点】 1. 筛法求质数表 埃筛线性筛(欧拉筛) 知识点讲解见信息学奥赛一本通 2040:【例5.7】筛选法找质数 【解题思路】 首先使用埃…...

408数据结构绪论刷题001

答案:D 解析: • A选项:数据元素是组成数据对象的基本单位 ,它只是数据的基本个体,不能完整定义数据结构,所以A选项错误。 • B选项:数据对象是性质相同的数据元素的集合,仅仅描述…...

RNN - 语言模型

语言模型 给定文本序列 x 1 , … , x T x_1, \ldots, x_T x1​,…,xT​,语言模型的目标是估计联合概率 p ( x 1 , … , x T ) p(x_1, \ldots, x_T) p(x1​,…,xT​)它的应用包括 做预训练模型(eg BERT,GPT-3)生成本文&#xff…...

前端面试题---GET跟POST的区别(Ajax)

GET 和 POST 是两种 HTTP 请求方式,它们在传输数据的方式和所需空间上有一些重要区别: ✅ 一句话概括: GET 数据放在 URL 中,受限较多;POST 数据放在请求体中,空间更大更安全。 📦 1. 所需空间…...

【MCP】第一篇:MCP协议深度解析——大模型时代的“神经连接层“架构揭秘

【MCP】第一篇:MCP协议深度解析——大模型时代的"神经连接层"架构揭秘 一、什么是MCP?二、为什么需要MCP?三、MCP的架构四、MCP与AI交互的原理4.1 ReAct(Reasoning Acting)模式4.2 Function Calling 模式 五…...

新生宿舍管理系统

收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…...

@Autowird 注解与存在多个相同类型对象的解方案

现有一个 Student 类,里面有两个属性,分别为 name 和 id;有一个 StuService 类,里面有两个方法,返回值均为类型为 Student 的对象;还有一个 StuController 类,里面有一个 Student 类型的属性&am…...

MQTT客户端核心架构解析:clients.h源码深度解读

MQTT客户端核心架构解析:clients.h源码深度解读 一、头文件概览与设计哲学 clients.h作为MQTT客户端核心数据结构定义文件,体现了以下设计原则: 分层架构:网络层/协议层/业务层解耦状态管理:通过状态机实现复杂协议…...

音视频学习 - ffmpeg 编译与调试

编译 环境 macOS Ventrua 13.4 ffmpeg 7.7.1 Visual Studio Code Version: 1.99.0 (Universal) 操作 FFmpeg 下载源码 $ cd ffmpeg-x.y.z $ ./configure nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.If you think configure made a mistake…...

解读《人工智能指数报告 2025》:洞察 AI 发展新态势

美国斯坦福大学 “以人为本人工智能研究院”(HAI)近日发布的第八版《人工智能指数报告》(AI Index Report 2025)备受全球瞩目。自 2017 年首次发布以来,该报告一直为政策制定者、研究人员、企业高管和公众提供准确、严…...

【嵌入式系统设计师(软考中级)】第一章:计算机系统基础知识(中)

文章目录 3 算术运算和逻辑运算3.1 二进制数运算方法3.2 逻辑代数的基本运算与逻辑表达式化简 4. 计算机组成及工作原理4.1 CPU的组成与工作原理4.1.1 运算器(数据加工中心)4.1.2 控制器(指令指挥中心)4.1.3 计算机指令4.1.4 寻址…...

实时数据处理的革命:Apache Flink 在大数据流处理中的应用

实时数据处理的革命:Apache Flink 在大数据流处理中的应用 在大数据时代,数据的价值不仅仅体现在存储和分析,更重要的是实时处理。传统的批处理模式往往无法满足现代业务对数据的实时性需求,而流式计算技术的兴起,让数据处理从“静态分析”变成了“动态决策”。其中,Apa…...

HttpSessionListener 的用法笔记250417

HttpSessionListener 的用法笔记250417 以下是关于 HttpSessionListener 的用法详解,涵盖核心方法、实现步骤、典型应用场景及注意事项,帮助您全面掌握会话(Session)生命周期的监听与管理: 1. 核心功能 HttpSessionLi…...

基于html实现的课题随机点名

这是一个用于随机点名系统的HTML网页,具有中国古典风格的设计。 下面我将从多个方面详细介绍这个文件: 1. 文件基本信息 文件名:name.html 文件类型:HTML5文档 语言:简体中文(zh-CN) 编码:UTF-8 标题&…...

【KWDB 创作者计划】深度实操体验 KWDB 2.2.0:从安装到实战的全流程解析以及实操体验

一、引言 KWDB 是一款高性能的分布式数据库,支持事务、强一致性和水平扩展。本文将详细介绍如何通过 Docker 快速部署 KWDB 2.2.0,并基于实际操作演示数据库的核心功能,涵盖环境准备、容器运行、数据操作及集群部署等关键环节。 二、Docker…...

ASP.NET Core中SqlSugar基本使用

创建数据模型 public class News{[SugarColumn(IsIdentity true, IsPrimaryKey true)]public int Id { get; set; }//nvarchar带中文比较好[SugarColumn(ColumnDataType "nvarchar(30)")]public string Title { get; set; }[SugarColumn(ColumnDataType "te…...

【软考-系统架构设计师】设计模式三大类型解析

设计模式三大类型深度解析 一、创建型模式(Creational Patterns) 核心目标:解耦对象的创建与使用过程,提供灵活的对象生成机制,降低系统对具体类的依赖。 适用场景:需要动态创建对象、隐藏对象创建细节或…...

正则表达式在爬虫中的应用:匹配 HTML 和 JSON 的技巧

在爬虫开发中,正则表达式是一种强大的工具,可以帮助我们从复杂的文本中提取所需信息。无论是处理 HTML 页面还是 JSON 数据,正则表达式都能发挥重要作用。本文将深入探讨正则表达式在爬虫中的应用,包括如何匹配 HTML 和 JSON 数据…...

LaTeX文章写法

文章目录 模板1、无序列表格式2、对齐2.1、section对齐 模板 文章模板 %\documentclass[a4paper,12pt]{article} % 选择 A4 纸张和 12pt 字体大小 \documentclass[12pt,a4paper]{ctexart}% 加载必要的宏包 \usepackage{fontspec} % 支持字体设置 \usepackage{xeCJK} …...

电力变压器油的<油质气象色谱>指标分析

目录 1.变压器油质化验指标分析 2.变压器油质化验原理及流程 变压器油质气象色谱(气相色谱,Gas Chromatography, GC)检测是一种通过分离和定量分析油中溶解气体成分的技术,用于诊断变压器内部故障。其核心原理基于不同气体在流动…...

赋能能源 | 智慧数据,构建更高效智能的储能管理系统

行业背景 随着新能源产业的快速发展,大规模储能系统在电力调峰、调频及可再生能源消纳等领域的重要性日益凸显。 储能电站作为核心基础设施,其能量管理系统(EMS)需要处理海量实时数据,包括电池状态、功率变化、环境监…...

AWS中国区服务部署与ICP备案全流程指南:从0到1实现合规上线

导语: 在中国大陆地区使用AWS服务,不仅需要了解AWS的基本操作,还需要熟悉中国特有的法规要求。本文将为您提供一个全面的指南,涵盖AWS中国区账号创建、服务部署、ICP备案申请,以及合规运营的全过程。无论您是AWS新手还是经验丰富的开发者,这篇文章都将为您在AWS中国区的journey…...