前言

随着鸿蒙 PC 终端生态的持续完善,越来越多的开发者开始尝试将鸿蒙 PC 作为日常开发的主力设备。

作为一台开发设备,除了本地工程开发之外,能够承接 CI 任务同样是衡量其可用性的重要维度。本文将介绍如何将鸿蒙 PC 接入 GitHub Actions,使其作为自托管运行器(self-hosted runner)运行 CI 工作流。

方案概述

GitHub Actions 采用典型的 Agent-Server 架构:运行器需要运行一个称为 GitHub Actions Runner 的 Agent 程序,与 GitHub 服务器保持通信,接收并执行下发的 CI 任务。

理论上,任何能够运行该 Runner 的设备都可以注册为自托管运行器。但官方 Runner 基于 .NET 构建,其跨平台支持依赖目标平台的 .NET 运行时。目前微软官方 .NET 尚未支持鸿蒙系统,且生态中缺乏可靠的社区维护版,这给鸿蒙 PC 的适配带来了挑战。

针对这一现状,有两种解决思路:

  1. 使用民间零散移植的 .NET 运行时进行构建和部署。这种做法虽然能完全对齐官方特性,但环境配置繁琐,后期维护成本高。
  2. 避开 .NET 限制,采用跨平台能力更强的语言重写 Runner,或复用已有的第三方实现。

考虑到部署与维护的便捷性,本文采用第二种方案,选用社区维护的 Go 语言重写版本 github-act-runner

操作流程

github-act-runner 是用 Go 语言编写的,而鸿蒙系统在大多数情况下都能直接复用 Linux 平台的 Go 语言制品。因此我们并不需要从源码构建,只需下载 Linux 版本的制品,对它做一次二进制签名,即可成功运行。

因此我们的第一个步骤是将 Linux 制品下载到鸿蒙 PC 上并进行代码签名:

mkdir github-act-runner
cd github-act-runner
curl -LO https://github.com/ChristopherHX/github-act-runner/releases/download/v0.13.0/binary-linux-arm64.tar.gz
tar -zxf binary-linux-arm64.tar.gz
binary-sign-tool sign -selfSign 1 -inFile github-act-runner -outFile github-act-runner

binary-sign-tool 工具由 ohos-sdk 提供,请自行下载 ohos-sdk,本文不做赘述。

准备好制品之后,就可以注册运行器、拉起 Agent 程序:

# 注册运行器
./github-act-runner configure --url <your-repo> --token <your-token>

# 前台拉起 Agent 程序
./github-act-runner run

如果一切正常的话,现在你在 GitHub 上面就能看到你的运行器处于 Idle 状态了。

我们可以编写一个简单的工作流来验证自托管运行器是否在正常工作:

name: System Info

on:
  workflow_dispatch:

jobs:
  show-system-info:
    runs-on: self-hosted
    steps:
      - name: Display system information
        run: uname -a

当你手动触发这个工作流,你将看到如下输出,说明它确实能成功被派发到鸿蒙 PC 上运行:

请添加图片描述

注意事项

  1. 运行器与 GitHub 服务器之间的网络稳定性直接影响任务可靠性。若执行过程中连接长时间中断,GitHub 可能判定任务失败并取消执行。
  2. 如果你的工作流中引用了别人的 Action(例如 GitHub 官方提供的 actions/checkout),你需要在执行器上配置好 Node.js 运行环境,让 github-act-runner 能通过 PATH 找到你机器上的 node 命令。如果不配置,github-act-runner 会报错 Cannot find: node in PATH。当前大多数 Action 依赖的 Node.js 版本是 24,建议为 github-act-runner 提供 Node.js 24,过高过低都可能产生兼容性问题。
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐