二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 最佳实践

  • 迎刃而解

  • Nginx

  • Php

  • Zabbix

  • AWS

  • Prometheus

  • Grafana

  • Loki

  • CentOS

  • Supervisord

  • Systemd

  • Docker

  • Docker-Compose

  • Rancher

  • Ansible

  • OpenLdap

  • GitLab

  • GitHub

    • GitHub中开源项目维护流程手册
    • 分享我的开源项目Thank-Mirror
    • 2024年重磅开源项目 awesome-ops 已收录项目500个
    • 分享我的开源项目Cloud_Dns_Exporter,妈妈再也不担心我忘换证书了
    • 一个仅需三步配置就能生成免费个人博客的开源模板vdoing-template
    • 如何将个人的GitHub主页配置的优雅好看
    • 利用GitHub Actions自动为README添加TOC目录
    • 利用GitHub Actions自动将项目贡献者列表添加到README中
    • 利用GitHub Actions自动优雅地为项目构建Releases
    • 利用GitHub Actions自动获取博客rss文章
    • 利用GitHub Actions自动构建项目的docker镜像并发布到DockerHub
    • 利用GitHub Actions自动生成GitHub的Fans
    • 利用GitHub Actions自动生成个人star列表并归类
    • 利用GitHub Actions自动对仓库内图片进行无损压缩
    • 利用GitHub Actions自动检测项目中的问题链接
    • 利用GitHub Actions自动构建go项目的二进制到release
      • 前言
      • 配置
      • 参数说明
      • 遗留问题
    • 利用github-slug-action暴漏Github Action上下文中的关键变量
    • 利用Github Action自动检测项目中 yaml 或 json 的语法
    • 记录最近在Github Action配置实践中的几个新的收获
    • VMR一个开源的通用SDK版本管理器
  • Etcd

  • Consul

  • RabbitMQ

  • Kafka

  • Mysql

  • MongoDB

  • OpenVPN

  • Kvm

  • VMware

  • 配置文件详解

  • Other

  • 运维观止
  • GitHub
二丫讲梵
2022-12-12
目录

利用GitHub Actions自动构建go项目的二进制到release

文章发布较早,内容可能过时,阅读注意甄别。

# 前言

最近 ChatGPT 大火,随之一起火起来的,有一大批基于 ChatGPT 编写的工具,我的项目 chatgpt-dingtalk (opens new window) 也是这批项目中的一个,旨在提供在钉钉群聊中与 ChatGPT 交互的能力。

这是一个工具类的项目,已经提供了 docker 一键部署的能力。但是也有人只想通过二进制直接部署的方式进行体验,多平台兼容的二进制构建,早已有成熟的 Actions 支持,本文就来介绍一个实现方案。

# 配置

所用 Actions:go-release-action (opens new window)

使用配置其实非常简单,基本上阅读完官方介绍文档就可以上手使用了。

我们在 workflows 目录下添加如下内容:

$ cat go-binary-release.yml

name: build-go-binary

on:
  release:
    types: [created] # 表示在创建新的 Release 时触发

jobs:
  build-go-binary:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        goos: [linux, windows, darwin] # 需要打包的系统
        goarch: [amd64, arm64] # 需要打包的架构
        exclude: # 排除某些平台和架构
          - goarch: arm64
            goos: windows
    steps:
      - uses: actions/checkout@v3
      - uses: wangyoucao577/go-release-action@v1.30
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }} # 一个默认的变量,用来实现往 Release 中添加文件
          goos: ${{ matrix.goos }}
          goarch: ${{ matrix.goarch }}
          goversion: 1.18 # 可以指定编译使用的 Golang 版本
          binary_name: "chatgpt-dingtalk" # 可以指定二进制文件的名称
          extra_files: README.md config.dev.json # 需要包含的额外文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

配置好之后,我们可以来到 release 页面,点击 Darft a new release 创建完一个 release 之后,这个 Actions 就会自动运行,将不同环境不同架构下的二进制打好了。

效果如下:

# 参数说明

如上 yaml 文件中用到的参数基本上都已经有了注释,这里再对官方目前提供的所有参数做个注释说明:

参数名 必填 说明
github_token 是 你的 GITHUB_TOKEN 用于将版本上传到 Github Release。
goos 是 GOOS 是运行程序的操作系统:darwin、windows、linux 等。
goarch 是 GOARCH 是运行程序的架构:386、amd64、arm、arm64、s390x、loong64 等。
goamd64 否 GOAMD64 是正在运行的程序 amd64 微架构级别,从 1.18 开始可用。它只能在 GOARCH 是 amd64 时使用:v1、v2、v3、v4 之一。
goversion 否 Go 编译环境版本。 latest (check it here) 是默认的, 可自定义选项有: 1.13, 1.14, 1.15, 1.16, 1.17, 1.18, 1.19.
project_path 否 在哪里运行 go build 命令。
binary_name 否 如果不想使用仓库名称作为二进制名字,请指定另一个二进制名称。如果未设置,请使用存储库的基本名称。
pre_command 否 在构建之前将执行的额外命令。如果您不使用 Go 模块,您可能需要使用它来解决依赖性问题。
build_command 否 构建二进制文件的实际命令,通常用 go build. 您可能希望使用其他命令包装器, e.g., packr2, example build_command: 'packr2 build'. 记得用 pre_command 设置 packr2 命令. 它还支持 make (Makefile) 构建方案, example build_command: make. 在这种情况下两者都是 build_flags and ldflags 将被忽略,因为它们应该写在你的 Makefile . 此外,请确保生成的二进制文件放在 Make 运行的路径中, i.e., project_path.
executable_compression 否 用一些第三方工具压缩可执行的二进制文件。它接受带有否参数的压缩命令作为输入,例如 UPX 或 UPX-V。目前只支持 UPX。
build_flags 否 传递给 go build 命令的其他参数。
ldflags 否 要提供给 -ldflags 标志参数的值。
extra_files 否 指定将额外的文件打包的制品内。用空间分隔的多个文件。支持拷贝文件夹,因为内部执行的是 cp -r. E.g., extra_files: LICENSE README.md
md5sum 否 与工件一起发布 .md5,默认为 TRUE。
sha256sum 否 与工件一起发布 .sha256 ,默认为 FALSE。
release_tag 否 将二进制文件发布到的目标版本标签。它致力于在每次推送时将二进制文件发布到一个指定的发布页面,因为在这种情况下没有目标。如果像大多数人一样,通过 release:[created] 事件触发动作,不要设置它。
release_name 否 替代 release_tag 用于发布目标规范和二进制推送. 给定 release_name 的最新版本将从所有版本中选择。对例如无标签 (草稿) 的有用。
overwrite 否 如果资产已经存在,则覆盖它。默认为 FALSE。
asset_name 否 如果不想使用默认格式,请自定义资产名称 ${BINARY_NAME}-${RELEASE_TAG}-${GOOS}-${GOARCH}. 确保正确设置它,特别是对于必须附加的矩阵用法 -${{ matrix.goos }}-${{ matrix.goarch }}. 一个有效的例子可能是 asset_name: binary-name-${{ matrix.goos }}-${{ matrix.goarch }}.
retry 否 如果上传失败,重试多少次。默认为 3。
post_command 否 将为拆解工作执行的额外命令。例如,您可以使用它将工件上传到 AWS s3 或阿里云 OSS
compress_assets 否 auto 默认将产生一个 zip 文件于 Windows 系统以及 tar.gz 文件于其他. zip 将强制使用 zip. OFF 将禁用资产打包.

# 遗留问题

如果单个项目,同时配置了自动生成 release 和当前这个构建二进制的 Action,会发现发布 release 之后没有触发构建,这个问题目前还没有找到比较好的解决办法。

补充于 2023-03-01

关于这个遗留问题,实际上还是自己对 action 的应用不够熟悉导致的,没有触发的原因是配置当中的时机不对,通过 release drafter 生成 release,其实 create 已经完成,真正的动作应该是 publish 才对,因此调整触发时机即可:

on:
  release:
    types: [created, published] # 表示在创建新的 Release 时触发
1
2
3
微信 支付宝
上次更新: 2024/09/26, 21:41:44
利用GitHub Actions自动检测项目中的问题链接
利用github-slug-action暴漏Github Action上下文中的关键变量

← 利用GitHub Actions自动检测项目中的问题链接 利用github-slug-action暴漏Github Action上下文中的关键变量→

最近更新
01
睡着的人不关灯
06-12
02
学习周刊-总第215期-2025年第24周
06-12
03
学习周刊-总第214期-2025年第23周
06-05
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式