Gitea Actions 是 Gitea 提供的持续集成/持续部署(CI/CD)解决方案。它使用 YAML 文件定义工作流,而工作流的核心在于其步骤(Steps)。理解如何正确编写这些步骤,是高效构建自动化流程的关键。
本文将为您详细解析 Gitea Actions 中步骤的两种核心写法:使用封装好的操作(Actions)和执行Shell 命令。
一、核心步骤写法:uses vs. run
一个工作流(Workflow)中的每个步骤,都必须指定一个 name,并选择使用 uses 或 run 关键字来定义其功能。
1. 运行 Shell 命令 (run)
这是最直接、最灵活的方式,允许您在运行器(Runner)上执行任何命令行脚本。
-
用途: 执行简单的编译指令、运行测试脚本、输出调试信息等。
-
示例:
yaml- name: 编译 Go 程序 run: | # 使用多行脚本块 go mod tidy go build -o myapp . echo "编译完成" shell: bash # 可指定使用的 shell
2. 使用 Actions (uses)
这是 Gitea Actions 强大之处的体现。它允许您引用外部或内部封装好的代码块(Action 模块),实现复杂逻辑的复用。
-
用途: 检出代码、设置语言环境、登录 Docker 仓库、发布构件等。
-
示例:
yaml- name: 检出仓库代码 uses: actions/checkout@v4 # 引用远程 Action - name: 设置 Node.js 环境 uses: actions/setup-node@v4 with: node-version: '20' # 传入参数
二、深入探索:uses 关键字下的 Action 模块
uses 关键字可以引用的 Action 模块主要有三种类型,它们对应了不同的引用路径和使用场景:
A. 远程 Action (外部仓库)
最常见的形式,引用在公共 Actions 市场或外部 Gitea/GitHub 仓库中已发布的 Action。
- 引用格式:
owner/repo@tag或owner/repo@commit - 示例:
uses: actions/checkout@v4
B. 本地 Action (composite 或 docker 模式)
当你想在当前仓库 内复用一些特定逻辑时,可以将 Action 模块放在 .gitea/actions/ 目录下,并在工作流中通过相对路径引用。
- 引用格式:
uses: ./.gitea/actions/your-action-name - 优势: 逻辑封装在本地,无需发布到外部,便于维护。
1. Composite 模式(推荐)
这是最简单的本地 Action 模式,它允许您在 Action 内组合多个 run 和 uses 步骤。
yaml
# action.yaml (在本地 Action 目录中)
runs:
using: 'composite' # 使用复合模式
steps:
- shell: bash
run: echo "Hello, ${{ inputs.who-to-greet }}!"
C. 远程 Docker 镜像 Action
Action 不仅可以运行脚本,还可以直接在一个预构建的 Docker 镜像 中执行命令,实现精确的环境控制。这通过在 action.yaml 中配置 runs.using: 'docker' 来实现。
您可以使用远程 Docker 注册表(如 Docker Hub)上的镜像,无需编写 Dockerfile。
| 配置项 | 示例值 | 作用 |
|---|---|---|
runs.using |
docker |
声明使用 Docker 容器环境 |
image |
docker://golang:1.21-alpine |
指定要拉取的远程镜像及其标签 |
entrypoint |
go |
容器启动时执行的主命令 |
args |
version |
传递给 entrypoint 的参数 |
示例 action.yaml 片段:
yaml
runs:
using: 'docker'
image: 'docker://myregistry/my-custom-builder:latest' # 引用远程私有或公共镜像
entrypoint: '/bin/run.sh'
💡 总结与建议
| 写法 | 关键字 | 优点 | 最佳实践 |
|---|---|---|---|
| 执行命令 | run |
灵活、自定义性高 | 用于简单的构建、测试命令和快速调试 |
| 引用操作 | uses |
模块化、可复用、代码简洁 | 用于复杂的环境配置、第三方服务交互和发布流程 |
通过灵活组合 uses 和 run,您可以为 Gitea 仓库构建出强大、高效且易于维护的自动化工作流。