golang的ci/cd持续集成部署实现
基本实现流程:
用户git代码提交 ----》 Jenkins 根据 Dockerfile + build.sh 脚本执行构建 ------》输出 bin文件,完成容器镜像打包构建 -------》 运行测试容器,提供测试 --------》 测试通过,更新镜像到线上harbor仓库------》 更新kubernets 资源文件,完成部署/升级应用。
(注:代码+Dockerfile+values.yaml 文件均放在 git仓库中。)
如下为Dockerfile示例:
1、 Dockerfile:
# BUILD 阶段
FROM golang:1.9 AS build
#ENV project=app
# 设置我们应用程序的工作目录
WORKDIR /go/src/app
# 添加所有需要编译的应用代码
COPY . /go/src/app
# 编译一个静态的go应用(在二进制构建中包含C语言依赖库)
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo .
# 设置我们应用程序的启动命令
CMD ["./app"]
# 生产阶段
FROM scratch AS prod
# 从buil阶段拷贝二进制文件
COPY --from=build /go/src/app/app .
EXPOSE 8080
CMD ["./app"]
2、valuse.yaml
存放一些需要更新的字段,例如:
服务名称
进程启动命令命令
需求的资源信息 (cpu /mem /disk )
。。。
( Jenkins 根据用户提供的 valuse ,执行build.sh 脚本,生成 k8s 需要的 manifest.yaml 文件 )
3、 build.sh
tag=`date +%Y%m%d%H%M%S`
#构建镜像
docker build . -t harbor/dev/app:$tag
#运行测试容器
docker run --name testgo -d -p 1111:8080 harbor/dev/app:$tag
#测试验证
curl 10.188.61.101:1111
#推送到镜像仓库
docker push harbor/dev/app:$tag
#更新资源文件
sed "s/app:latest/app:$tag/g" values.conf >online_manifest.yaml
#部署到生产环境
kubectl apply -f online_manifest.yaml
此种方案优势:
1、生成的镜像精简,部署高效,节省磁盘空间。
2、用户git提交后,jenkins 可自动完成镜像构建工作,减去人工干预。
3、结果kubernetes,实现自动化部署。
- 点赞
- 收藏
- 关注作者
评论(0)