徐晓伟
fee4fb08a7
https://www.gitlink.org.cn/Gitlink/forgeplus/issues/3966 |
||
---|---|---|
.devops | ||
.github/workflows | ||
api | ||
builder | ||
buildinfo | ||
command | ||
constant | ||
docker | ||
flag | ||
static | ||
.gitignore | ||
.gitlab-ci.yml | ||
LICENSE | ||
README.md | ||
gitmoji.md | ||
go.mod | ||
go.sum | ||
main.go | ||
main_test.go | ||
sync.yml |
README.md
持续集成(CI)、持续交付(CD)、持续部署(CD) 发布 脚手架
为简化开发工作、提高生产率、解决常见问题而生
支持的系统
- Linux amd64、arm64
- Windows amd64、arm64
- Mac amd64、arm64
- LoongArch 64-bit
构建
本项目发布在 GitHub 进行构建,并使用构建后的程序将自己发布到各大代码托管平台,发布过程参见: GitHub Actions
下载
支持的功能
- 一键发布到 github,可包含产物上传
- 一键发布到 gitlab,可包含产物上传,可自定义域名(支持自建 gitlab),支持将产物文件名、链接导出为 map,可供 gitee 使用
- 一键发布到 gitee,由于 gitee 暂不支持提供上传产物的 API 接口, 本工具支持提供 json 文件(map 形式,键:代表文件名,值:代表下载链接)作为产物,本项目使用 GitLink 作为 gitee 产物链接
- 一键发布到 gitlink,可包含产物上传(需要等到官方开放 token 功能,或者联系官方人员申请 token 才能使用), 本工具支持提供 json 文件(map 形式,键:代表文件名,值:代表下载链接)作为产物
开发命令
get
go env -w GOPROXY=https://goproxy.cn,direct
# go env -w GOPROXY=https://proxy.golang.org,direct
# go env -w GOPROXY=https://goproxy.io,direct
# go env -w GOPROXY=https://mirrors.aliyun.com/goproxy,direct
# go env -w GOPROXY=https://mirrors.cloud.tencent.com/go,direct
go get -u github.com/urfave/cli/v2
go get -u github.com/xuxiaowei-com-cn/git-go@main
go get -u github.com/xuxiaowei-com-cn/go-gitlink/v2
go get -u gopkg.in/yaml.v3
mod
go mod tidy
go mod download
run
go run main.go
run help
- Windows 环境为 %xxx%
- Linux 环境为 $xxx
go run main.go --help
$ go run main.go --help
NAME:
cicd-release - 持续集成(CI)、持续交付(CD)、持续部署(CD) 发布 脚手架
USAGE:
cicd-release [global options] command [command options] [arguments...]
VERSION:
dev
AUTHOR:
徐晓伟 <xuxiaowei@xuxiaowei.com.cn>
COMMANDS:
pre-release 预发布
release 发布
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--help, -h show help
--version, -v print the version
COPYRIGHT:
徐晓伟工作室 <xuxiaowei@xuxiaowei.com.cn>
- 预发布
$ go run main.go pre-release --help
NAME:
cicd-release pre-release - 预发布
USAGE:
cicd-release pre-release command [command options] [arguments...]
COMMANDS:
gitee Gitee 预发布
gitlab GitLab 预发布,支持自定义实例(域名)
github GitHub 预发布
gitlink GitLink 预发布
help, h Shows a list of commands or help for one command
OPTIONS:
--release-name value 发布名称
--release-body value 发布详情
--tag value 发布标签
--draft 草稿 (default: false)
--package-name value 包名,即:GitLab 产物储存 URL 前缀。
只能包含小写字母(az)、大写字母(AZ)、数字(0-9)、点(.)、连字符(-)或下划线(_) (default: "cicd-release")
--auto-create-tag 是否自动创建不存在的标签 (default: false)
--milestones value [ --milestones value ] 发布里程碑
--artifacts value [ --artifacts value ] 发布产物(包含路径)。
可以包含多级路径。
文件名(除路径外,所有文件名均不能出现重复):只能包含小写字母(az)、大写字母(AZ)、数字(0-9)、点(.)、连字符(-)或下划线(_)。
--gitee-repository value Gitee 仓库。
如:https://gitee.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为:xuxiaowei-com-cn/cicd-release [%GITEE_REPO%]
--gitee-username value Gitee 用户名
--gitee-token value Gitee Token
--gitlab-instance value Gitlab 实例(协议 + 域名) (default: "https://gitlab.com") [%CI_SERVER_URL%]
--gitlab-api value Gitlab API (default: "api/v4")
--gitlab-repository value Gitlab 仓库。
如:https://gitlab.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为:xuxiaowei-com-cn/cicd-release [%CI_PROJECT_PATH%]
--gitlab-username value Gitlab 用户名 [%GITLAB_USER_LOGIN%]
--gitlab-token value Gitlab Token
--gitlab-export-assets-file-name value Gitlab 导出资源文件名称。
主要用于发布到 Gitee 时在版本发布中新增产物下载地址(Gitee 没有上传产物的 API)。
导出格式为 map,键:代表文件名,值:代表下载链接
--github-repository value Github 仓库。
如:https://github.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为:xuxiaowei-com-cn/cicd-release [%GITHUB_REPOSITORY%]
--github-username value Github 用户名 [%GITHUB_ACTOR%]
--github-token value Github Token [%GITHUB_TOKEN%]
--gitlink-repository value Gitlink 仓库。
如:https://gitlink.org.cn/xuxiaowei-com-cn/cicd-release.git 仓库应该为:xuxiaowei-com-cn/cicd-release
--gitlink-username value Gitlink 用户名
--gitlink-token value Gitlink Token
--gitlink-cookie value Gitlink Cookie
--gitlink-export-assets-file-name value Gitlink 导出资源文件名称。
主要用于发布到 Gitee 时在版本发布中新增产物下载地址(Gitee 没有上传产物的 API)。
导出格式为 map,键:代表文件名,值:代表下载链接
--gitlink-attachments-prefix value Gitlink 附件URL前缀。 (default: "https://www.gitlink.org.cn/api/attachments")
--help, -h show help
- 发布
$ go run main.go release --help
NAME:
cicd-release release - 发布
USAGE:
cicd-release release command [command options] [arguments...]
COMMANDS:
gitee Gitee 发布
gitlab GitLab 发布,支持自定义实例(域名)
github GitHub 发布
gitlink GitLink 发布
help, h Shows a list of commands or help for one command
OPTIONS:
--release-name value 发布名称
--release-body value 发布详情
--tag value 发布标签
--draft 草稿 (default: false)
--package-name value 包名,即:GitLab 产物储存 URL 前缀。
只能包含小写字母(az)、大写字母(AZ)、数字(0-9)、点(.)、连字符(-)或下划线(_) (default: "cicd-release")
--auto-create-tag 是否自动创建不存在的标签 (default: false)
--milestones value [ --milestones value ] 发布里程碑
--artifacts value [ --artifacts value ] 发布产物(包含路径)。
可以包含多级路径。
文件名(除路径外,所有文件名均不能出现重复):只能包含小写字母(az)、大写字母(AZ)、数字(0-9)、点(.)、连字符(-)或下划线(_)。
--gitee-repository value Gitee 仓库。
如:https://gitee.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为:xuxiaowei-com-cn/cicd-release [%GITEE_REPO%]
--gitee-username value Gitee 用户名
--gitee-token value Gitee Token
--gitlab-instance value Gitlab 实例(协议 + 域名) (default: "https://gitlab.com") [%CI_SERVER_URL%]
--gitlab-api value Gitlab API (default: "api/v4")
--gitlab-repository value Gitlab 仓库。
如:https://gitlab.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为:xuxiaowei-com-cn/cicd-release [%CI_PROJECT_PATH%]
--gitlab-username value Gitlab 用户名 [%GITLAB_USER_LOGIN%]
--gitlab-token value Gitlab Token
--gitlab-export-assets-file-name value Gitlab 导出资源文件名称。
主要用于发布到 Gitee 时在版本发布中新增产物下载地址(Gitee 没有上传产物的 API)。
导出格式为 map,键:代表文件名,值:代表下载链接
--github-repository value Github 仓库。
如:https://github.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为:xuxiaowei-com-cn/cicd-release [%GITHUB_REPOSITORY%]
--github-username value Github 用户名 [%GITHUB_ACTOR%]
--github-token value Github Token [%GITHUB_TOKEN%]
--gitlink-repository value Gitlink 仓库。
如:https://gitlink.org.cn/xuxiaowei-com-cn/cicd-release.git 仓库应该为:xuxiaowei-com-cn/cicd-release
--gitlink-username value Gitlink 用户名
--gitlink-token value Gitlink Token
--gitlink-cookie value Gitlink Cookie
--gitlink-export-assets-file-name value Gitlink 导出资源文件名称。
主要用于发布到 Gitee 时在版本发布中新增产物下载地址(Gitee 没有上传产物的 API)。
导出格式为 map,键:代表文件名,值:代表下载链接
--gitlink-attachments-prefix value Gitlink 附件URL前缀。 (default: "https://www.gitlink.org.cn/api/attachments")
--help, -h show help
test
go test ./... -v
build
go build
# GOOS=:设置构建的目标操作系统(darwin | freebsd | linux | windows)
# GOARCH=:设置构建的目标操作系统(386 | amd64 | arm | arm64)
# -v:打印编译过程中的详细信息
# -ldflags:设置在编译时传递给链接器的参数
# -ldflags "-s -w -buildid="
# -s: 删除符号表信息,减小可执行文件的大小。
# -w: 删除调试信息,使可执行文件在运行时不会打印调试信息。
# -buildid=: 删除构建ID,使可执行文件在运行时不会打印构建ID。
# -trimpath:去掉所有包含 go path 的路径
# -o:指定构建后输出的文件名
-
Windows
- amd64
go build -o buildinfo/buildinfo.exe buildinfo/buildinfo.go GOOS=windows GOARCH=amd64 go build -v -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo.exe now) -X main.Compiler= -X main.GitCommitBranch=$(buildinfo/buildinfo.exe commitBranch) -X main.GitCommitSha=$(buildinfo/buildinfo.exe commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo.exe commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo.exe commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo.exe commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo.exe git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo.exe commitTag) -X main.GoVersion=$(buildinfo/buildinfo.exe goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=windows/amd64 -X main.CiPipelineId= -X main.CiJobId=" -trimpath -o cicd-release-windows-amd64.exe .
- arm64
go build -o buildinfo/buildinfo.exe buildinfo/buildinfo.go GOOS=windows GOARCH=arm64 go build -v -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo.exe now) -X main.Compiler= -X main.GitCommitBranch=$(buildinfo/buildinfo.exe commitBranch) -X main.GitCommitSha=$(buildinfo/buildinfo.exe commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo.exe commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo.exe commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo.exe commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo.exe git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo.exe commitTag) -X main.GoVersion=$(buildinfo/buildinfo.exe goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=windows/arm64 -X main.CiPipelineId= -X main.CiJobId=" -trimpath -o cicd-release-windows-arm64.exe .
- amd64
-
Linux
- amd64
go build -o buildinfo/buildinfo buildinfo/buildinfo.go GOOS=linux GOARCH=amd64 go build -v -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$(buildinfo/buildinfo commitBranch) -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=linux/amd64 -X main.CiPipelineId= -X main.CiJobId=" -trimpath -o cicd-release-linux-amd64 .
- arm64
go build -o buildinfo/buildinfo buildinfo/buildinfo.go GOOS=linux GOARCH=arm64 go build -v -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$(buildinfo/buildinfo commitBranch) -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=linux/arm64 -X main.CiPipelineId= -X main.CiJobId=" -trimpath -o cicd-release-linux-arm64 .
- amd64
-
LoongArch
- 64-bit
go build -o buildinfo/buildinfo buildinfo/buildinfo.go GOOS=linux GOARCH=loong64 go build -v -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$(buildinfo/buildinfo commitBranch) -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=darwin/amd64 -X main.CiPipelineId= -X main.CiJobId=" -trimpath -o cicd-release-loong64 .
- 64-bit
-
Darwin
- amd64
go build -o buildinfo/buildinfo buildinfo/buildinfo.go GOOS=darwin GOARCH=amd64 go build -v -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$(buildinfo/buildinfo commitBranch) -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=darwin/amd64 -X main.CiPipelineId= -X main.CiJobId=" -trimpath -o cicd-release-darwin-amd64 .
- arm64
go build -o buildinfo/buildinfo buildinfo/buildinfo.go GOOS=darwin GOARCH=arm64 go build -v -ldflags "-s -w -buildid= -X main.BuildDate=$(buildinfo/buildinfo now) -X main.Compiler= -X main.GitCommitBranch=$(buildinfo/buildinfo commitBranch) -X main.GitCommitSha=$(buildinfo/buildinfo commitSha) -X main.GitCommitShortSha=$(buildinfo/buildinfo commitShortSha) -X main.GitCommitTag=$(buildinfo/buildinfo commitTag) -X main.GitCommitTimestamp=$(buildinfo/buildinfo commitTimestamp) -X main.GitTreeState=$(buildinfo/buildinfo git-tree-state) -X main.GitVersion=$(buildinfo/buildinfo commitTag) -X main.GoVersion=$(buildinfo/buildinfo goShortVersion) -X main.Major= -X main.Minor= -X main.Revision= -X main.Platform=darwin/arm64 -X main.CiPipelineId= -X main.CiJobId=" -trimpath -o cicd-release-darwin-arm64 .
- amd64
文档
- GitLab API 文档
- Gitee API 文档
- GitHub API 文档