Go 自动集成打包工具:goassem

Go 自动集成打包工具:goassem

goassem 参考了maven assembly build插件的设计思路。只需执行package 命令,goassem会将源码编译成不同平台的可执行文件,同时将文档,配置,脚本等外部文件组织好,并归档成一个或者多个压缩包。方便release。

安装

安装goassem非常简单

go get -u github.com/liujiarik/goassem

使用说明

goassem -help

初始化

goassem 利用 assembly.json 文件保存打包的过程。类似maven中pom.xml,goassem需要在项目根目录下创建一个assembly.json文件。
使用 init语句:

goassem init

在当前目录创建一个模板assembly.json文件。如果assembly.json已经存在,则提示已经init过。

assembly.json 说明

assembly.json 描述了一组打包逻辑。它是一个json数组,可以支持打包多个包,因为在Go项目我们常常希望build不同的Go可执行文件。
常见assembly.json的样例如下,这个assembly.json只打了一个包,如果需要打多个,只需要在后面添加类似的配置结构

[
  {
    "name": "demo",  // package name
    "version": "1.0.1", // version
    "format": "zip", // Archive format
    "main": "main", //  Main Go file name without the suffix
    "binDir": "bin", // bin dir
    "buildArgs": [], // go build buildArgs
    "fileSets": [
      {
        "directory": "conf",
        "outputDirectory": "conf",
        "includes": [
          "*"
        ]
      },
      {
        "directory": "sh",
        "outputDirectory": "/",
        "includes": [
          "*.sh"
        ]
      },
      {
        "directory": "./",
        "outputDirectory": "/",
        "includes": [
          "README"
        ]
      }
    ],
    "platforms": [
      {
        "arch": "amd64",
        "os": "linux"
      },
      {
        "arch": "amd64",
        "os": "darwin"
      }
    ]
  }
]

参数说明:
name:包名

version:版本

format:压缩类型(目前支持zip,以后会支持其他类型)

main:main函数入口Go文件, go build 的目标文件。文件地址相对于 Go工程根目录注意不要加.go后缀

binDir :可执行文件的地址,文件地址相对于包目录

buildArgs :go build 的编译参数

fileSets :文件打包处理命令,是一个数组格式,可以处理多文件。

  • directory:源文件目录 ,文件地址相对于 Go工程根目录。如果是Go工程根目录请使用“./”
  • outputDirectory:输出目录,文件地址相对于包目录。如果是包目录,请使用“/”
  • includes:需要处理的文件。
    fileSets 将directory 下 includes包含的文件拷贝到outputDirectory目录下。通过fileSets可以将文档,脚本,配置文件打包到包内的任意地址。includes 支持*通配符。

platforms :交叉编译支持,是一个数组格式,以处理多个平台。

  • arch : 目标架构
  • os :目标操作系统
    不同的platform会生成不同的包。如果platforms为空,则不会进行交叉编译,

而最终生成的包文件名为:
$name-$version-$os-$arch.zip

打包

goassem package

goassem读取 assembly.json 配置对Go项目进行打包。所有的输出在_out文件夹中

清除

goassem clear

goassem会删除_out 文件夹下的所有内容

你可能感兴趣的:(Go 自动集成打包工具:goassem)