文档中心 容器服务 CI/CD与容器服务的DevOps实践

CI/CD与容器服务的DevOps实践

更新时间:2020-07-01 19:06:21

CI/CD与容器服务的DevOps实践

CI/CD背景介绍

持续构建与发布是DevOps中必不可少的一个环节,目前大多公司都采用 Jenkins 集群来搭建CI/CD 流程,传统的 Jenkins Slave 一主多从方式会存在一些问题,比如:主 Master 发生单点故障时,整个流程都不可用了;每个 Slave 的配置环境不一样,来完成不同语言的编译打包等操作,但是这些差异化的配置导致管理起来非常不方便,维护起来也是比较费劲;资源分配不均衡,有的 Slave 要运行的 job 出现排队等待,而有的 Slave 处于空闲状态;造成资源浪费,当 Slave 处于空闲状态时,也不会完全释放掉资源。

因此,我们渴望一种更高效更可靠的方式来完成这个 CI/CD 流程,而 Docker 虚拟化容器技术能很好的解决这个问题,下图是基于Kubernetes 搭建 Jenkins 集群的简单架构图。

羊毛党盯上了政府消费劵 惠民助商大计如何保障?
Jenkins Master 和 Jenkins Slave 以 Pod的形式运行在 Kubernetes 集群的节点上,Master运行在其中一个节点,并且将其配置数据存储到NFS上,Slave 运行在各个节点上,Slave并不是一直处于运行状态,它会按照需求动态的创建并自动删除。

jenkins工作流程大致为:当 Jenkins Master 接受到 Build 请求时,会根据配置的 Label 动态创建一个运行在Pod中的 Jenkins Slave并注册到Master上,当运行完Job后,这个 Slave 会被注销并且Pod也会自动删除。

本文档将演示一个java项目,从构建环境准备、代码编译、镜像构建、部署服务到Kubernetes集群的流程,展示DevOps案例。

配置Kubernetes集群信息

  1. 点击系统管理 > 全局安全配置 设置代理,如图指定端口为50000,jenkins master和slave之间通过50000端口通信。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?
  2. 更新jenkins service,增加服务端口,端口为上一步设置的端口
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?
  3. 点击系统管理 > 系统设置 > 新增一个云 > 选择 Kubernetes,填写 Kubernetes 和 Jenkins 配置信息。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?

说明:

  1. Name 处默认为 kubernetes,也可以修改为其他名称。
  2. Kubernetes URL 处我填写了 https://kubernetes.default 这里我填写了 Kubernetes Service 对应的 DNS 记录,或者直接填写外部 Kubernetes 的地址 https://:
  3. Jenkins URL 处填写 http://jenkins.jenkins:8080,要指定为 8080 端口,因为我们设置暴露 8080 端口。

配置完毕,可以点击 Test Connection 按钮测试是否能够连接的到 Kubernetes,如果显示 Connection test successful 则表示连接成功,配置没有问题。

  1. freestyle类型的job需要设置Kubernetes Pod Template,在job配置时可选择下图添加的Pod Labels,从而使用准备好的镜像启动一个Pod注册为Jenkins slave。Pipeline类型的job需要在pipeline脚本中添加Jenkins slave信息。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?

    说明:Docker image是准备好构建环境的镜像

  2. 添加Volumes,将宿主机上的目录挂载到容器中。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?

  3. 添加ImagePullSecrets,允许从镜像仓库pull镜。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?

说明:

  1. harbor-admin拥有从镜像仓库拉取镜像的权限。
  2. Jenkins-admin拥有发布应用到Kubernetes集群的权限。
  3. Node Selector选择在哪个node上启动Jenkins slave。

Jenkins freestyle job配置

  1. 创建一个freestyle类型job。
    在job中配置标签,标签设置成与Pod Template中的Labels一致,点击构建会使用准备好的镜像启动一个Pod,注册为Jenkins slave用于构建。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?
  2. 设置代码仓库,以SVN为例。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?
  3. 设置变量,在job配置和构建日志中隐藏密码。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?
  4. 代码编译。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?
  5. 镜像构建与推送。
    登录镜像仓库,构建镜像,推送镜像到镜像仓库。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?
  6. 服务部署。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?

Jenkins pipeline job配置

  1. 新建一个流水线(pipeline)类型的job。

  2. 选择Pipeline script,填入pipeline脚本。或者选择Pipeline script from SCM使用代码仓库里的pipeline。
    羊毛党盯上了政府消费劵 惠民助商大计如何保障?

整体解决方案概述

羊毛党盯上了政府消费劵 惠民助商大计如何保障?

  1. 开发人员更新代码到svn、git等代码仓库。

  2. 点击构建任务,后台启动一个准备好编译环境的容器进行编译构建。

  3. 可通过shell添加测试步骤,测试通过后继续下一步。

  4. 通过用户提供的Dockerfile文件构建镜像,并上传到镜像仓库。

  5. 部署应用到K8s集群。

  6. 可将构建结果发送给相关人员。

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!