尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

云端自动化构建:image-template 的 GitHub Actions 如何每天自动发布镜像到 GHCR

云端自动化构建:image-template 的 GitHub Actions 如何每天自动发布镜像到 GHCR 云端自动化构建image-template 的 GitHub Actions 如何每天自动发布镜像到 GHCR【免费下载链接】image-templateBuild your own custom Universal Blue Image!项目地址: https://gitcode.com/gh_mirrors/im/image-templateimage-template是 Universal Blue 官方推荐的自定义 bootc 镜像模板。它的核心亮点之一是内置的 GitHub Actions 工作流你只需推送代码云端就会每天自动构建你的自定义 Linux 镜像并完成签名、打标签后自动发布到 GHCRGitHub 容器注册表全程无需一台构建服务器。这篇文章带你拆解这套每天自动发布镜像的完整机制。工作原理一份模板云端流水线image-template 的设计思路是代码即镜像Containerfile 定义基础镜像默认从 Bazzite 派生和构建流程build_files/ 里的build.sh是安装软件包、定制系统的入口image-template.env 用几个变量控制镜像名、默认标签等构建参数.github/workflows/build.yml 就是那台云端构建工厂的完整说明书。你只需要把FROM一行改成想要的基座镜像、在build.sh里写几行安装命令剩下的交给 Actions。触发构建的 4 种方式每天定时发布是核心打开 .github/workflows/build.yml 可以看到工作流有 4 个触发器触发方式行为适合场景pushmain 分支构建并直接发布到 GHCR改完代码即出新镜像schedulecron05 10 * * *每天 UTC 10:05 自动构建发布无感跟进基座镜像的每日更新pull_request只构建、不发布让贡献者先验证改动workflow_dispatch手动点按钮触发临时补一次构建其中每天定时触发是自动化的灵魂基座镜像如 Bazzite每天更新系统包而你的仓库每天都在固定时间跟着重建一次保证你的自定义镜像始终新鲜出炉。自动构建流水线从源码到签名镜像的 7 个关键步骤每次构建在ubuntu-24.04云端 Runner 上执行流程如下环境准备—— 检出代码、清理无用软件腾出磁盘、安装just命令工具并做语法检查just check确保 Justfile 本身没问题确定镜像名与标签—— 从 image-template.env 读取IMAGE_NAME并根据当前日期和 Git 提交号生成一套标签构建容器镜像—— 执行just build用 Podman 按 Containerfile 逐层构建运行build.sh安装定制软件最后执行bootc container lint自检镜像合法性分层重整rechunk—— 用 rpm-ostree 把巨大的 ostree 层重新切成小块让后续 OTA 更新只需下载更小的增量断点续传也更友好多标签打标—— 同一镜像会带上latest、latest-20260827、20260827、latest-SHA、20260827-SHA等标签工作区干净时才生成 SHA 相关标签方便按日期或提交号回溯任意一次构建推送 GHCR—— 登录ghcr.io后循环推送所有标签并记录本次镜像的 digest摘要值Cosign 签名—— 用仓库密钥对镜像摘要签名为最终用户提供可验证的安全保证未配置签名密钥时构建会直接失败宁可不出错也不发裸镜像。安全设计PR 永远不会污染你的镜像库 ️工作流里有一个容易忽略的细节登录 GHCR 和推送镜像的步骤都带有前置判断——只有非 PR 默认分支才会真正发布。这意味着别人的 PR 可以帮你构建验证但无法向你的账户发布任何包合并队列、workflow_dispatch等场景也能正确工作签名密钥SIGNING_SECRET存在 Actions 的 Secrets 中私钥绝不出仓库。再加上 .github/dependabot.yml 每周自动更新 Actions 组件版本整套流水线本身也在持续自愈。进阶按需生成可安装的 ISO / qcow2 磁盘镜像如果你希望把镜像直接刻进 U 盘安装到物理机模板还内置了 .github/workflows/build-disk.yml它不会自动运行而是通过workflow_dispatch手动触发可选择amd64或arm64平台一次生成qcow2虚拟机和anaconda-isoAnaconda 安装盘两种磁盘镜像产物默认作为 Job 工件下载也可勾选upload-to-s3选项通过 rclone 自动上传到你的 S3 兼容存储桶。磁盘构建的配置在 disk_config/disk.toml 与 disk_config/iso.toml 中记得先把里面的容器镜像地址指向你自己的镜像。快速上手3 步拥有自己的每日自动镜像复制模板用 Use this Template 创建新仓库仓库名即镜像名并在 Actions 页签启用工作流生成签名密钥安装 cosign 后执行COSIGN_PASSWORD cosign generate-key-pair把cosign.key的内容存为 Secrets 中的SIGNING_SECRET切记别把私钥提交进仓库定制并推送修改 Containerfile 的FROM行选择基座镜像在 build_files/build.sh 中写你的安装逻辑更新 image-template.env 里的IMAGE_NAME与REPO_ORGANIZATION然后git push。推送后到 Actions 页签看绿色对勾镜像就出现在你的 GHCR 里了。在自己的 bootc 系统上执行sudo bootc switch ghcr.io/用户名/镜像名并重启即可用上这套每天自动更新的自定义系统。 小贴士如果想本地先行验证可git clone https://gitcode.com/gh_mirrors/im/image-template后执行just build效果与云端构建完全一致。【免费下载链接】image-templateBuild your own custom Universal Blue Image!项目地址: https://gitcode.com/gh_mirrors/im/image-template创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表