Files
LinkPort/docs/ipfs.md
T
2026-09-24 10:09:13 +08:00

3.8 KiB
Raw Blame History

Drone CI 与发布包

当前 Docker 流水线与克隆排错

当前 .drone.yml 已切换为 Docker 镜像构建与发布,使用 docker_username / docker_password Secret;下文 Linux 归档及 Gitea/IPFS 发布配置为此前方案,不是当前流水线的步骤。

若日志在 git fetch 报 fatal: expected flush after ref listing,说明构建已触发,但源码克隆未完成,Docker 构建尚未执行。该日志本身不足以确定根因。

当前禁用默认 clone,改用 alpine:3.22 安装新版 Git 和 CA 证书,再执行 git clone --no-checkout 自动协商远端 SHA-1/SHA-256 对象格式;不再先执行 git init 或强制协议 v0。日志打印 Git 版本、对象格式和最终提交。克隆后补取 DRONE_COMMIT_REF(包括 PR 等非普通分支引用),必要时按提交 ID 补取对象,再以 detached HEAD 检出并核对 DRONE_COMMIT_SHA,不以分支最新提交替代本次构建提交;获取不到指定提交时直接失败。

私有仓库继续使用 Drone 注入的 DRONE_NETRC_* 凭据,关闭 shell 跟踪并以受限权限写入克隆容器的 $HOME/.netrc,不写入共享源码目录,也不关闭 TLS 校验。该步骤需要能访问 Alpine 软件源及仓库。若仍失败,提供新 clone 步骤完整日志并检查 Gitea/反向代理日志;不要提供令牌或 .netrc 内容。

此前的 Linux 归档发布方案

Drone 的 push、pull_request、tag 流水线先执行 Go 测试、go vet 和前端构建,再编译 Linux amd64 无 CGO 单文件程序。打包前运行 scripts/verify-package.mjs,在隔离临时目录检查版本信息、内嵌网页、健康检查与登录。所有事件均生成 bin/releases/serviceport-<VERSION>-linux-amd64.tar.gz,日志打印归档路径和 SHA256;push 和 tag 可上传 Gitea Generic Packages,仅 tag 可选上传 IPFS。不发布 Windows 程序或容器镜像。

若 Drone 页面没有任何构建记录,先在 Drone 启用该 Gitea 仓库,确认 Gitea webhook 投递成功、Linux amd64 Docker runner 在线,再推送新提交或重新触发构建;修改 YAML 本身不能启动 Drone。流水线归档位于临时工作区,构建结束后不会自动出现在仓库附件中。

在 Drone 仓库设置以下 Secret:

  • ipfs_api:IPFS HTTP API 根地址,例如 https://node.example 或 https://node.example/api/v0。不要提交到仓库。
  • ipfs_token:可选的 Bearer token;无认证节点可设置为空值。
  • gitea_user:有权向仓库所有者发布包的 Gitea 用户名。
  • gitea_token:该用户具有包写入权限的访问令牌。两项都配置后,push/tag 上传归档到 https://git.freeicu.top/api/packages/<仓库所有者>/generic/serviceport/<包版本>/serviceport-<VERSION>-linux-amd64.tar.gz,日志打印下载地址;请勿在日志或仓库暴露令牌。

Gitea 包版本在 tag 时为 VERSION,在 push 时为完整提交 SHA,以免不同提交的同一版本归档互相覆盖;PR 不发布。缺少 Gitea 凭据时明确记录跳过,包仍只存在于临时工作区。上传 HTTP 失败则流水线失败。重复运行同一个 tag 或提交可能因 Gitea 拒绝同名文件而失败;需在包仓库删除原文件后重试。

上传步骤使用 pin=true 和 wrap-with-directory=true,日志输出根 CID。IPFS API 不可用或上传失败时,标签流水线失败;未配置 ipfs_api 时仅跳过上传,不影响测试和打包。标签必须与 VERSION 完全一致并带 v 前缀,例如 VERSION=1.2.3 对应 v1.2.3。

发布包内容为 Linux amd64 无 CGO 二进制、VERSION、README.md、构建/测试文档和 SHA256SUMS.txt。Windows 单 EXE 仍通过 scripts/package.ps1 单独生成。Drone 必须使用 Linux amd64 Docker runner;流水线验证不代表真实数据库或 SSH 服务器的在线测试。