使用Kubernetes-Jenkins实现CI/CD

简介: Author: Ramit Surana DevOps Zone DevOps Zone让你成为Sonatype Nexus的合作伙伴,Nexus套件能帮助你扩展DevOps交付过程,持续的将组件智能的集成到开发工具中,包括:Eclipse, IntelliJ, Jenkins, Bamboo, SonarQube等等,请看演示 关于持续集成和持续发布,Martin Fowler给出了最好的定义: “持续集成是一种软件开发实践,团队成员可以频繁的集成他们的工作,通常每个人一天至少一次集成甚至多次集成。

Author: Ramit Surana DevOps Zone
DevOps Zone让你成为Sonatype Nexus的合作伙伴,Nexus套件能帮助你扩展DevOps交付过程,持续的将组件智能的集成到开发工具中,包括:Eclipse, IntelliJ, Jenkins, Bamboo, SonarQube等等,请看演示

关于持续集成和持续发布,Martin Fowler给出了最好的定义:

“持续集成是一种软件开发实践,团队成员可以频繁的集成他们的工作,通常每个人一天至少一次集成甚至多次集成。每次集成都通过自动化构建和测试进行验证,以尽快检测集成错误。许多团队发现,这种方法可以显著减少集成的问题,并允许团队更加快速的开发。”

简介

本文将讨论和探索两个令人惊奇和相当有趣的技术。一个是Jenkins,一个流行的持续集成/发布的工具,另一个是Kubernetes,一个流行的容器编排引擎。另外一个惊喜,我们发现了Fabric8——一个酷炫的微服务平台。现在,让我们开始吧!

警告:在下文的几个步骤中,你的服务器可能会中途挂起几次,请选择配置高的PC。

方法论

有很多方法,可以让我们实现CI/CD,在本文中,我们重 点介绍Kubneretes-Jenkins插件和Fabric8。

总体架构

在开始我们的工作之前,让我们花一点时间分析开始使用Jenkins使用Kubernetes容器所需的工作流。Kubernetes对于开发者来说是一个惊人的开源容器编排引擎。Kubernetes是由Google发起的,这使Kubernetes在使用多个开源容器项目方面有一个惊人的优势。默认情况下,Docker更受Kubernetes的使用者支持和青睐。使用Docker容器的工作流程如下图所示:

20170320212433

与使用rkt容器(rktnetes)类似,如下图:

20170320212443

目前,Jenkins还没有支持RKT容器的插件,但我认为工作流在其实现后也将保持不变。

Kubernetes-Jenkins插件

在你的主机上安装Kubernetes

在主机上安装Kubernetes是一个容易的任务。如果你想在本地机器上试用它,我建议你试试Minikube,这里有快速安装指南:

  1. 确认你的kubectl已经安装完成,参考文档
  2. 确认已经下载完依赖的组件,参考先决条件
  3. 下载、安装Minikube

Carlossg在使用Jenkins和Kubernetes的方面做了惊人的工作,他为Jenkins创建了一个特棒Kubernetes插件,使用这个插件,你可以很容易地直接使用Kubernetes。此外,还为用户提供了更容易的配置选项,他已经构建了一个包含Kubernetes插件的Jenkins镜像,镜像可以在Docker Hub上找到。在接下来的步骤中,我们将从Docker Hub上获取此镜像,并创建一个卷/var/jenkins/_home用于存储Jenkins的数据。

存在一个问题

虽然我们正在做我们计划做的一切,我们仍然会遇到一个问题。 你会注意到,每当你要关闭它后,重新启动你的Jenkins容器,所有的数据都会丢失。 无论你做了什么,例如创建作业,安装插件等等,都会丢失。 这是容器的常见问题之一。 让我们更深入地讨论它。

关于数据容器的一个词

当谈到容器时,数据是一个棘手的概念。在所有时间保证数据安全、可用性方面容器并不是一个很好的例子。过去发生了许多事件,其中已经看到容器会丢失数据。有很多种办法能解决这个问题,其中之一是使用Docker卷,我没有发现使用持久卷的好处。另一个办法是创建“数据容器”,并将其用作存储数据的源,而不是仅仅依赖一个镜像。
下图简单说明了我们使用“数据容器”来确保我们数据可用性的方法:

20170320212452

接下了的步骤是启动Jenkins Kubernetes容器:

// Running jenkins using another container containing data
 $ docker run --volumes-from jenkins-k8s -p 8080:8080 -p 50000:50000 \
 -v /var/jenkins_home csanchez/jenkins-kubernetes

// Created a container for containing jenkins data with // the image name csanchez/jenkins-kubernetes
 $ docker create --name jenkins-k8s csanchez/jenkins-kubernetes

打开浏览器输入http://localhost:8080,你会看到如下界面:

20170320212459

Jenkins的Kubernetes插件设置

现在,Jenkins已经预先配置好了Kubernetes插件,所以我们直接跳到下一步。使用Jenkins GUI,使用Manage Jenkins > Configure System > Cloud > Add a new Cloud > Kubernetes。界面如下图中的几个步骤:

20170320212509

接下来按照下图的设置进行配置:

20170320212516

如果你想使用Jenkins slave,可以在Docker hub上下载jnlp-slave镜像。它提供了简单安装Slave节点的模板。你可以通过创建模板来配置一个Slave节点,如下图所示:

20170320212524

为了让Jenkins slave能参与任务调度,当在Jenkins上创建一个任务的时候,向下图所示设置你的任务:

20170320212532

现在只需把Kubernetes Pod模板中的标签的名称放在restrict部分,保存并应用新的设置。当构建此Job时,会看到Slave上运行这个Job。
一切准备就绪了!你现在可以根据需要添加更多的插件。

Fabric8

Fabric8是一个基于Docker,Kubernetes和Jenkins的开源微服务平台。 它是由Red Hat创建的。 该项目的目的是通过持续交流水线轻松创建,构建,测试和部署微服务,然后使用持续改进和ChatOps运行和管理它们。
Fabric8会自动安装并配置一下内容:

  • Jenkins
  • Gogs
  • Fabric8 registry
  • Nexus
  • SonarQube

下图是Fabric8的架构图:

20170320212843

为了开始我们的演示,你需要使用命令行工具安装Fabric8(gofabric8)。下载gofabric8,解压之后运行命令:

$ sudo cp /usr/local/bin/ gofabric8

在终端上检查$ gofabric8命令是否安装成功:

$ gofabric8 deploy -y

运行命令后,终端上会显示:

20170320212850

创建秘钥:

$ gofabric8 secrets -y

终端返回:

20170320212900

使用kubectl查看pod运行状态:

20170320212907

你可以使用Kubernetes Dashboard提供的页面查看所有Pod的状态,打开浏览器,输入:http://192.168.99.100:30000:

20170320212915

相似的,可以打开Fabric8的页面:

20170320212922

我们来分析一下上面的命令的执行过程,可以通过一个工作流图展示:

20170320212929

实现CI/CD

说起来容易做起来难。从源头构建Jenkins并整合Kubernetes实现持续集成(CI)仅仅是故事的一部分,但是实现持续发布(CD)时另外一个非常不同而且更加复杂的故事了。
这里有一些关于使用Jenkins插件的技巧,他们能帮你更加容易地实现Jenkins的持续交付。

Pipeline Plugin

Pipeline是由Jenkins社区构建的核心插件。此插件确保任何编排引擎与你的环境集成,而且复杂性很低。目前,我相信这仅仅是个开始,因为不同的社区已经为这种引擎构建不同的插件,这些插件都围绕Jenkins UI展开。使用Pipeline插件,用户可以在Jenkinsfile中实现他们项目的整个构建/测试/部署的流水线,并将这个文件跟代码存储在一起,作为代码的一部分放进代码控制中。

GitHub Plugin

这些天,大多数工作都使用GitHub作为源代码管理(SCM)工具。我建议你使用GitHub插件,它可以帮助你的Jenkins从GitHub拉取代码,并分析和测试。为了实现鉴权访问,我建议你看看GitHub OAuth插件。

Docker Plugin

对于Docker来说,这是最适合的插件之一,帮助你做几乎一切与Docker有关的事情。 这个插件还能帮助你使用Docker容器作为Jenkins Slave节点。还有几个其他的Docker插件,根据时间和你的用法,可以在它们之间切换。

AWS Plugin

AWS人员推出了一个名为AWS Pipeline的超棒的服务。 此特定服务可帮助您使用AWS实现持续交付。 目前,这个插件正在大量开发,可能不适合生产环境。 另外,可以查看AWS CodeCommit关注进度。

OpenStack

对于OpenStack用户,OpenStack插件适合使用OpenStack的环境配置。

Google Cloud Platform

可以在Google Cloud Platform上提供了部署管理器,使用部署管理器,你可以创建灵活的声明性模板,这些模板可以部署各种云平台,例如Google Cloud Storage, Google Compute Engine和Google Cloud SQL。部署管理器还可以将资源的使用定义存储在发布模板中。这是一个非常新的插件,但是我认为他是一个值得尝试好工具,如果你希望实现自动化和Google的云服务。

本文转自中文社区-使用Kubernetes-Jenkins实现CI/CD

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
4月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
126 0
|
4月前
|
运维 监控 jenkins
运维自动化实践:利用Jenkins实现高效CI/CD流程
【10月更文挑战第18天】运维自动化实践:利用Jenkins实现高效CI/CD流程
|
4月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
328 0
|
6月前
|
Kubernetes jenkins 持续交付
Kubernetes CI/CD 集成:持续交付的最佳实践
【8月更文第29天】随着微服务架构和容器化的普及,Kubernetes 成为了运行容器化应用的事实标准。为了确保应用能够快速迭代并稳定发布,持续集成/持续部署(CI/CD)流程变得至关重要。本文将介绍如何将 Kubernetes 集成到 CI/CD 流程中,并提供一些最佳实践。
422 1
|
6月前
|
jenkins Shell 持续交付
自动化部署:使用Jenkins和Docker实现CI/CD
【8月更文挑战第31天】 本文旨在引导读者了解如何通过Jenkins和Docker来实现持续集成和持续部署(CI/CD),从而优化开发流程,提升工作效率。文章将详细介绍配置Jenkins服务器、创建Docker镜像以及设置自动化构建和部署的步骤。通过实际操作案例,我们将展示如何将代码变更快速部署到测试或生产环境,确保软件质量与发布速度的双重保障。
|
6月前
|
Kubernetes jenkins 持续交付
Jenkins 与 Kubernetes 的集成:实现高效的资源管理和自动化部署
【8月更文第31天】随着微服务架构的普及,Kubernetes 已经成为了容器编排的事实标准。Kubernetes 提供了一种强大的方式来管理容器化的应用程序,而 Jenkins 则是持续集成与持续部署(CI/CD)领域的一个重要工具。将 Jenkins 与 Kubernetes 集成,不仅可以充分利用 Kubernetes 的资源管理能力,还能通过 Jenkins 实现自动化构建、测试和部署,从而提高开发效率和部署速度。本文将详细介绍如何将 Jenkins 集成到 Kubernetes 环境中,并提供具体的代码示例。
695 0
|
6月前
|
jenkins Java 测试技术
Jenkins 在持续集成/持续交付(CI/CD)管道中的应用
【8月更文第31天】 在现代软件开发过程中,持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)已经成为提升开发效率和软件质量的重要实践。Jenkins 是一个广泛使用的开源工具,它能够帮助团队实现自动化构建、测试和部署,是 CI/CD 流水线的核心组件之一。本文将详细介绍 Jenkins 在 CI/CD 管道中的应用,并提供具体的代码示例。
304 0
|
1月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
2月前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
154 12