golang实现Go二进制文件测试构建签名发布一体化插件gomason的使用
gomason
Tool for testing, building, signing and publishing binaries. Think of it as an on-premesis CI/CD system that also performs code signing and publishing of artifacts.
功能概述
Gomason 可以:
- 运行测试并报告结果
- 为目标OS/Arch构建二进制文件和其他基于模板的文件
- 对构建的文件进行签名
- 将文件、签名和校验和发布到您选择的目的地
安装
go get github.com/nikogura/gomason
使用示例
测试主分支
gomason test
详细测试主分支
gomason test -v
测试特定分支
gomason test -v -b <branch name>
构建并发布主分支
gomason publish -v
构建并发布分支(不测试)
gomason publish -vs -b <branch name>
项目配置示例
在项目根目录创建 metadata.json
文件:
{
"version": "1.0.0",
"package": "github.com/nikogura/gomason",
"description": "A tool for testing, building, signing, and publishing your project from a clean workspace.",
"repository": "http://localhost:8081/artifactory/generic-local",
"tool-repository": "http://localhost:8081/artifactory/generic-local-tools",
"insecure_get": false,
"language": "golang",
"building": {
"prepcommands": [
"go get k8s.io/client-go/...",
"cd ${GOPATH}/src/k8s.io/client-go && git checkout v10.0.0",
"cd ${GOPATH}/src/k8s.io/client-go && godep restore ./..."
],
"targets": [
{
"name": "darwin/amd64",
"cgo": true,
"flags": {
"CC": "o64-gcc",
"CXX": "o64-g++"
},
"ldflags": "-X github.com/nikogura/dbt/pkg/dbt.METADATA_TEMPLATE=${METADATA_TEMPLATE}"
},
{
"name": "linux/amd64"
}
]
},
"signing": {
"program": "gpg",
"email": "gomason-tester@foo.com"
},
"publishing": {
"targets": [
{
"src": "gomason_darwin_amd64",
"dst": "{{.Repository}}/gomason/{{.Version}}/darwin/amd64/gomason",
"sig": true,
"checksums": false
},
{
"src": "gomason_linux_amd64",
"dst": "{{.Repository}}/gomason/{{.Version}}/linux/amd64/gomason",
"sig": true,
"checksums": false
}
]
}
}
用户配置示例
创建 ~/.gomason
文件:
[user]
email = nik.ogura@gmail.com
username = nikogura
passwordfunc = lpass show --notes gomason-test
[signing]
program = gpg
email = nik.ogura@gmail.com
完整示例
最小测试配置
{
"package": "github.com/nikogura/gomason",
"version": "0.1.0",
"description": "A tool for building and testing your project in a clean GOPATH."
}
运行测试:
gomason test
构建配置
{
"package": "github.com/nikogura/gomason",
"version": "0.1.0",
"description": "A tool for building and testing your project in a clean GOPATH.",
"building": {
"targets": [
{
"name": "darwin/amd64"
},
{
"name": "linux/amd64"
}
]
}
}
运行构建:
gomason build
签名配置
{
"package": "github.com/nikogura/gomason",
"version": "0.1.0",
"description": "A tool for building and testing your project in a clean GOPATH.",
"building": {
"targets": [
"darwin/amd64",
"linux/amd64"
]
},
"signing": {
"program": "gpg",
"email": "gomason-tester@foo.com"
}
}
运行签名:
gomason sign
发布配置
{
"package": "github.com/nikogura/gomason",
"version": "0.1.0",
"description": "A tool for building and testing your project in a clean GOPATH.",
"repository": "http://localhost:8081/artifactory/generic-local",
"building": {
"targets": [
{
"name": "darwin/amd64"
},
{
"name": "linux/amd64"
}
]
},
"publishing": {
"targets": [
{
"src": "gomason_darwin_amd64",
"dst": "{{.Repository}}/gomason/{{.Version}}/darwin/amd64/gomason",
"sig": true,
"checksums": false
},
{
"src": "gomason_linux_amd64",
"dst": "{{.Repository}}/gomason/{{.Version}}/linux/amd64/gomason",
"sig": true,
"checksums": false
}
]
}
}
运行发布:
gomason publish
总结
Gomason 提供了一个简单而强大的工具链,用于测试、构建、签名和发布 Go 二进制文件。通过合理的配置,可以轻松实现自动化构建和发布流程。
更多关于golang实现Go二进制文件测试构建签名发布一体化插件gomason的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang实现Go二进制文件测试构建签名发布一体化插件gomason的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Go二进制文件测试构建签名发布一体化插件gomason使用指南
gomason是一个用于Go项目的构建、测试、签名和发布一体化工具,它简化了Go项目的发布流程。下面我将详细介绍如何使用gomason。
安装gomason
go install github.com/nikogura/gomason@latest
基本使用
1. 初始化gomason配置
在项目根目录下创建.gomason
目录和配置文件:
mkdir -p .gomason
touch .gomason/config.json
示例config.json
内容:
{
"package": "github.com/yourusername/yourproject",
"targets": [
{
"name": "linux-amd64",
"os": "linux",
"arch": "amd64"
},
{
"name": "darwin-amd64",
"os": "darwin",
"arch": "amd64"
}
],
"metadata": {
"description": "My awesome Go project",
"version": "1.0.0",
"author": "Your Name"
},
"signing": {
"key": "path/to/your/private.key",
"keyring": "path/to/your/keyring"
},
"publish": {
"method": "github",
"repo": "yourusername/yourproject"
}
}
2. 构建项目
gomason build
这会为配置文件中指定的所有目标平台构建二进制文件。
3. 测试项目
gomason test
4. 签名二进制文件
gomason sign
5. 发布项目
gomason publish
高级功能
自定义构建脚本
在.gomason
目录下创建scripts
目录,可以添加以下脚本:
prebuild.sh
- 构建前执行postbuild.sh
- 构建后执行pretest.sh
- 测试前执行posttest.sh
- 测试后执行prepublish.sh
- 发布前执行postpublish.sh
- 发布后执行
版本管理
gomason支持自动版本管理:
gomason version --bump major
gomason version --bump minor
gomason version --bump patch
多平台构建示例
{
"targets": [
{
"name": "linux-386",
"os": "linux",
"arch": "386"
},
{
"name": "linux-amd64",
"os": "linux",
"arch": "amd64"
},
{
"name": "linux-arm",
"os": "linux",
"arch": "arm"
},
{
"name": "linux-arm64",
"os": "linux",
"arch": "arm64"
},
{
"name": "darwin-amd64",
"os": "darwin",
"arch": "amd64"
},
{
"name": "windows-386",
"os": "windows",
"arch": "386",
"ext": ".exe"
},
{
"name": "windows-amd64",
"os": "windows",
"arch": "amd64",
"ext": ".exe"
}
]
}
集成到CI/CD
可以在GitHub Actions等CI系统中集成gomason:
name: Build and Publish
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.20
- name: Install gomason
run: go install github.com/nikogura/gomason@latest
- name: Build
run: gomason build
- name: Test
run: gomason test
- name: Sign
run: gomason sign
- name: Publish
run: gomason publish
注意事项
- 签名功能需要提前设置好GPG密钥
- GitHub发布需要设置GITHUB_TOKEN环境变量
- 版本号遵循语义化版本控制(SemVer)
- 确保构建环境与目标平台兼容
gomason通过简化Go项目的构建和发布流程,提高了开发效率,特别适合需要跨平台发布的开源项目。