为 Go 服务管理自动化更新

主要观点:介绍了名为 ysco 的新工具,可为 Go 服务提供托管自动化更新,无需更改应用程序,启动方式有所改变,能在后台定期检查更新并自动安装或通知用户。
关键信息

  • 启动方式:从./ysco run [yscoflags]./app [appflags]启动,ysco 会启动应用并检查更新,可控制更新安装。
  • 新版本:关注 Go 工具链发布,项目通常不发布新二进制文件,ysco 可帮助更新。
  • 要求:适用于可通过CGO_ENABLED=0构建、自包含、源代码可通过 Go 模块代理获取的服务。
  • 更新查找:通过 Go 模块代理或 gopherwatch.org 的 DNS 服务,可获取 Go 应用和工具链的更新信息。
  • 策略与计划:默认自动安装补丁级更新,可设置手动或定时更新策略。
  • 下载新二进制:通过"CGO_ENABLED=0 go install <module>@<version>"构建,可利用 gobuilds.org 服务构建二进制文件并验证。
    重要细节
  • 启动派对在Go Rotterdam meetup举行,感谢组织者。
  • Go 应用作为 Go 模块,版本和分发方式与库类似,可通过go version -m <binary>debug/buildinfo#ReadFile方法获取信息。
  • Go 工具链版本可通过 Go 模块代理或 Go 网站获取,gopherwatch.org 的 DNS 服务可用于发现 Go 模块的最新版本,包括 Go 工具链。
  • ysco 检查更新的默认方式是 gopherwatch DNS,有 fallback 到 Go 模块代理。
  • 应用策略方面,Go 项目应明确是否需要 cgo 和是否自包含,对于应用的语义版本控制尚无共识。
  • 自动更新到最新 Go 工具链可能使用未经测试的构建,ysco 目前默认等待 1 天安装更新。
  • 关于更新调度,可考虑与备份计划协调等更好的时刻。
  • gopherwatch.org 的 DNS 服务在处理多个活跃开发的次要版本时存在不足,Go 模块代理@v/list端点可列出所有版本。
  • gobuilds.org 目前处于 beta 阶段,未来有改进计划,如更隔离的构建环境等。
  • 对于前端可考虑创建服务来实现可重现的构建。
  • 可通过其他渠道安装应用和更新,但 Go 的静态链接二进制文件有其优势。
  • 可创建服务来收集 git 标签和注释作为变更日志并添加到数据库。
阅读 20
0 条评论