Github action入门玩法
# 介绍
GitHub Actions 使用 GitHub 官方提供的虚拟机(ubuntu、windows、macOS),根据你的仓库脚本配置,在指定操作系统虚拟机里进行你编写的操作执行脚本,实现自动化。
官方文档 GitHub Actions (opens new window)
# 定价
Github 对于public仓库提供完全免费无限制的服务,对于private仓库的free订阅用户,提供每月2000分钟的免费使用时间,超出后按需付费。
参考文档:
公共仓库可以使用的虚拟机配置
私有仓库可以使用的虚拟机配置
私有仓库使用时间上的限制
# 可用镜像
参考文档:
镜像 | YAML标签 | 自带语言环境链接 | 最新映像发布状态 |
---|---|---|---|
Ubuntu 24.04 | ubuntu-latest 或 ubuntu-24.04 | ubuntu-24.04 (opens new window) | |
Ubuntu 22.04 | ubuntu-22.04 | ubuntu-22.04 (opens new window) | |
macOS 15 | macos-15-large | macOS-15 (opens new window) | |
macOS 15 Arm64 | macos-15 或 macos-15-xlarge | macOS-15-arm64 (opens new window) | |
macOS 14 | macos-latest-large 或 macos-14-large | macOS-14 (opens new window) | |
macOS 14 Arm64 | macos-latest /macos-14 /macos-latest-xlarge /macos-14-xlarge | macOS-14-arm64 (opens new window) |
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
,这会创建两层目录,.github
和workflows
,以及一个名为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')"
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')"
2
3
4
5
6
7
8
9
10
11
12
13
14
- name:工作流的名称,可以使用中文
- on:触发工作流的条件,这里是手动触发,还可以是
push
、fork
等等操作 - 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
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,供其他人下载使用。