ubuntu

如何简化Ubuntu Golang打包步骤

小樊
38
2025-11-16 20:15:12
栏目: 编程语言

简化 Ubuntu 上的 Golang 打包

一 本地一键打包脚本

#!/usr/bin/env bash
set -e

APP="myapp"
OUT_DIR="bin"
LDFLAGS="-s -w"   # 去除符号与调试信息,减小体积

# 目标三元组:可改为 linux/arm64、windows/amd64 等
GOOS=${GOOS:-linux}
GOARCH=${GOARCH:-amd64}

mkdir -p "$OUT_DIR"

CGO_ENABLED=0 GOOS=$GOOS GOARCH=$GOARCH \
  go build -ldflags "$LDFLAGS" -o "$OUT_DIR/$APP-$GOOS-$GOARCH" .

# 打包
tar czf "$OUT_DIR/$APP-$GOOS-$GOARCH.tar.gz" -C "$OUT_DIR" "$APP-$GOOS-$GOARCH"
echo "Saved: $OUT_DIR/$APP-$GOOS-$GOARCH.tar.gz"

二 使用 Make 自动化

APP      := myapp
OUT_DIR  := bin
LDFLAGS  := -s -w
GOOS     ?= linux
GOARCH   ?= amd64

BINARY  := $(OUT_DIR)/$(APP)-$(GOOS)-$(GOARCH)

.PHONY: all build cross clean dist

all: build

build:
	@mkdir -p $(OUT_DIR)
	CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) \
	  go build -ldflags '$(LDFLAGS)' -o $(BINARY) .

cross:
	@$(MAKE) build GOOS=linux   GOARCH=amd64
	@$(MAKE) build GOOS=linux   GOARCH=arm64
	@$(MAKE) build GOOS=windows GOARCH=amd64

dist: cross
	cd $(OUT_DIR) && sha256sum *.tar.gz > checksums.txt

clean:
	rm -rf $(OUT_DIR)

三 Docker 多阶段最小化镜像

# 构建阶段
FROM golang:1.22 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -trimpath -ldflags '-s -w' -o /app/myapp .

# 运行阶段(极小体积)
FROM scratch
COPY --from=builder /app/myapp /myapp
ENTRYPOINT ["/myapp"]

四 效率与体积优化要点

0
看了该问题的人还看了