以下是Golang项目在CentOS上的自动化打包方案,结合工具与脚本实现不同场景需求:
Shell脚本
编写脚本实现编译、压缩、版本管理等操作,例如:
#!/bin/bash
PROJECT_DIR="/path/to/project"
VERSION=$(git rev-parse --short HEAD)
OUTPUT_DIR="/dist"
mkdir -p $OUTPUT_DIR
GOOS=linux GOARCH=amd64 go build -ldflags "-X main.version=$VERSION" -o $OUTPUT_DIR/app-$VERSION-linux-amd64 $PROJECT_DIR/main.go
tar -czf $OUTPUT_DIR/app-$VERSION-linux-amd64.tar.gz $OUTPUT_DIR/app-$VERSION-linux-amd64
通过crontab
定时执行脚本实现自动化。
Makefile
定义构建规则,简化命令:
build:
GOOS=linux GOARCH=amd64 go build -o bin/app main.go
package:
tar -czf app.tar.gz bin/app
执行make build
或make package
即可。
Docker
通过Dockerfile定义环境,实现跨平台打包:
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN GOOS=linux GOARCH=amd64 go build -o /app/main
FROM alpine:latest
COPY --from=builder /app/main /app/main
CMD ["/app/main"]
构建镜像:docker build -t myapp .
,运行容器即可部署。
CI/CD工具集成
.drone.yml
或.gitlab-ci.yml
实现自动构建、测试、打包,例如:# Drone示例
steps:
- name: build
image: golang:1.21
commands:
- go mod download
- GOOS=linux GOARCH=amd64 go build -o app-linux main.go
依赖管理与版本控制
静态编译与优化
使用-ldflags="-extldflags='-static'"
生成静态二进制文件,避免依赖外部库。
结合UPX
工具压缩二进制文件体积:upx --best app-linux
。
rpmbuild
将Go程序打包为RPM包,适合CentOS系统安装。scp
或rsync
将打包文件上传至服务器,结合脚本实现无人值守部署。