美文网首页
gitlab,k8s 的持续集成&发布

gitlab,k8s 的持续集成&发布

作者: shoyu666 | 来源:发表于2020-03-08 11:22 被阅读0次

目标:

  • 本文介绍 基于 gitlab + k8s 的持续集成&发布的环境。
  • 关于gitlab/docker/k8s本身细节的介绍,文章网上非常多,请自行查阅
流程
我们先从全局视角出发

java应用的发布流程(这里以java应用为例子,js等其它应用类似):
发布到k8s
image.png
k8s管理容器,其容器的运行环境一般为docker。
所有下面docker镜像也可以发布到docker,不依赖k8s。
本文主要面向k8s,但也适用于直接docker。
image.png
上面发布到k8s流程结合自动化和k8s(gitlab cicd)的整体流程为。
image.png
提交代码
提交代码这里最关键的一点是要跟gitlab的cicd关联,这样才能让gitlab为你运行特定的任务。
核心文件:.gitlab-ci.yml
创建.gitlab-ci.yml并放在项目根目录。
.gitlab-ci.yml
#结构
build_and_publish:#任务名称
script:
   echo "hello word" #执行的shell命令
gitrunner
2运行的pielines实际是运行在gitlabrunner上,运行的内容就是.gitlab-ci.yml script片段定义的shell命令。
gitlabrunner是单独安装并注册到gitlab的,是gitlab cicd的任务运行器,
这里以机器安装和shell命令模式为例子(gitlabruner安装方式为机器和docker,运行脚本模式为shell,docker...等,安装细节自定google)
我们已经有了.gitlab-ci.yml(执行什么命令) 和 gitrunner(命令的执行者),那么如何达到编译和发布的目的就很清楚了,就是在.gitlab-ci.yml
定义我们的任务。
//编译
java编译一般是
mvn clean package
//打包镜像
docker build -t .

//当然也可以用mvn插件把编译和打包镜像一起
mvn clean package docker:build //包含了编译和打包镜像

//发布镜像到仓库
docker push registry-vpc.cn-hangzhou.aliyuncs.com/私有仓库名/...  //这里发布到阿里云私有仓库

//通过k8s命令更新应用
kubectl set image deploy...
上面的单独命令组合在一起就是.gitlab-ci.yml的定义
build_and_publish:
  script:
    - mvn clean package docker:build
    - docker push registry-vpc.cn-hangzhou.aliyuncs.com...
      kubectl set image deploy...
//看一个相对完成的定义
stages:
  - build  #命令所属的阶段,名字自己定义,一般为build,release等

build_and_publish:
  stage: build #指定任务所属的阶段
  only:
    - /^release\/.+/  #release开头的分支有变动时触发任务
  script:
    - mvn clean package docker:build
    - docker push registry-vpc.cn-hangzhou.aliyuncs.com...
      kubectl set image deploy...  
总结下:
release分支有变化(有提交,有merge等),
由于定义了.gitlab-ci.yml,gitlab会让gitlabruner执行.gitlab-ci.yml script定义的内容
以上命令涵盖了编译代码,打包镜像,上传镜像到仓库,通知k8s更新应用镜像。

相关文章

网友评论

      本文标题:gitlab,k8s 的持续集成&发布

      本文链接:https://www.haomeiwen.com/subject/qdhddhtx.html