(五)学习、实践、理解 CI/CD 与 DevOps:GitHub Actions 快速介绍

系列文章:

(一)学习、实践、理解 CI/CD 与 DevOps:起步

(二)学习、实践、理解 CI/CD 与 DevOps:容器化

(三)学习、实践、理解 CI/CD 与 DevOps:声明式 API,Docker Compose 容器编排

(四)学习、实践、理解 CI/CD 与 DevOps:流水线工具 Pipeline


学习 GitHub Actions 中的核心概念基础知识。

概述

GitHub Actions 是一个持续集成和持续交付 (CI/CD) 平台,可自动化构建测试部署流水线。可以创建工作流程来构建和测试每个 pull 请求仓库,或将合并的 pull 请求部署到生产环境。

GitHub Actions 不止是 DevOps,还能让仓库中发生其他事件时运行工作流程。例如

  • 事件触发工作流,以便在仓库中创建新问题时自动添加相应的标签。
  • 定时任务工作流,每天早上6:00拉取指定 url 数据并更新到静态站点。
  • 定时任务工作流,每天8:00执行工作/疫情定位与打卡。

疫情时基于 Github Actions 实现每日自动打卡项目:

由我实现的浙江师范大学自动打卡:

GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行工作流程,或者可在自己的数据中心或云基础架构中自托管。

GitHub Actions 组成部分

为了避免中英翻译造成的歧义,保留使用英文关键词

可以配置一个 GitHub Actions 工作流 workflow,当仓库中发生事件 event(例如打开拉取请求或创建问题)时触发,其中包含一个或多个可以按顺序或并行运行的作业 jobs。每个作业将独立的虚拟机运行器 runner 中或容器内运行,并且包含一个或多个步骤 steps,这些步骤可以运行定义的脚本或动作actions(action 是一个可重复使用的扩展,可以简化工作流程)。

工作流 Workflows

工作流是一个可配置的自动化流程,用于运行一个或多个作业。工作流由签入到仓库的 YAML 文件定义,并在仓库中的事件触发时运行,也可以手动触发或按照定义的计划触发。

工作流在存储库的目录中定义.github/workflows。一个存储库可以有多个工作流,每个工作流可以执行一组不同的任务,例如:

  • 构建和测试拉取请求
  • 每次发布时部署应用程序
  • 每当有新问题出现时添加标签

可在某个工作流中引用另一个工作流,这意味着可扩展、可插拔,可以根据需要引用其他工作流。

GitHub Actions 官方提供了丰富的 Workflows 模板。

官方将 Workflow 分为了5个类别,查看模版或许有所启发:

  • 部署 Deployment
  • 安全 Security
  • 持续集成 Continuous integration
  • 自动化 Automation
  • 页面 Pages

事件 Events

事件 event 是仓库中触发工作流 workflow 运行的特定活动。例如,创建拉取请求、打开问题或将提交推送到仓库时,活动可能源自 GitHub。

此外,也支持发布到 REST API 或手动触发工作流按计划运行。

可用于触发工作流的事件在 on 标签下定义,可同时定义多个,比较常见的事件 event:

push 到 main 分支时

yaml 复制代码
on:
  push:
    branches:
      - main

手动点击

yaml 复制代码
on:
  workflow_dispatch:

基于 cron 表达式的定时任务

yaml 复制代码
on:
  schedule:
    - cron: "1 16 * * *"

作业 Jobs

作业 Job 是工作流中在同一个运行器 runner 上执行的一组步骤 steps。每个步骤是 shell 脚本或动作 action,步骤按顺序执行,并且相互依赖。

由于每个步骤都在同一个运行器上执行,因此可将数据从一个步骤共享到另一个步骤。例如,可先执行一个构建应用程序的步骤,然后再执行一个测试已构建应用程序的步骤。

您可以配置一个作业与其他作业的依赖关系;默认情况下,作业之间没有依赖关系,并且并行运行。当一个作业依赖于另一个作业时,它会等待依赖该作业完成后再运行。还可以使用矩阵多次运行同一项作业,每次运行都有不同的变量组合,例如操作系统或语言版本。

例如,可以为不同的架构配置多个彼此互不依赖的构建作业,以及一个依赖于这些构建作业的打包作业。这些构建作业并行运行,一旦它们成功完成,打包作业就会运行。

动作 Actions

动作 action 是一组预定义的、可重复使用的作业或代码,用于执行工作流程中的特定任务,从而减少重复造轮子。Action 可以执行以下任务:

  • 从 GitHub 拉取 Git 代码仓库
  • 构建环境设置正确的工具链
  • 设置云提供商的身份验证

可以自定义 Action,也可以在 GitHub Marketplace 查找。

运行器 Runners

运行器 Runner 是一种服务器,用于在事件 event 触发时运行工作流 workflow,每个 runner 一次可以运行一个作业。GitHub 提供 Ubuntu Linux、Microsoft Windows 和 macOS 运行器,每个工作流 workflow 运行都在一个全新的、新配置的虚拟机中执行。

一般地,可以选择 Ubuntu、Docker、Nodejs、Maven 等运行器来执行特定的工作流。

GitHub 还提供更大的运行器,可用于更大的配置。此外,如果需要不同的操作系统或特定的硬件配置,还可以自托管。

总结

GitHub Actions 把「事件驱动」与「基础设施即代码」这两件事做到了极致:

  • 事件驱动:仓库里的任何风吹草动(一次 push、一条 issue、甚至一条定时 crontab)都可以触发一段自动化流程,真正做到"代码即流程"。
  • 基础设施即代码:所有编排逻辑都写在.github/workflows/*.yml里,随仓库一起版本管理、一起评审、一起回滚,CI/CD 像写业务代码一样自然。

借助官方的 Linux / Windows / macOS 运行器,以及 Marketplace 上成千上万的现成 Action,我们几乎可以零成本地拼出任何常见场景:

  • 代码一合并就自动跑单测、发版、打镜像、推送到云厂商;
  • 每天 6:00 自动爬数据、生成报表、发邮件;
  • 甚至疫情期间用它帮全校同学打卡也不成问题。

GitHub Actions 让「自动化」不再是运维专属,而成为每个开发者开箱即用的超能力。

关注微信公众号,获取运维资讯

如果此篇文章对你有所帮助,感谢你的点赞收藏,也欢迎在评论区友好交流。

微信搜索关注公众号:持续运维

参考

  1. 了解GitHub Actions,docs.github.com/zh/actions/...
  2. GitHub Actions 的工作流语法,docs.github.com/zh/actions/...
相关推荐
Leinwin7 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382507 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇7 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7597 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣7 小时前
智能体选型实战指南
运维·人工智能
yy55278 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ8 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔10 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密10 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi201510 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑