目录

Github action入门玩法

# 介绍

GitHub Actions 使用 GitHub 官方提供的虚拟机(ubuntu、windows、macOS),根据你的仓库脚本配置,在指定操作系统虚拟机里进行你编写的操作执行脚本,实现自动化。

官方文档 GitHub Actions (opens new window)

# 定价

Github 对于public仓库提供完全免费无限制的服务,对于private仓库的free订阅用户,提供每月2000分钟的免费使用时间,超出后按需付费。

参考文档:

公共仓库可以使用的虚拟机配置

私有仓库可以使用的虚拟机配置

私有仓库使用时间上的限制

# 可用镜像

参考文档:

镜像 YAML标签 自带语言环境链接 最新映像发布状态
Ubuntu 24.04 ubuntu-latestubuntu-24.04 ubuntu-24.04 (opens new window) Endpoint Badge
Ubuntu 22.04 ubuntu-22.04 ubuntu-22.04 (opens new window) Endpoint Badge
macOS 15 macos-15-large macOS-15 (opens new window) Endpoint Badge
macOS 15 Arm64 macos-15macos-15-xlarge macOS-15-arm64 (opens new window) Endpoint Badge
macOS 14 macos-latest-largemacos-14-large macOS-14 (opens new window) Endpoint Badge
macOS 14 Arm64 macos-latest/macos-14/macos-latest-xlarge/macos-14-xlarge macOS-14-arm64 (opens new window) Endpoint Badge

Github actions提供的虚拟机会自带一些编程语言环境,可用点击表格里的自带环境查看,例如这里ubuntu22.04提供的自带环境

# 快速开始

了解完以上内容,可以快速入门,尝试Github actions的简单玩法了

参考Github actions【官方快速开始文档】 (opens new window)

需要先在 Github 上新建一个仓库,这里使用一个 public 仓库,配置高、免费且没有时间限制

创建一个 public 仓库,描述、readme选项可选,可以不填、不勾

阅读【官方文档】 (opens new window),需要创建指定目录结构.github/workflows

刚刚创建好的仓库没有勾选readme,所以是这样的,点击创建文件

在目录里输入.github/workflows/test.yml,这会创建两层目录,.githubworkflows,以及一个名为test.yml的文件

写一个需要手动点击执行的工作流,内容如下

name: 使用ubuntu自带python打印hello world

on:
  workflow_dispatch:   # 手动触发

jobs:
  print-hello-world:
    name: 打印hello world
    runs-on: ubuntu-22.04

    steps:
      - name: 打印 Hello World
        run: |
          python3 -c "print('Hello World')"
1
2
3
4
5
6
7
8
9
10
11
12
13
14

填入文件内容后,点击commit changes,提交这个更新到仓库

点击仓库的Actions

可以看到左边已经有了刚刚写入的工作流,可以点击这个工作流,再点击右侧 run workflow 按钮手动触发工作流

很快结束了这个任务

点进去查看具体内容,成功打印了hello world,整个流程只用了3s

# 分析

简单讲讲这个工作流的内容

name: 使用ubuntu自带python打印hello world

on:
  workflow_dispatch:   # 手动触发

jobs:
  print-hello-world:
    name: 打印hello world
    runs-on: ubuntu-22.04

    steps:
      - name: 打印 Hello World
        run: |
          python3 -c "print('Hello World')"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • name:工作流的名称,可以使用中文
  • on:触发工作流的条件,这里是手动触发,还可以是pushfork等等操作
  • jobs:任务名,这个工作流只有一个任务
  • print-hello-world:任务名的id
  • runs-on:指定这个任务运行的环境,这里是ubuntu-22.04
  • steps:任务的具体步骤
  • name:步骤的名称
  • run:具体执行的命令,如果有多行命令,可以使用|符号

可以拿这个工作流执行图自行对照一下

# 工件

在仓库里创建了一个名为hello.py的python文件来打印hello world,在工作流里使用python hello.py,虚拟机找不到这个文件?

python 报错,没有这个文件或文件夹

原因:工作流运行在一个全新的虚拟环境中,默认情况下执行工作流的虚拟机里是没有你仓库文件的,需要使用工件这个工具来拉取你仓库里的文件。

修改yml文件内容,在jobs的steps下添加一个步骤,使用actions/checkout来检出代码,即拉取代码到虚拟机中

name: 使用ubuntu自带python打印hello world

on:
  workflow_dispatch:   # 手动触发

jobs:
  print-hello-world:
    name: 打印hello world
    runs-on: ubuntu-22.04

    steps:
    # 检出仓库代码
      - name: 检出仓库代码
        uses: actions/checkout@v4
    
      - name: 打印 hello world
        run: python3 hello.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

再执行看,就可以成功执行脚本hello.py打印hello world了

这里,工件的作用:工件主要用于在 workflow 执行过程中保存和共享文件

其他工件:

  • actions/download-artifact@v4
  • actions/upload-artifact@v4

例如,在你的项目里,存在创建文件的操作,文件需要在工作流结束后进行保存,那你可以使用upload上传工件,使用上传工件处理文件,action会保存一段时间。如果你的工作流存在多个job,需要跨job使用文件时,可以使用download工件下载前面上传保存的文件。

一个常见的场景:其他师傅直接使用 github action编译各个平台的可执行文件,使用upload-artifact上传到github,发布到release,供其他人下载使用。

最后一次更新于: 2025/08/18, 01:35:12