Github Actions工作流入门

主要参考资料:

GitHub Actions 工作流编写指南: https://blog.csdn.net/i89211/article/details/144881603

目录

简介

GitHub Actions的核心在于它允许你在GitHub仓库中定义自定义的工作流程,这些工作流程由一系列动作(actions)组成,它们可以在特定事件发生时自动触发。

  • 事件触发器(Event Triggers):

    当你指定某些事件(如push、pull_request等),GitHub会监听这些事件并在其发生时启动相应的工作流。

  • 运行器(Runners):

    GitHub提供托管的虚拟机作为运行器,你可以选择不同的操作系统(如Ubuntu、Windows或macOS)。运行器负责执行你的工作流中的各个步骤。

  • 动作(Actions):

    Actions是构成工作流的基本单元,可以是一个简单的shell命令,也可以是一个复杂的Docker容器。GitHub Marketplace提供了大量预构建的动作供用户直接使用或作为参考。

  • 矩阵(Matrix):

    对于需要跨平台或跨版本测试的情况,可以使用矩阵策略来同时在多个环境中运行相同的工作流。

通过这种机制,GitHub Actions使得开发者能够轻松地实现CI/CD管道,提高软件开发效率,减少手动操作带来的错误风险。此外,由于其与GitHub紧密集成,因此特别适合于基于GitHub进行项目管理的团队。

工作流文件

什么是工作流文件?

  • 文件必须保存在仓库的 .github/workflows 目录中
  • 文件格式为 YAML,后缀为 .yml 或 .yaml
  • 一个仓库可以有多个工作流文件

YAML 语法基础

yaml 复制代码
key: value          # 基本的键值对
parent:             # 缩进表示层级关系
  child: value
array:              # 列表使用 - 表示
  - item1
  - item2

工作流文件结构:

名称定义(name)

yaml 复制代码
name: My Workflow   # 工作流的名称,会显示在 Actions 页面

触发条件(on)

yaml 复制代码
on:
  push:                    # 推送时触发
    branches:
      - main              # 只在 main 分支触发
  pull_request:           # PR 时触发
    branches: 
      - main
  schedule:               # 定时触发
    - cron: '0 0 * * *'   # 每天零点触发

常用的 cron 表达式:

yaml 复制代码
* * * * * 分别代表:分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期几(0-6)
0 0 * * * = 每天午夜
0 */4 * * * = 每4小时
0 9 * * 1-5 = 工作日早上9点

工作定义(jobs)

yaml 复制代码
jobs:
  build:                  # 工作ID
    runs-on: ubuntu-latest    # 运行环境
    
    steps:                # 步骤定义
    - name: Step 1        # 步骤名称
      uses: actions/checkout@v2    # 使用现成的 action
      
    - name: Step 2
      run: echo "Hello"   # 运行命令

常用环境变量

yaml 复制代码
env:
  GLOBAL_VAR: value      # 全局环境变量

jobs:
  job1:
    env:
      JOB_VAR: value     # 作业级环境变量
    steps:
      - env:
          STEP_VAR: value  # 步骤级环境变量

常用 Actions

检出代码

yaml 复制代码
- uses: actions/checkout@v2

设置环境

yaml 复制代码
- uses: actions/setup-node@v2
  with:
    node-version: '14'

- uses: actions/setup-python@v2
  with:
    python-version: '3.8'

缓存依赖

yaml 复制代码
- uses: actions/cache@v2
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
相关推荐
0xR3lativ1ty12 小时前
每日GitHub trending精选
github
带娃的IT创业者13 小时前
GitHub 热门项目解析:当 AI 编码助手遭遇“上下文爆炸”
人工智能·github·代码优化·ai编程助手·上下文窗口·上下文压缩
白鲸开源16 小时前
Apache SeaTunnel 提交一个任务都经过了什么?
大数据·开源·github
dong_junshuai16 小时前
每天一个开源项目#60 TencentDB Agent Memory:1.4万星的团队记忆中枢
github·腾讯
dong_junshuai16 小时前
每天一个开源项目#61 3.9K Stars:Cloudflare 给 Agent 一台持久云电脑
程序员·github
橙序员小站16 小时前
我把公众号生产链做成了全本地的 AI 工作台 🛠️
程序员·github
笨鸟先飞,勤能补拙17 小时前
AI 安全的下一个 5 年:从 Agent 到 AGI 的攻防博弈
人工智能·python·安全·web安全·网络安全·github·agi
Bryce学亮18 小时前
FileLine,基于 Qt 6 + QML 构建的跨平台文件传输与即时通讯工具
数据库·c++·人工智能·python·qt·github
VIP_CQCRE21 小时前
用 GitHub 做开发者营销:把 Ace Data Cloud 的 API 能力变成可运行项目
ai·github·api·开发者工具·acedatacloud
凌云拓界21 小时前
NodeVerdict:Node.js 原生诊断数据可视化工具
信息可视化·架构·typescript·开源·node.js·github·bug