(五)学习、实践、理解 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/...
相关推荐
李白你好11 分钟前
Auto_CVE - 自动化漏洞挖掘系统
运维·自动化
触想工业平板电脑一体机1 小时前
【触想智能】工业一体机在金融领域的应用优势和具体注意事项
运维·人工智能·安全·金融·机器人·自动化
Arenaschi4 小时前
Android
android·linux·运维·笔记·其他·docker
敲上瘾4 小时前
Docker多容器编排:Compose 实战教程
linux·运维·docker·容器·架构
阿里云云原生6 小时前
探展打卡 Serverless,2025 云栖大会来了
云原生·serverless
杨杨杨大侠6 小时前
探索 Event 框架实战指南:微服务系统中的事件驱动通信:
java·spring boot·微服务·云原生·架构·系统架构
yes_is_ok8 小时前
自动化单mysql多实例库的全量迁移脚本
运维·mysql·自动化
AKAMAI10 小时前
部署Linode Kubernetes引擎企业版的三种方式
人工智能·云原生·云计算
Sadsvit10 小时前
HAProxy 完整指南:简介、负载均衡原理与安装配置
linux·运维·服务器·负载均衡
xx.ii10 小时前
52.haproxy负载均衡
运维·负载均衡