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

2020-07-03 10:07:13 浏览数 (1)

文档版本

v 1.0

更新日期

2017.12.29

作者

追马

扩散范围

全网

  • 了解jenkins集成k8s需要处理哪些事情
  • 实现方式的pipeline的基本框架

一、准备工作 1.1、环境准备 软件版本功能jenkins2.95提供平台Pipeline2.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,每个公司的场景不太一样,仅供参考

代码语言:javascript复制
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

0 人点赞