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

使用 GitHub 可重用工作流和 GitHub Actions 简化 DevOps

在当今的 DevOps 环境中,自动化是开发团队能够更快地交付功能并维护高质量代码库的关键。这就是像 GitHub Actions 这样的工具变得不可或缺的地方,因为它能够直接在存储库中自动化、自定义和执行 GitHub 工作流程。

当然,随着项目的规模和存储库数量的增加,在所有项目之间保持一致和高效的工作流程成为一项重大挑战。这就是 GitHub 可重用工作流的用武之地,它改变了我们处理 CI/CD pipline 的方式。

可重用的工作流程提供了一种跨多个项目轻松优化、标准化和扩展我们的流程的方法。通过将通用工作流封装到可重用的模板中,我们可以减少冗余,最大限度地减少错误,并确保整个组织都遵循最佳实践。

这篇博文将探讨 GitHub 可重用工作流、它们的优势,以及如何构建它们并将其集成到开发流程中。无论是管理少量存储库还是监督大量项目,学习在 GitHub Actions 中创建可重用的工作流程都可以改变团队的生产力和代码质量。

了解 GitHub 可重用工作流

GitHub 可重用工作流是 YAML 定义的工作流,可以在多个存储库之间共享和调用。它们将一组作业和步骤(例如测试、构建或部署)封装到一个可重用的文件中。这种方法允许团队通过在不同项目中引用相同的工作流程来保持一致性并减少重复。

为什么要使用可重用的工作流程?

在多个存储库具有相似 CI/CD 需求的环境中,GitHub Actions 可重用工作流消除了重复工作流代码的冗余。通过定义一次工作流程并在其他位置引用它,更新和更改会自动传播到所有依赖存储库。

这减少了重复性任务并确保了统一的方法,这对于旨在在众多存储库中实施一致标准的组织尤其有价值。

GitHub 可重用工作流的工作原理是什么?

可重用工作流利用 workflow_call 事件,允许一个 GitHub 工作流触发另一个 GitHub 工作流。此机制使工作流能够接受输入并提供输出,其方式与可调用函数相同。与执行单个任务的独立操作不同,可重用工作流可以包含整个pipline 并与 GitHub 的 YAML 配置无缝集成,从而提供灵活的模块化工作流程管理方法。

可重用工作流的主要优势

使用 GitHub Actions 可重用工作流带来了一些关键优势,可增强 CI/CD pipline。

效率

它们消除了跨项目重复 GitHub 工作流的需要,从而节省了时间并减少了冗余。通过标准化测试和部署等任务,团队可以更专注于开发,而不是重复配置。

改进维护

集中工作流逻辑可简化更新和错误修复。对 GitHub 可重用工作流所做的更改会自动应用于所有相关项目,从而确保一致性并减少维护所需的工作量。

可扩展性和灵活性

GitHub 中的可重用工作流允许针对特定项目需求进行自定义,同时保持一致的基本结构,从而支持可扩展性。这种灵活性使得在添加新项目时可以轻松采用标准化工作流程。

增强的协作

一致的工作流程有助于更好的团队协作并简化入职流程。它们有效地缩短了新团队成员的学习曲线,帮助他们更有效地融入项目。

可重用工作流的限制和注意事项

虽然 GitHub 可重用工作流提供了显著的好处,但它们也有一些限制需要考虑。

配置复杂性

为不同的环境配置可重用的工作流程可能很复杂。处理环境变量和密钥的限制需要仔细规划,以确保工作流在各种项目中正常运行。

依赖项管理

管理跨 GitHub 工作流的依赖项至关重要,尤其是在复杂的设置中。如果没有适当的策略,可能会出现冲突,从而导致执行失败。实施有效的依赖关系解析对于顺利的工作流操作至关重要。

版本控制挑战

保持稳定性需要对可重用工作流进行适当的版本控制。否则,更新可能会无意中中断依赖的工作流程。特定标签或提交哈希有助于控制使用的版本,从而确保可预测性和稳定性。

在 GitHub Actions 中构建可重用的工作流程:分步指南

现在,我们来演练如何在 GitHub Actions 中创建可重用的工作流程。

创建基本工作流程

您首先需要在仓库中创建标准 GitHub 工作流程。因此,前往 .github/workflows/ 目录并创建一个名为 ci-pipeline.yml 的新 YAML 文件:

name: CI Pipelineon:push:branches: [ main ]jobs:build:runs-on: ubuntu-lateststeps:– name: Checkout codeuses: actions/checkout@v3– name: Set up Node.jsuses: actions/setup-node@v3with:node-version:14’– name: Install dependenciesrun: npm install– name: Run testsrun: npm test

此基本工作流程在每次推送到主分支时运行,执行代码签出、设置 Node.js、安装依赖项和运行测试。

添加环境变量和 secret

您可以添加环境变量和密钥,使工作流程更加动态。环境变量在 env 部分中定义,而 secret 安全地存储在存储库或组织设置中:

env:NODE_ENV: productionjobs:build:steps:– name: Deployenv:API_KEY: ${{ secrets.API_KEY }}run: npm run deploy

在此代码段中,Node.js 应用程序的当前环境是 production,而 API 密钥将从存储库的密钥中检索。请记住,密钥不会暴露在日志或输出中,从而确保敏感数据保持安全。

将标准工作流程转换为可重用的工作流程

要将工作流程转换为 GitHub Action 可重用工作流程,请修改 on 部分以使用 workflow_call 并定义工作流程所需的任何输入。

name: CI Pipelineon:workflow_call:inputs:node-version:description: ‘Node.js version’required: truetype: stringrun-tests:description: ‘Flag to run tests’required: falsetype: booleandefault: truejobs:build:runs-on: ubuntu-lateststeps:– name: Checkout codeuses: actions/checkout@v3– name: Set up Node.jsuses: actions/setup-node@v3with:node-version: ${{ inputs[‘node-version’] }}– name: Install dependenciesrun: npm install– name: Run testsif: ${{ inputs[‘run-tests’] }}run: npm test

通过引入输入,您可以启用调用此可重用工作流的任何工作流,以轻松定制其操作。在此示例中,node-version 和 run-tests 是控制Node.js 版本以及是否应运行测试的输入。

使用 workflow_call 实现可重用性

在 call-workflow 部分中,您将使用 uses 关键字指定可重用工作流并提供其所需的输入。通过这样做,您可以触发可重用工作流以使用您选择的参数运行,从而有效地根据当前项目的需要定制其执行:

name:使用可重用工作流

on:push:branches: [ main ]jobs:call-workflow:uses: your-org/your-repo/.github/workflows/ci-pipeline.yml@v1with:node-version:16’run-tests: false

在这里,我们将 node-version 指定为 16 并将 run-tests 设置为 false,以说明如何根据项目的当前优先级调整工作流的环境和行为,无论是更新运行时还是暂时跳过测试以加速反馈。

测试和验证可重用工作流

在多个项目中推出可重用工作流之前,必须对其进行全面测试。因此,在创建测试存储库以使用各种输入和场景调用工作流后,请验证:

  • 输入得到正确处理
  • 步骤按预期执行
  • 密钥和环境变量已正确访问
  • 边缘情况和错误条件得到妥善管理

此外,请考虑为可重用工作流实施自动化测试。虽然测试 GitHub 工作流可能具有挑战性,但您可以使用 act 等工具在本地运行工作流,或设置 CI pipline 来验证对工作流的更改。

投入时间进行测试可确保可重用工作流程稳健可靠,从而降低其他项目采用它们时出现问题的可能性。

比较:可重用工作流、自定义操作与复合操作

了解可重用工作流、自定义操作和复合操作之间的区别将有助于您选择适合您需求的工具。

在这里插入图片描述

使用 Incredibuild 简化 GitHub 可重用工作流程

Incredibuild 是一个开发加速平台,它通过在多台机器(本地或云端)分配任务来加快开发流程。它通过并行执行和分布式构建来增强 DevOps 流程,从而显著缩短构建时间。

通过利用整个网络中的空闲 CPU 周期,Incredibuild 将构建机器转变为具有计算能力的私有云。这种加速适用于各种构建工具和编译器,使其成为 CI/CD 工具包的多功能补充。

要将 Incredibuild 与工作流程无缝集成,了解 GitHub Actions 架构的基础知识至关重要。无论您是将 GitLab 与 GitHub 进行比较以满足 CI/CD 需求,还是深入研究特定语言的高级工具,Incredibuild 都能为涉及计算密集型任务的工作流提供卓越的加速。

对于使用 C++ 的开发人员来说,利用 C++ GitHub 工作流可以显著缩短构建时间并提高效率。Incredibuild 在多台机器之间分配任务的能力使其成为 C++ 构建的游戏规则改变者,其中较长的编译时间是常见的瓶颈。

通过集成 Incredibuild,您可以实现更快的反馈循环和更好的资源利用率,使团队能够更智能地工作并更快地交付结果。

将 Incredibuild 与可重用工作流集成

要将 Incredibuild 与 GitHub 可重用工作流集成,请执行以下步骤:

  • 设置 Incredibuild 协调器和代理:安装 Incredibuild 协调器,并在构建计算机上设置 Initiator 和 Helper Agent。
  • 配置自托管运行器: 如果使用自托管运行器,请在这些计算机上安装 Incredibuild,并将它们与 Incredibuild 协调器关联。
  • 修改工作流 YAML:更新工作流 YAML 文件以包含调用 Incredibuild 命令的步骤。例如:
jobs:build:runs-on: self-hostedsteps:– name: Checkout codeuses: actions/checkout@v3– name: Build with Incredibuildrun: ib_console build.sln /build

此配置签出代码并使用 Incredibuild 构建解决方案文件。

将 Incredibuild 与可重用工作流程结合使用的好处

将 Incredibuild 与 GitHub 可重用工作流相结合具有多项优势:

  • 加快构建时间:通过在多个代理之间分配任务,Incredibuild 缩短了构建时间,从而加快了反馈循环。
  • 优化资源利用率:Incredibuild 可有效利用现有基础设施,最大限度地减少空闲时间并最大限度地提高吞吐量。
  • 可扩展性:随着项目的增长,Incredibuild 会随着基础设施而扩展,从而保持性能和可靠性。

Incredibuild 集成可增强构建性能并简化开发流程,使团队能够更快地交付高质量的软件。

结论

GitHub 可重用工作流是一项强大的功能,可以通过提高效率、一致性和协作来显著改进 CI/CD pipline。将通用流程封装到可重用的模板中可以减少冗余,并有助于在所有项目中遵守最佳实践。

当与 Incredibuild 等工具结合使用时,可以进一步增强工作流程,以实现更快的构建和部署。这种集成可最大限度地提高资源利用率并加速反馈循环,使团队能够快速响应不断变化的需求。

立即免费试用 Incredibuild,采用 GitHub Actions 可重用工作流,并改变管理 CI/CD pipline 的方式。

相关文章:

使用 GitHub 可重用工作流和 GitHub Actions 简化 DevOps

在当今的 DevOps 环境中,自动化是开发团队能够更快地交付功能并维护高质量代码库的关键。这就是像 GitHub Actions 这样的工具变得不可或缺的地方,因为它能够直接在存储库中自动化、自定义和执行 GitHub 工作流程。 当然,随着项目的规模和存…...

深入理解MySQL日志机制

目录 1. MySQL日志概述 2. 错误日志(Error Log) 2.1 错误日志的作用 2.2 错误日志的配置 2.3 查看错误日志 3. 二进制日志(Binary Log) 3.1 二进制日志的作用 3.2 二进制日志的配置 3.3 查看二进制日志 3.4 二进制日志的…...

Sql Server 索引性能优化 分析以及分表

定位需优化语句 根据工具 skywking 或者开启慢查询日志 找到 慢sql 的语句根据 执行过程 来 判断 慢的原因 row filter 指标 看查了多少数据 比例多少 type 看下是单表 还是 join联表 比如 执行步骤多 没索引 优化方向 减少执行次数索引 没索引考虑加索引 加索引 尽量选择 i…...

vue使用element-ui自定义样式思路分享【实操】

前言 在使用第三方组件时,有时候组件提供的默认样式不满足我们的实际需求,需要对默认样式进行调整,这就需要用到样式穿透。本篇文章以vue3使用element-ui的Tabs组件,对Tabs组件的添加按钮样式进行客制化为例。 确定需要修改的组…...

2020年全国职业院校技能大赛改革试点赛高职组“云计算”竞赛赛卷第二场次题目:容器云平台部署与运维

2020年全国职业院校技能大赛改革试点赛高职组 “云计算”竞赛赛卷 第二场次题目:容器云平台部署与运维 说明:本任务提供有2台服务器master和node,都安装了centos7.5操作系统,在/opt/centos目录下有CentOS-7-x86_64-DVD-1804系统光盘文件所有文件,在/opt/containerk8s目…...

PowerBI 条形图,解决数据标签在条形内部看不清的问题

比如下面的条形图: 最上面两行,数据标签显示在了条形内部,哪怕设置了值为黑色 字体也会自动切换为白色,如果设计要求条形的颜色是浅色,就会导致数据看不清晰。 解决方法一: 将数据标签位置设置为端外 效果…...

下载与快速上手 NVM:Node.js 版本管理工具

一、准备工作:卸载旧版 Node.js 重要提示:在安装 NVM 前,请先彻底删除已安装的 Node.js,避免路径冲突: 检查安装路径 bash where node常见路径: C:\Program Files\nodejs\C:\Users\用户名\AppData\Local\n…...

网络防火墙(Firewall)、Web防火墙(WAF)、入侵检测系统(IDS)、入侵防御系统(IPS)对比总结

目录 一、Firewall、WAF、IDS、IPS四种设备简介 二、Firewall、WAF、IDS、IPS四种设备的角色定位 三、防火墙(Firewall)与入侵检测系统(IPS)的区别 四、入侵检测系统(IDS)与入侵防御系统(IP…...

Unity | 游戏数据配置

目录 一、ScriptableObject 1.创建ScriptableObject 2.创建asset资源 3.asset资源的读取与保存 二、Excel转JSON 1.Excel格式 2.导表工具 (1)处理A格式Excel (2)处理B格式Excel 三、解析Json文件 1.读取test.json文件 四、相关插件 在游戏开发中,策划…...

IT工具 | node.js 进程管理工具 PM2 大升级!支持 Bun.js

P(rocess)M(anager)2 是一个 node.js 下的进程管理器,内置负载均衡,支持应用自动重启,常用于生产环境运行 node.js 应用,非常好用👍 🌼概述 2025-03-15日,PM2发布最新版本v6.0.5,这…...

VulnHub-Web-Machine-N7通关攻略

一、信息收集 第一步:确定靶机IP为192.168.0.107 第二步:扫描后台及开放端口 第三步:进行敏感目录及文件扫描 http://192.168.0.107/index.html (CODE:200|SIZE:1620) http://192.168.0.107/server-status (CODE:403|SIZ…...

发现一个好用的Vue.js内置组件

目录 一、这个好用的内置组件是什么&#xff1f; 二、这个组件的主要功能 三、怎么使用&#xff1f; 四、使用注意事项 五、我的使用场景 一、这个好用的内置组件是什么&#xff1f; 今天在优化我的平台应用时&#xff0c;发现一个好用的组件标签--<keep-alive>。 …...

论华为 Pura X 折叠屏性能检测

在科技浪潮中&#xff0c;折叠屏手机以其创新形态掀起市场热潮。华为 Pura X 作为华为最新折叠手机&#xff0c;承载前沿科技与精湛工艺&#xff0c;成为行业焦点。它融合先进折叠屏技术与优质材质&#xff0c;致力于打破传统手机使用边界&#xff0c;为用户开启全新体验。但产…...

生成PDF文件:从html2canvas和jsPdf渲染到Puppeteer矢量图

刚刚实现而已&#xff1a;第一次明白&#xff0c;双击或file:///打开html文件&#xff0c;居然和从localhost:3000打开同一个html文件有本质的区别。 字体居然还能以Base64代码嵌入到网页&#xff0c;只是太大太笨。 需要安装node.js&#xff0c;npm安装更多依赖&#xff1a;…...

在 Elasticsearch 中探索基于 NVIDIA 的 GPU 加速向量搜索

作者&#xff1a;来自 Elastic Chris Hegarty 及 Hemant Malik 由 NVIDIA cuVS 提供支持&#xff0c;此次合作旨在为开发者在 Elasticsearch 中的向量搜索提供 GPU 加速。 在 Elastic Engineering 组织内&#xff0c;我们一直致力于优化向量数据库的性能。我们的使命是让 Lucen…...

Junit在测试过程中的使用方式,具体使用在项目测试中的重点说明

JUnit 是一个广泛使用的 Java 单元测试框架,主要用于编写和运行可重复的测试。以下是 JUnit 在项目测试中的使用方式和重点说明: 1. 基本使用 场景:测试一个简单的 Java 类。 示例: import org.junit.Test; import static org.junit.Assert.*;public class CalculatorTe…...

关于CNN,RNN,GAN,GNN,DQN,Transformer,LSTM,DBN你了解多少

以下是神经网络中常见的几种模型的简要介绍&#xff1a; 1. ​CNN (Convolutional Neural Network, 卷积神经网络) ​用途: 主要用于图像处理和计算机视觉任务。​特点: 通过卷积核提取局部特征&#xff0c;具有平移不变性&#xff0c;能够有效处理高维数据&#xff08;如图像…...

asp.net 4.5在医院自助系统中使用DeepSeek帮助医生分析患者报告

环境&#xff1a; asp.net 4.5Visual Studio 2015本地已经部署deepseek-r1:1.5b 涉及技术 ASP.NET MVC框架用于构建Web应用程序。使用HttpWebRequest和HttpWebResponse进行HTTP请求和响应处理。JSON序列化和反序列化用于构造和解析数据。SSE&#xff08;服务器发送事件&#xf…...

HeyGem.ai 全离线数字人生成引擎加入 GitCode:开启本地化 AIGC 创作新时代

在人工智能技术飞速演进的时代&#xff0c;数据隐私与创作自由正成为全球开发者关注的焦点。硅基智能旗下开源项目 HeyGem.ai 近日正式加入 GitCode&#xff0c;以全球首个全离线数字人生成引擎的颠覆性技术&#xff0c;重新定义人工智能生成内容&#xff08;AIGC&#xff09;的…...

密码协议与网络安全——引言

三个基本概念 计算机安全&#xff08;Computer Security&#xff09;&#xff1a;对于一个自动化的信息系统&#xff0c;采取保护措施确保信息系统资源&#xff08;包括硬件、软件、固件、信息、数据和通信&#xff09;的保密性、完整性和可用性。 网络安全&#xff08;Netwo…...

springboot实现调用百度ocr实现身份识别+二要素校验

一、技术选型 OCR服务&#xff1a;推荐使用百度AI 二、实现 1.注册一个服务 百度智能云控制台https://console.bce.baidu.com/ai-engine/ocr/overview/index?_1742309417611 填写完之后可以获取到app-id、apiKey、SecretKey这三个后面文件配置会用到 2、导入依赖 <!-- …...

MATLAB 控制系统设计与仿真 - 28

MATLAB状态空间控制系统分析 - 极点配置 就受控系统的控制律的设计而言,由状态反馈极点配置和输出反馈极点配置。 状态反馈极点配置问题就是:通过状态反馈矩阵K的选取,使闭环系统的极点,即(A-BK)的特征值恰好处于所希望的一组给定闭环极点的位置。 另外,线性定常系统可…...

JetsonNano —— 4、Windows下对JetsonNano板卡烧录刷机Ubuntu20.04版本(官方教程)

介绍 NVIDIA Jetson Nano™ 开发者套件是一款面向创客、学习者和开发人员的小型 AI 计算机。按照这个简短的指南&#xff0c;你就可以开始构建实用的 AI 应用程序、酷炫的 AI 机器人等了。 烧录刷机 1、下载 Jetson Nano开发者套件SD卡映像 解压出.img文件并记下它在计算机上的…...

加速还是安全?CDN与群联云防护的本质差异与适用场景

一、核心功能定位对比 维度传统CDN群联云防护核心目标内容加速&#xff08;降低延迟、提升访问速度&#xff09;安全防护&#xff08;抵御DDoS/CC攻击、隐藏源站&#xff09;技术重心缓存优化、边缘节点分发流量清洗、AI行为分析、加密隧道主要能力静态资源缓存、负载均衡攻击…...

简单理解机器学习中top_k、top_p、temperature三个参数的作用

在机器学习中&#xff0c;top_k、top_p 和 temperature 是用于控制生成模型&#xff08;如语言模型&#xff09;输出质量的参数&#xff0c;尤其在文本生成任务中常见。然而&#xff0c;网上文章很多很全&#xff0c;但大多晦涩难懂&#xff0c;今天我们来用最简单的语言谈谈它…...

Java面试黄金宝典6

1. 什么是 CAS 原理&#xff1a; CAS &#xff08;Compare-And-Swap&#xff09;是一种硬件级别的原子操作指令&#xff0c;在 Java 并发编程中常被用于实现无锁算法。其核心逻辑是&#xff1a;在进行数据更新时&#xff0c;会先将内存位置 V 的值与预期原值 A 进行比较&#x…...

【深度学习新浪潮】AI ISP技术与手机厂商演进历史

本文是关于AI ISP(人工智能图像信号处理器)的技术解析、与传统ISP(图像信号处理器)的区别、近三年研究进展,以及各大手机厂商在该领域演进历史的详细报告。本报告综合多个权威来源的信息,力求全面、深入地呈现相关技术发展脉络与行业动态。 第一部分:AI ISP的定义及与传…...

C语言基础08

内容提要 数组 排序算法&#xff1a;冒泡排序 二维数组 字符数组 数组 冒泡排序 排序思想&#xff08;向前冒泡&#xff09; 一次只排好一个数&#xff0c;针对n个数&#xff0c;最差情况需要n-1次就可以排好 每次排序假定第一个元素是最大或者最小&#xff0c;用第一个…...

基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法

基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法 已经弃用的版本&#xff08;Version 10.3-2021.10&#xff09;&#xff1a;gcc-arm-none-eabi&#xff1a;https://developer.arm.com/downloads/-/gnu-rmArm GNU Toolchain当前版本&#xff1a;https://developer.a…...

1.angular介绍

初級使用视频添加链接描述 angular工具 angular.module(‘名’, [依赖模块]) 模块 angular.bind(*) : 修改this指向 angualr.copy() // a angular.copy(a, b) —a完全覆盖了b,c就是a angular.extend(a, b) a里面集成了b属性 angular.isArray angular.isDate angular.isDefin…...