讲师中心 微信公众号
AI工具推荐 视频效率加速

GitHub Actions怎么跨平台自动构建Windows/Linux二进制

千伟吖_8853

千伟吖_8853

发布时间:2026-10-06 14:19:16

|

728人浏览过

|

来源于php中文网

原创

<p>正确触发方式是 on: push: tags: ['v'],仅当推送符合 v 格式的标签(如 v1.2.0)时触发构建;需分 Linux/Windows 独立 job,设 CGO_ENABLED=0 并显式上传、下载 artifact 后发布。</p>

github actions怎么跨平台自动构建windows/linux二进制

触发条件必须用 tag,不是 push 主分支

GitHub Actions 跨平台构建二进制,最常见失败原因是误配 on: push —— 这会导致每次提交都跑构建,但 Windows/Linux 构建耗时长、资源占用高,且多数场景下你只希望「正式发版时」才生成安装包或可执行文件。

正确做法是监听 tags 事件,且约定 tag 格式为 v*(如 v1.2.0):

  • on: 下写 push: → tags: ['v*'],不是 branches: ['main']
  • tag 必须本地打完并 git push origin <tag> 推上去,仅 git tag v1.2.0 不触发工作流
  • GitHub Releases 页面的 “Draft a new release” 按钮本质就是打 tag + 传描述,它本身不运行构建

Linux 和 Windows 构建必须分 jobs,不能合在一个 job 里

GitHub 提供的 runner 是单 OS 环境:ubuntu-latest 只能 build Linux 二进制,windows-latest 只能 build Windows(.exe),想同时产出两者,就得拆成两个独立 job,并用 needs: 或 if: always() 控制发布逻辑。

典型结构:

  • job build-linux:runs-on ubuntu-latest,设 GOOS=linux,输出 dist/app-linux-amd64
  • job build-win:runs-on windows-latest,设 GOOS=windows,输出 dist/app-windows-amd64.exe
  • job release:runs-on ubuntu-latest,用 softprops/action-gh-release@v1 合并上传两个产物

别试图在 Linux job 里用 GOOS=windows 交叉编译出 .exe 再直接上传——Windows 二进制在 Linux 上无法验证签名、无法测试运行、且部分项目(如含资源绑定或 manifest)会失败。

GitHub Repo Guide PDF
GitHub Repo Guide PDF

分析 GitHub 仓库 URL 或 OWNER/REPO,生成中文用户指南,聚焦于项目的使用方法而非实现细节,构建 Markdown 文档。

下载

CGO_ENABLED=0 是跨平台静态链接的前提

Go 默认启用 CGO,一旦依赖 libc 或 Windows API,交叉编译出的二进制在目标平台大概率报错:cannot execute binary file: Exec format error(架构错)或 failed to load DLL(缺运行时)。

解决方法统一加环境变量:

  • Linux 构建:加 CGO_ENABLED=0 GOOS=linux GOARCH=amd64
  • Windows 构建:加 CGO_ENABLED=0 GOOS=windows GOARCH=amd64
  • 额外建议:加上 -ldflags="-s -w" 剥离调试信息,体积减少 30%~50%

如果项目确实要用 CGO(比如调用 SQLite C API),那 Windows job 必须用 windows-latest + 安装 MinGW 工具链,Linux job 则需手动装 gcc-mingw-w64,复杂度陡增,不推荐初学者走这条路。

release job 上传前必须用 actions/download-artifact 拉取产物

每个 job 运行在隔离环境,build-linux 生成的文件不会自动出现在 build-win 的机器上,更不会进 release job。必须显式声明 artifact 并下载:

  • build-linux 步骤末尾加:- uses: actions/upload-artifact@v4,with: name: linux-bin, path: dist/app-linux-amd64
  • build-win 步骤末尾加:- uses: actions/upload-artifact@v4,with: name: win-bin, path: dist/app-windows-amd64.exe
  • release job 里先用 actions/download-artifact@v4 把两个 artifact 拉下来,再传给 softprops/action-gh-release

漏掉 download 步骤,release job 里看到的就是空目录,最终 Release 页面什么也传不上——这个坑特别隐蔽,日志里还不报错,只会显示 “0 files uploaded”。

热门AI工具

更多
墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

5639

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

1680

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

974

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3677

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3361

2024.04.09

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3099

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2678

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

1448

2023.08.01

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
swift开发文档
swift开发文档

共33课时 | 43.4万人学习

尚学堂Swift入门视频教程
尚学堂Swift入门视频教程

共44课时 | 16.6万人学习

SSDB数据库使用手册
SSDB数据库使用手册

共21课时 | 24.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn