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 可以:

  1. 运行测试并报告结果
  2. 为目标OS/Arch构建二进制文件和其他基于模板的文件
  3. 对构建的文件进行签名
  4. 将文件、签名和校验和发布到您选择的目的地

安装

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

1 回复

更多关于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

注意事项

  1. 签名功能需要提前设置好GPG密钥
  2. GitHub发布需要设置GITHUB_TOKEN环境变量
  3. 版本号遵循语义化版本控制(SemVer)
  4. 确保构建环境与目标平台兼容

gomason通过简化Go项目的构建和发布流程,提高了开发效率,特别适合需要跨平台发布的开源项目。

回到顶部