美文网首页
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