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

举报
在别处 发表于 2019/01/27 13:32:43 2019/01/27
【摘要】 基本实现流程: 用户git代码提交 ----》 Jenkins 根据 Dockerfile + build.sh 脚本执行构建 ------》输出 bin文件,完成容器镜像打包构建 -------》 运行测试容器,提供测试 --------》 测试通过,更新镜像到线上harbor仓库------》 更新kubernets 资源文件,完成部署/升级应用。 ...

     基本实现流程:

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。