30 秒看懂
  • GitHub Actions 是 GitHub 内置的 CI/CD 平台
  • 用来在你的仓库中自动执行构建、测试、部署等任务
  • 下面我会一步步讲清楚它的原理、配置方法、以及一个可直接用的 Rust + Cargo 编译示例工作流

GitHub Actions 是什么?

热点解释
john
john 在知识的海洋中遨游

0 人认可了这条内容 · 619 浏览

GitHub Actions 是 GitHub 内置的 CI/CD 平台,用来在你的仓库中自动执行构建、测试、部署等任务。
下面我会一步步讲清楚它的原理、配置方法、以及一个可直接用的 Rust + Cargo 编译示例工作流

🧩 一、GitHub Actions 是什么?

GitHub Actions 是一种“事件驱动”的自动化系统。
当仓库中发生事件(如推送、PR、发布)时,GitHub 会触发你定义好的 workflow(工作流) 文件去执行操作。

它可以:

  • 自动编译 Rust、Go、Python、C++ 等项目;

  • 自动执行测试;

  • 自动构建发布包、上传到 GitHub Releases;

  • 部署到服务器、DockerHub、Cloudflare、Vercel 等。


📂 二、基本结构

一个典型的 GitHub Actions 工作流位于仓库中:

.github/
 └── workflows/
      └── build.yml   # 你自定义的 CI 工作流

build.yml 文件的基本结构:

name: Rust Build CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: 检出代码
        uses: actions/checkout@v4

      - name: 安装 Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          profile: minimal

      - name: 构建项目
        run: cargo build --release

      - name: 运行测试
        run: cargo test --verbose

🚀 三、核心部分解释

部分含义
on:触发事件。push 表示当有人推送代码时运行,pull_request 表示当提交 PR 时运行。
jobs:一个 workflow 可以包含多个作业(job)。
runs-on:指定运行环境,常用的有 ubuntu-latestwindows-latestmacos-latest
steps:一个 job 中的执行步骤。
uses:引用别人写好的 action,比如官方的 checkout、setup-rust。
run:直接执行命令。

🦀 四、Rust 项目完整 CI 示例

下面是一个更完整的 Rust CI 配置文件,它包括:

  • 多平台(Ubuntu / macOS / Windows)编译;

  • 缓存依赖;

  • 自动测试;

  • 构建产物上传。

name: Rust Build & Test

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    name: Build and Test on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]

    steps:
      - name: 检出代码
        uses: actions/checkout@v4

      - name: 安装 Rust
        uses: dtolnay/rust-toolchain@stable

      - name: 缓存 cargo 依赖
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      - name: 构建项目
        run: cargo build --release

      - name: 运行测试
        run: cargo test --all

      - name: 上传构建产物
        if: runner.os == 'Ubuntu' # 只上传一次
        uses: actions/upload-artifact@v4
        with:
          name: build-artifact
          path: target/release/

💾 五、如何启用 Actions

  1. 在项目根目录创建 .github/workflows/build.yml

  2. 提交并推送到 GitHub;

  3. 打开你的仓库 → 点击 “Actions”

  4. 你会看到刚刚的工作流已自动触发;

  5. 点击进去可查看日志、构建结果、下载产物。


⚙️ 六、进阶技巧(可选)

1️⃣ 上传构建后的二进制到 GitHub Releases

- name: 上传到 Releases
  if: startsWith(github.ref, 'refs/tags/')
  uses: softprops/action-gh-release@v1
  with:
    files: target/release/your_binary_name
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

2️⃣ 指定 Rust nightly 或自定义版本

- uses: actions-rs/toolchain@v1
  with:
    toolchain: nightly-2025-10-01
    override: true

3️⃣ 运行 Clippy 与格式检查

- name: 检查代码规范
  run: cargo fmt -- --check

- name: 运行 Clippy
  run: cargo clippy -- -D warnings

🧠 七、常见问题 FAQ

问题解决方法
cargo 编译太慢启用 actions/cache 缓存依赖
构建产物想下载actions/upload-artifact
不想在每次 push 都运行改成 on: [workflow_dispatch] 手动触发
Cargo.lock 变动后缓存失效缓存键包含 hashFiles('**/Cargo.lock')
依赖私有 crate 或 token使用 ${{ secrets.CARGO_TOKEN }}

  

下一步阅读
相关文章
无缝同步:用VSCode轻松将你的代码传送到GitHub
     在工作中,我们经常需要在多台设备间同步代码,而GitHu...
相关文章
Github 使用经典问题:如何通过本地仓库同步 fork 项目原仓库的更新?
       要同步你在 GitHub 上 fork 的...
相关文章
语言宏模型是什么鬼?
       语言宏模型(Large Language ...
相关文章
Markdown 是什么呢?
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。Markdo...

发布于 2025-11-04 14:53

免责声明:

本文由 john 原创或转载,著作权归作者所有,如有侵权,请联系我们删除。 info@frelink.top

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

暂无评论

推荐内容

公告与更新

关于本站
欢迎来到创想引擎,一个为创意和思想提供源源不断动力的创新平台。在这里,每个人的灵感都能迅速转化为行动,每个创意都能在思想的碰撞中飞速发展。我们相信,创想不仅仅是灵感的闪现,更是一次次打破常规、突破极限的动力释放。创想引擎致力于为用户提供一个开放、自由的创意空间,汇聚多元化的知识和观点。在这个平台上,...

核心主题

地球环境

学术研究

日语学习

deepseek

实时翻译

这是自定义内容