golang的ci/cd持续集成部署实现

网友投稿 1249 2022-05-29

基本实现流程:

用户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

#运行测试容器

golang的ci/cd持续集成部署实现

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,实现自动化部署。

容器 镜像服务

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《C编程技巧:117个问题解决方案示例 》 —3.10 对两个矩阵求和
下一篇:JSP 在 tomcat 服务器下无法连接 MySql 问题解决方法
相关文章