[Jenkins]5分钟系列之十Jenkins pipeline和k8s集成

故事扮演 提交于 2020-10-28 04:12:02
文档版本 v 1.0
更新日期 2017.12.29
作者 追马
扩散范围 全网

阅读本文能学到的知识点

  • 了解jenkins集成k8s需要处理哪些事情

  • 实现方式的pipeline的基本框架

一、准备工作

1.1、环境准备

软件 版本 功能
jenkins 2.95 提供平台
Pipeline 2.5 提供平台

1.2、推荐阅读

分分钟部署安装jenkins

二、jenkins和k8s集成相关事宜

2.1、大致的流程相关

  • 2.1.1、环境指定

    • 这个环境和k8s的namespace是对应的

  • 2.1.2、拉取代码

    • 需要做到可以自定义代码分支

  • 2.1.3、预编译

    • 不同语言的操作方式还不太一样

    • 可以放到容器内操作,也可以放到Jenkins机器上操作

  • 2.1.4、docker build

    • 打包镜像

    • build image的时候一定要注意image的tag的定义,如何更好的和环境(Production, Staging, Testing)结合

  • 2.1.5、docker push

    • 提交镜像到私有镜像仓库

    • 这里推荐使用harbor

  • 2.1.6、清理发布代码预编译目录

    • 确保每次代码发布都是干净的

    • 代价就是每次构建耗时和磁盘IO

  • 2.1.7、生成k8s的可用yaml文件

    • 根据提供的环境变量来生成可用的应用yaml

    • 可以选用多种方式实现yaml文件的渲染,就看你熟悉那种

  • 2.1.8、把生成后的yaml文件推送到远端,并启动

    • 可以使用Ansible、Saltstack来实现这部分的功能

    • 需要注意第一次启动和后续启动的操作方式的不一样的问题

  • 2.1.9、DNS api 接口调用进行域名映射

    • 针对一些对外访问的服务需要进行域名映射操作

    • 需要对外提供访问入口的服务,这里实现ingress nginx + 外部DNS来实现域名解析和访问

  • 1.10、通知

    • 失败通知?成功通知?一直通知等操作

2.2、简单的pipeline demo,每个公司的场景不太一样,仅供参考


pipeline {
   // 在任意节点上执行
   agent any
   // 设定时间戳,在console log上会有显示
   options {
       timestamps()  
   }

   // 全局环境变量
   environment {
       // 定义一些代码仓库的根目录,work目录相关的属性
       name = "zhuima"
   }

   // workflow,stages只能出现一次
   stages {
       // workflow中的每一步都是一个单独的动作,可以在不同的agent上运作
       stage('\u2705 1、获取代码') {
           steps {
               script {
                   echo  "\u2705 1、获取代码"
               }
           }
       }

       stage('\u2705  2、代码预编译') {
           // 不同语言操作方式不太一样
           steps {
               echo "\u2705  2、代码预编译"
           }  
       }

       stage('\u2705 3、build镜像') {
           // 看自己场景
           steps {
               echo "\u2705 3、build镜像"
           }
           
       }

       stage('\u2705 4、打tag上传harbor') {
           // 推送iamges到harbor镜像
           steps {
              echo "\u2705 4、打tag上传harbor"
           }
       }

       stage('\u2705 5、清理系统上的镜像') {
           // 清理本地的images,防止本地空间的占用
           steps {
               echo "\u2705 5、清理系统上的镜像"
           }
       }

       stage('\u2705 6、创建k8s yaml文件') {
           // 生成yaml文件
           steps {
               echo "\u2705 6、创建k8s yaml文件"
           }
       }

       stage('\u2705 7、运行yaml文件') {
           // 推送第6步生成的yaml文件到远程机器上,然后在远程机器上执行kubectl动作
           steps {
               echo "运行yaml文件"
           }
       }

       stage('\u2705 8、DNS进行域名注册') {
           steps {
               echo "DNS进行域名注册"
           }
       }
         
       stage('\u2705 9、清理构建目录') {
           steps {
               echo "\u2705 9、清理构建目录"
           }
       }

       stage('\u2705 10、清理历史构建记录') {
           steps {
               script {
                   properties([[$class: 'BuildDiscarderProperty',
                   strategy: [$class: 'LogRotator', numToKeepStr: '10']]])
               }
           }
       }

   }
   // 无论stages执行结果如何,post始终会执行
   post {
       always {
           echo "WorkFlow Finished, ByeBye!"
       }
   }
}


三、demo展示

四、参考文档

官方文档: https://jenkins.io/doc/book/pipeline/

w3cschool教程: https://www.w3cschool.cn/jenkins/list/

五、下期预告

  • 5分钟系列收官,喜迎2018

本文分享自微信公众号 - 追马Linux(zhuima_k8s)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!