# +====================================================================== # | 模块: Jenkins 镜像构建文件 # | 说明: CI 场景将已编译的 Go 二进制打包为应用镜像(编译在 Jenkins 侧完成,镜像内不编译) # | 构建上下文为项目根目录,由 Jenkins 流水线注入构建参数,例如: # | docker build -f .jenkins/Dockerfile \ # | --build-arg VAR_BASE_IMAGE=alpine:3.22 \ # | --build-arg VAR_GOFILE=admin-server \ # | --build-arg VAR_GOFILE_PATH=bin/admin-server \ # | --build-arg VAR_PORT=8000 \ # | -t easygoadmin:$TAG . # +====================================================================== # 基础镜像地址(如 alpine:3.22,可指向公司私服预置镜像) ARG VAR_BASE_IMAGE # 基础镜像 FROM ${VAR_BASE_IMAGE} # 镜像作者 LABEL MAINTAINER="easygoadmin@163.com" # 端口参数(后端监听端口,与 manifest/config/config.yaml 的 server.address 一致) ARG VAR_PORT # 二进制文件名参数(不含路径,如 admin-server) ARG VAR_GOFILE # 二进制文件路径参数(Jenkins 编译产物在构建上下文中的相对路径,如 bin/admin-server) ARG VAR_GOFILE_PATH # 设置端口 ENV PORT=${VAR_PORT} # 设置二进制文件名 ENV GOFILE=${VAR_GOFILE} # 设置时区(日志落盘与 gcron 定时任务依赖系统时区) ENV TZ=Asia/Shanghai # 暴露端口 EXPOSE ${PORT} # 创建工作区 RUN mkdir -p /opt/apps # 设置工作区 WORKDIR /opt/apps # 拷贝运行时资产(四件缺一不可,路径相对项目根) # manifest/config 运行时配置(敏感项运行时经 GF_GENV_ 环境变量覆盖,不改镜像内文件) # manifest/data ip2region.xdb 归属地库 # resource 验证码字体、swagger 页面等静态资源 # templates 代码生成器模板(tool 域运行时读取) COPY manifest ./manifest COPY resource ./resource COPY templates ./templates # 拷贝 Jenkins 编译产物(Go 静态编译 CGO_ENABLED=0,直接可执行) # 编译建议:CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o bin/admin-server main.go COPY ${VAR_GOFILE_PATH} ./ # 启动命令 # ${GOFILE} 为编译产物文件名,如 admin-server # 配置覆盖示例(Jenkins 部署阶段注入,勿写死镜像): # -e GF_GENV_DATABASE_DEFAULT_LINK="mysql:...@tcp(host:3306)/easygoadmin.goframe.elevue?..." # -e GF_GENV_REDIS_DEFAULT_ADDRESS="host:6379" # -e GF_GENV_FILE_UPLOADDIR="/data/upload" # 容器内必须覆盖(配置默认为开发机绝对路径) CMD ["sh", "-c", "./${GOFILE}"]