使用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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
7月前
|
Kubernetes Devops 应用服务中间件
基于 Azure DevOps 与阿里云 ACK 构建企业级 CI/CD 流水线
本文介绍如何结合阿里云 ACK 与 Azure DevOps 搭建自动化部署流程,涵盖集群创建、流水线配置、应用部署与公网暴露,助力企业高效落地云原生 DevOps 实践。
783 1
|
监控 jenkins Shell
jenkins结合gitlab实现CI(持续集成)
通过本文的介绍,我们详细了解了如何结合Jenkins和GitLab实现持续集成。从环境准备、插件配置到Pipeline任务创建和CI流程监控,每一步都提供了详细的操作步骤和示例代码。希望本文能帮助开发者快速搭建起高效的CI系统,提高项目开发效率和代码质量。
1390 9
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
448 0
|
运维 监控 jenkins
运维自动化实践:利用Jenkins实现高效CI/CD流程
【10月更文挑战第18天】运维自动化实践:利用Jenkins实现高效CI/CD流程
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
950 0
|
jenkins Shell 持续交付
自动化部署:使用Jenkins和Docker实现CI/CD
【8月更文挑战第31天】 本文旨在引导读者了解如何通过Jenkins和Docker来实现持续集成和持续部署(CI/CD),从而优化开发流程,提升工作效率。文章将详细介绍配置Jenkins服务器、创建Docker镜像以及设置自动化构建和部署的步骤。通过实际操作案例,我们将展示如何将代码变更快速部署到测试或生产环境,确保软件质量与发布速度的双重保障。
1970 0
|
6月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
541 1
|
6月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
362 89
|
11月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
707 9

推荐镜像

更多