背景
Jenkins 发布 go 镜像到 k8s 记录
安装
jenkins
安装略过
go
go 的官网国内无法访问,所以从国内拉取安装包。
wget https://mirrors.ustc.edu.cn/golang/go1.18.8.linux-amd64.tar.gz
tar zxvf go1.18.8.linux-amd64.tar.gz -C /usr/local
cat <<EOF>> /etc/profile.d/go.sh
#golang env config
export GO111MODULE=on
export GOROOT=/usr/local/go
export GOPATH=/data/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY=https://proxy.golang.com.cn,direct
EOF
source /etc/profile
# 软连接到 /usr/bin 目录,jenkins 才能调用到
ln -fs /usr/local/go/bin/* /usr/bin/
变量 | 解释 |
---|---|
GO111MODULE=on | 不知道 |
GOROOT=/usr/local/go | 解压目录 |
GOPATH=/data/gopath | 依赖包放置的地方,类似 maven 的 .m2 目录 |
PATH=$PATH:$GOROOT/bin:$GOPATH/bin | 加入环境变量 |
GOPROXY=https://proxy.golang.com.cn,direct | 国内依赖包镜像源,由于国内镜像源未包含所有的依赖包,而direct 的作用是当代理仓库没有回源站拉取。direct 不能省略 |
测试
go version
前置知识
go 如何引用本地依赖
给开发看的
方法有很多种:https://blog.csdn.net/qingchuwudi/article/details/107119273
这里只说懒人版,举个例子:
xx 现在需要用 xx-api 这个依赖包,在 jenkins 新建 xx-api 任务,此时目录为: /data/jenkins_data/xx-api
修改 xx 的 go.mod 写入路径即可直接使用 xx-api 这个依赖
module main
go 1.14
// 替换规则
replace (
github.com/123/xx-api => /data/jenkins_data/xx-api // 这里配置
)
// 源地址
require (
github.com/123/xx-api
)
go 下载依赖
# 到 .go 的目录下执行
go mod tidy
go 打包命令
go build -o xx xx.go
go 打包出来的是二进制文件,./
即可执行,所以将二进制添加到基础镜像即可。
如对镜像大小有要求推荐使用 Alpine Linux,5M 左右,但因为 Alpine Linux 太过精简,有时会缺少一些库文件。保守起见可使用 Ubuntu 或 Debian 。
基础镜像Dockerfile
FROM debian:bullseye
ENV TZ=Asia/Shanghai \
DEBIAN_FRONTEND=noninteractive
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo ${TZ} > /etc/timezone \
&& dpkg-reconfigure --frontend noninteractive tzdata \
&& rm -rf /var/lib/apt/lists/*
编译基础镜像
docker build -t xxdebian .
go镜像Dockerfile
FROM smydebian
ARG xx
ARG yy
ARG ll
ARG pp
ENV yy=${yy}
ENV xx=${xx}
ENV ll=${ll}
ENV pp=${pp}
ADD xxxx /bin/xxxx
EXPOSE 9033
CMD [ "/bin/xxxx" ]
发布到 k8s
发布同 JAVA 流程