_基于配置文件的go项目打包工具。_支持替换依赖包名、docker编译等功能。
go install github.com/B9O2/bake@latest
- 在项目文件夹下执行
bake init初始化项目(生成RECIPE.toml文件) - 在命令行中使用
bake进行编译或bake [recipes]顺序运行配置文件中的多个配置
RECIPE.toml是指导 bake如何编译的配置文件。为了使每份配置尽量简短,选择了面向行的toml格式。
最简单的RECIPE.toml只需要两行
[recipes.default]
entrance="./"一份完整的RECIPE.toml看起来像这样:
# bake
[recipes.default] #默认编译配置,会在不提供配置名时默认执行
# 必要参数
entrance="./" #编译入口,此处指定为当前目录
# 非必要参数
output="./bin" #编译输出目录
all_platform.all_arch.replace.text."google" = "apple" #替换代码文件内容
all_platform.all_arch.replace.dependency."gitlab.google.com" = "gitlab.apple.com" #替换依赖名
#|___平台___||__架构__||__操作__||_操作子项_|
[recipes.my_recipe]
entrance="./"
desc="演示配置"
output="./my_bin"
pairs = ["darwin/arm64","windows/386"] #编译darwin/arm64和windows/386其中default配置看起来稍显复杂,设置了以编译目标为单位对原始项目的内容进行替换。
例如:darwin平台的arm64架构替换文本"google"为"apple"写成配置就是 darwin.arm64.replace.text."google" = "apple",而示例中的配置则以all_platform与all_arch指代了全部内置平台与架构。
bake寻找当前目录下的RECIPE.toml,运行其中的default配置bake [recipes]寻找当前目录下的RECIPE.toml,运行指定配置。例如bake my_recipe执行my_recipe,而bake default my_recipe则会按顺序执行default与my_recipe两个配置
[recipes.builder_test]
entrance="./"
output="./build_bin"
all_platform.all_arch.builder.path="go"#使用环境变量中的go
all_platform.all_arch.builder.args=["-trimpath","-ldflags","-w -s"]#bake默认参数
all_platform.all_arch.builder.env.ENV_NAME="ENV_ALUE"#设置环境变量bake可以远程连接Docker进行编译。
#指定容器编译
[recipes.docker_test]
entrance="./"
output="./build_by_docker_bin"
all_platform.all_arch.docker.host="local" #使用本地docker
all_platform.all_arch.docker.container="2a7c6546eea74b" #容器ID或容器名#指定镜像编译
[recipes.docker_test]
entrance="./"
output="./build_by_docker_bin"
all_platform.all_arch.docker.host="local" #使用本地docker
all_platform.all_arch.docker.image="golang" #镜像名bake可以连接远程服务器进行编译。
#SSH密钥认证
[recipes.ssh_test]
entrance="./"
output="./build_by_ssh_bin"
all_platform.all_arch.ssh.host="192.168.1.100" #远程服务器地址
all_platform.all_arch.ssh.user="builder" #SSH用户名
all_platform.all_arch.ssh.private_key_path="~/.ssh/id_rsa" #私钥路径#SSH密码认证
[recipes.ssh_test]
entrance="./"
output="./build_by_ssh_bin"
all_platform.all_arch.ssh.host="build-server.com" #远程服务器地址
all_platform.all_arch.ssh.user="builder" #SSH用户名
all_platform.all_arch.ssh.password="your_password" #SSH密码#SSH Agent认证
[recipes.ssh_test]
entrance="./"
output="./build_by_ssh_bin"
all_platform.all_arch.ssh.host="build-server.com" #远程服务器地址
all_platform.all_arch.ssh.user="builder" #SSH用户名
#不需要指定密码或私钥,自动使用SSH Agent详细配置输出。
[recipes.output_test]
entrance="./"
output="./test" #输出目录的根目录
darwin.arm64.output.path="hello/world/CoolApp_dawin_arm64" #设定输出目录下的相对路径💡如果想要将每个文件都以绝对路径输出在不同位置,请设置 output="/"
bake支持将编译结果自动打包成ZIP文件。
#基本ZIP压缩
[recipes.zip_test]
entrance="./"
output="./build"
all_platform.all_arch.output.zip.source="myapp" #要压缩的文件或目录
all_platform.all_arch.output.zip.dest="myapp.zip" #ZIP文件名#带密码的ZIP压缩
[recipes.zip_password]
entrance="./"
output="./build"
all_platform.all_arch.output.zip.source="myapp" #要压缩的文件
all_platform.all_arch.output.zip.dest="myapp_secure.zip" #ZIP文件名
all_platform.all_arch.output.zip.password="secret123" #ZIP密码#不同平台不同ZIP配置
[recipes.zip_platform]
entrance="./"
output="./release"
linux.amd64.output.zip.source="myapp" #Linux文件
linux.amd64.output.zip.dest="myapp_linux_amd64.zip"
windows.amd64.output.zip.source="myapp.exe" #Windows文件
windows.amd64.output.zip.dest="myapp_windows_amd64.zip"bake支持将编译结果自动上传到远程服务器。
#SFTP密钥认证上传
[recipes.sftp_key]
entrance="./"
output="./build"
all_platform.all_arch.output.ssh.host="upload-server.com" #上传服务器地址
all_platform.all_arch.output.ssh.user="uploader" #SSH用户名
all_platform.all_arch.output.ssh.private_key_path="~/.ssh/upload_key" #私钥路径
all_platform.all_arch.output.ssh.source="myapp" #本地文件
all_platform.all_arch.output.ssh.dest="/opt/apps/myapp_latest" #远程路径#SFTP密码认证上传
[recipes.sftp_password]
entrance="./"
output="./build"
all_platform.all_arch.output.ssh.host="192.168.1.200" #上传服务器地址
all_platform.all_arch.output.ssh.user="deploy" #SSH用户名
all_platform.all_arch.output.ssh.password="deploy123" #SSH密码
all_platform.all_arch.output.ssh.source="myapp" #本地文件
all_platform.all_arch.output.ssh.dest="/var/www/releases/" #远程目录#不同平台上传到不同位置
[recipes.sftp_platform]
entrance="./"
output="./release"
linux.amd64.output.ssh.host="linux-server.com"
linux.amd64.output.ssh.user="deploy"
linux.amd64.output.ssh.source="myapp"
linux.amd64.output.ssh.dest="/opt/linux/myapp"
windows.amd64.output.ssh.host="windows-server.com"
windows.amd64.output.ssh.user="deploy"
windows.amd64.output.ssh.source="myapp.exe"
windows.amd64.output.ssh.dest="/opt/windows/myapp.exe"- 更实用的命令行参数
- Remote Vendor
- 输出
- ZIP压缩(可设置密码)
- SFTP
- S3
- 直接执行命令(?)
- Cel表达式(?)
- docker编译
- 指定容器编译
- 指定镜像,自动下载启动编译
- ssh编译
- 更好的异常处理
- 指定go二进制程序(可替换支持混淆的编译工具)