以下是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
將打包文件上傳至服務器,結合腳本實現無人值守部署。