使用GoReleaser发布你的应用
众所周知,go 语言是支持跨平台编译的,如果每次编译发布都手动操作的话太麻烦了。GoReleaser (opens new window)这个工具就可以帮助我们编译和发布,配置好后每次发布时只需一行命令就直接编译并发布了,
GoReleaser
采用Golang
开发,是一款用于Golang
项目的自动发布工具。只需要几行命令就可以轻松实现跨平台的包编译、打包和发布到Github
、Gitlab
等版本仓库种,显著地提高了生产力。
开发环境:
- Windows 10
- ide(GoLand) 2021.3.3
- go1.18 windows/amd64
- goreleaser version 1.7.0
# 安装
作为go小白,目前还不会使用其他的方式下载goleleaser
,这里我是直接下载的exe文件,然后把exe文件放到你项目的根目录下即可。
$ ./goreleaser.exe -v
goreleaser version 1.7.0
commit: 7671dab291483b2733e871abff379d07e74dfc6c
built at: 2022-03-21T00:00:37Z
built by: goreleaser
goos: windows
goarch: amd64
module version: v1.7.0, checksum: h1:qk+7boeU300OaogAVkjjl+2OLoMfr2e2uZM0cPcacDw=
https://goreleaser.com
2
3
4
5
6
7
8
9
10
# 使用
# 初始化
#在目录下生成 .goreleaser.yml 配置文件
$ ./goreleaser.exe init
2
生成的配置文件可以根据自己的需求进行配置。
# 打包
只在本地打包,不上传到git服务器
#删除本地打包文件夹并打包
$ ./goreleaser.exe --snapshot --skip-publish --rm-dist
2
$ ./goreleaser.exe release --snapshot --skip-publish --rm-dist
• releasing...
• loading config file file=.goreleaser.yml
• loading environment variables
• getting and validating git state
• building... commit=13a6492a3c03060d76b28b1f591676fb316f7933 latest tag=v4.1.0
• pipe skipped error=disabled during snapshot mode
• parsing tag
• running before hooks
• running hook=go mod download
• setting defaults
• snapshotting
• building snapshot... version=v4.1.0
• checking distribution directory
• --rm-dist is set, cleaning it up
• loading go mod information
• build prerequisites
• writing effective config file
• writing config=dist\config.yaml
• building binaries
• building binary=dist\markdownToConfluence_linux_386\markdownToconfluence
• building binary=dist\markdownToConfluence_darwin_arm64\markdownToconfluence
• building binary=dist\markdownToConfluence_windows_386\markdownToconfluence.exe
• building binary=dist\markdownToConfluence_linux_amd64\markdownToconfluence
• building binary=dist\markdownToConfluence_darwin_amd64\markdownToconfluence
• building binary=dist\markdownToConfluence_windows_amd64\markdownToconfluence.exe
• building binary=dist\markdownToConfluence_linux_arm64\markdownToconfluence
• archives
• creating archive=dist\markdownToConfluence_v4.1.0_darwin_x86_64.tar.gz
• creating archive=dist\markdownToConfluence_v4.1.0_linux_arm64.tar.gz
• creating archive=dist\markdownToConfluence_v4.1.0_windows_i386.tar.gz
• creating archive=dist\markdownToConfluence_v4.1.0_windows_x86_64.tar.gz
• creating archive=dist\markdownToConfluence_v4.1.0_linux_i386.tar.gz
• creating archive=dist\markdownToConfluence_v4.1.0_linux_x86_64.tar.gz
• creating archive=dist\markdownToConfluence_v4.1.0_darwin_arm64.tar.gz
• creating archive=dist\markdownToConfluence_v4.1.0_windows_arm64.tar.gz
• calculating checksums
• storing release metadata
• writing file=dist\artifacts.json
• writing file=dist\metadata.json
• release succeeded after 8.38s
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
当看到
release succeeded after 8.38s
时说明打包成功了。会在根目录中生成dist文件夹,里面就是编译的各种跨平台包。
# 发布
- 获取 Github Token (opens new window)。点击
Generate new token
按钮,生成一个新的 Token - 为项目打上标签。
- 执行自动发布流程。
# 设置token
$ export GITHUB_TOKEN="YOUR_GH_TOKEN"
# or
$ export GITLAB_TOKEN="YOUR_GL_TOKEN"
# 打标签
$ git tag -a v0.1.0 -m "release v0.1.0"
$ git push origin v0.1.0
# 执行自动发布
$ ./goreleaser.exe --rm-dist
2
3
4
5
6
7
8
9
10
11
12
以下为打包成功时的完整日志:
$ ./goreleaser.exe release --rm-dist
• releasing...
• loading config file file=.goreleaser.yml
• loading environment variables
• getting and validating git state
• building... commit=81edb2d831faf94ef223aae8833238c53d50944c latest tag=v4.1.0
• parsing tag
• running before hooks
• running hook=go mod download
• setting defaults
• checking distribution directory
• --rm-dist is set, cleaning it up
• loading go mod information
• build prerequisites
• writing effective config file
• writing config=dist\config.yaml
• generating changelog
• writing changelog=dist\CHANGELOG.md
• building binaries
• building binary=dist\markdownToConfluence_linux_386\markdownToconfluence
• building binary=dist\markdownToConfluence_windows_386\markdownToconfluence.exe
• building binary=dist\markdownToConfluence_linux_amd64\markdownToconfluence
• building binary=dist\markdownToConfluence_windows_amd64\markdownToconfluence.exe
• building binary=dist\markdownToConfluence_linux_arm64\markdownToconfluence
• building binary=dist\markdownToConfluence_windows_arm64\markdownToconfluence.exe
• building binary=dist\markdownToConfluence_darwin_arm64\markdownToconfluence
• building binary=dist\markdownToConfluence_darwin_amd64\markdownToconfluence
• archives
• creating archive=dist\markdownToConfluence_4.1.0_linux_i386.tar.gz
• creating archive=dist\markdownToConfluence_4.1.0_windows_x86_64.tar.gz
• creating archive=dist\markdownToConfluence_4.1.0_windows_i386.tar.gz
• creating archive=dist\markdownToConfluence_4.1.0_darwin_x86_64.tar.gz
• creating archive=dist\markdownToConfluence_4.1.0_linux_arm64.tar.gz
• creating archive=dist\markdownToConfluence_4.1.0_darwin_arm64.tar.gz
• creating archive=dist\markdownToConfluence_4.1.0_windows_arm64.tar.gz
• creating archive=dist\markdownToConfluence_4.1.0_linux_x86_64.tar.gz
• calculating checksums
• storing release metadata
• writing file=dist\artifacts.json
• scm releases
• creating or updating release repo=wyw-s/markdownToConfluence tag=v4.1.0
• release updated url=https://github.com/wyw-s/markdownToConfluence/releases/tag/v4.1.0
• uploading to release file=dist\checksums.txt name=checksums.txt
• uploading to release file=dist\markdownToConfluence_4.1.0_windows_i386.tar.gz name=markdownToConfluence_4.1.0_windows_i386.tar.gz
• uploading to release file=dist\markdownToConfluence_4.1.0_windows_arm64.tar.gz name=markdownToConfluence_4.1.0_windows_arm64.tar.gz
• uploading to release file=dist\markdownToConfluence_4.1.0_linux_x86_64.tar.gz name=markdownToConfluence_4.1.0_linux_x86_64.tar.gz
• uploading to release file=dist\markdownToConfluence_4.1.0_windows_x86_64.tar.gz name=markdownToConfluence_4.1.0_windows_x86_64.tar.gz
• uploading to release file=dist\markdownToConfluence_4.1.0_linux_arm64.tar.gz name=markdownToConfluence_4.1.0_linux_arm64.tar.gz
• uploading to release file=dist\markdownToConfluence_4.1.0_darwin_arm64.tar.gz name=markdownToConfluence_4.1.0_darwin_arm64.tar.gz
• uploading to release file=dist\markdownToConfluence_4.1.0_darwin_x86_64.tar.gz name=markdownToConfluence_4.1.0_darwin_x86_64.tar.gz
• uploading to release file=dist\markdownToConfluence_4.1.0_linux_i386.tar.gz name=markdownToConfluence_4.1.0_linux_i386.tar.gz
• announcing
• release succeeded after 20.16s
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
当看到
release succeeded after 8.38s
时说明打包并发布成功了。此时你可以到github中release中查看发布的情况
# 注意事项
# 出现gcc
类似的错误
running gcc failed: exec: "gcc": executable file not found in %PATH%
原因:打包编译需要用到此包,但是没有找到或版本不对。主要就是一个gcc安装问题,windows下比较麻烦的就是一定要安装对应的版本32位或者64位。
解决:下载安装 传送门 (opens new window)。点击第一个【最小的在线安装程序】进行下载。然后根据你的计算机来选择是32位还是64位。安装完成重新打包即可。
# 出现darwin_arm64
打包阶段可以正常打包但是到最后却输出一个错误;
# 以下为错误信息
• building binary=dist\markdownToConfluence_windows_386\markdownToconfluence.exe
⨯ release failed after 3.62s error=failed to build for darwin_amd64: exit status 2: # golang.org/x/sys/unix
..\..\pkg\mod\golang.org\x\sys@v0.0.0-20191026070338-33540a1f6037\unix\syscall_darwin.1_13.go:25:3: //go:linkname must refer to declared function or variable
..\..\pkg\mod\golang.org\x\sys@v0.0.0-20191026070338-33540a1f6037\unix\zsyscall_darwin_amd64.1_13.go:27:3: //go:linkname must refer to declared function or variable
..\..\pkg\mod\golang.org\x\sys@v0.0.0-20191026070338-33540a1f6037\unix\zsyscall_darwin_amd64.1_13.go:40:3: //go:linkname must refer to declared function or variable
..\..\pkg\mod\golang.org\x\sys@v0.0.0-20191026070338-33540a1f6037\unix\zsyscall_darwin_amd64.go:28:3: //go:linkname must refer to declared function or variable
..\..\pkg\mod\golang.org\x\sys@v0.0.0-20191026070338-33540a1f6037\unix\zsyscall_darwin_amd64.go:43:3: //go:linkname must refer to declared function or variable
..\..\pkg\mod\golang.org\x\sys@v0.0.0-20191026070338-33540a1f6037\unix\zsyscall_darwin_amd64.go:59:3: //go:linkname must refer to declared function or variable
..\..\pkg\mod\golang.org\x\sys@v0.0.0-20191026070338-33540a1f6037\unix\zsyscall_darwin_amd64.go:75:3: //go:linkname must refer to declared function or variable
..\..\pkg\mod\golang.org\x\sys@v0.0.0-20191026070338-33540a1f6037\unix\zsyscall_darwin_amd64.go:90:3: //go:linkname must refer to declared function or variable
..\..\pkg\mod\golang.org\x\sys@v0.0.0-20191026070338-33540a1f6037\unix\zsyscall_darwin_amd64.go:105:3: //go:linkname must refer to declared function or variable
..\..\pkg\mod\golang.org\x\sys@v0.0.0-20191026070338-33540a1f6037\unix\zsyscall_darwin_amd64.go:121:3: //go:linkname must refer to declared function or variable
..\..\pkg\mod\golang.org\x\sys@v0.0.0-20191026070338-33540a1f6037\unix\zsyscall_darwin_amd64.go:121:3: too many errors
2
3
4
5
6
7
8
9
10
11
12
13
14
15
执行以下语句即可解决:
go get -u golang.org/x/sys
1