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
文件夹下的所有内容