登录/注册 帐户

这篇文章的目的是演示如何使用Ansible在持续集成/持续交付(CI / CD)过程中的环境配置和应用部署使用詹金斯管道

Ansible是它的一个功能强大的工具自动化并且可以在CI / CD过程中使用到规定的目标环境,然后部署到它的应用程序。

詹金斯是实施CI / CD知名的工具。Shell脚本管道流动过程中通常用于供应环境或部署应用程序。虽然这可能是工作,很繁琐的维护和从长远来看,重复使用的脚本。

在管道流量使用Ansible的目的是重用的角色和剧本的供应,让詹金斯只是作为,而不是一个shell脚本执行的过程配器。

用来创建这个职位的例子的工具有:

基础设施架构

图1示出了用于本实验的整体架构。它的一些元素ALM(应用程序生命周期管理)来模拟真实世界的场景,并运用我们的CI / CD演示管道流量。

图1  - 基础设施体系结构组件的概述

图1 - 基础设施体系结构组件的概述

图1示出以下的建筑元素:

  • Github上是我们的项目托管,并在那里詹金斯将轮询更改启动管道流量。

  • SonarSource是我们的源代码分析服务器。如果有任何的分析(例如没有足够的单元测试)过程中出现错误,流量被中断。这一步很重要,以保证源代码的质量指标。

  • 关系是神器库。编译成功后,单元测试和质量分析,二进制文件上传到它。后来这些二进制文件将被下载Ansible在应用程序部署过程。

  • Ansible剧本,这是集成在应用程序源代码YAML文件,部署春季启动应用程序上一个CentOS机器。

  • 詹金斯是我们的CI / CD过程配器。它负责把所有的拼在一起,从而成功地部署在目标机器的应用程序。

为了把这个架构一起,我们建立了一个Ansible剧本使用从Ansible银河社区角色。更多关于这个剧本本文中进一步讨论。如果你是新来Ansible,检查本文关于如何开始。剧透:Ansible银河将成为你的主要来源,了解Ansible。

在这个实验中的虚拟机环境被管理流浪汉libvirt的。这个是怎么做可以在项目中看到详细流浪ALM在Github上。

例如流水线流程

现在,这些工具和本实验的结构是众所周知的,让我们来探讨这个实验室建成的CI / CD管道流量。请注意,这条管道的目的是用于演示和可能缺少的步骤,一个真实世界的CI / CD过程中可能有。

观察下图:

图片

图2 - 的管道流

这条管线的实施细节可以看出在这个仓库

该过程通过从GitHub拉动应用程序源代码开始。接下来要做的是根据版本号更新的项目版本(例如我-梦幻-APP-1.0.0-123)。这样一来,我们在部署过程中此版本的指纹。以后,可以用来作为指标和过程控制。更新项目的版本后,詹金斯开始构建使用Maven的源代码。

编译成功后,该管道将进行单元测试。如果没有在单元测试过程中出错,管道流启动集成测试。在这种情况下,测试框架创建所需测试的所有基础设施:在内存中的数据库测试数据和小型web服务器来部署应用程序。集成测试被认为是当所有的请求都针对部署在测试环境中的应用验证是成功的。

从单元和集成测试的输出是一个覆盖率报告,这将是所使用声纳服务器生成质量度量的工件中的一个。另一种是应用程序的源代码。如果质量门在声纳服务器不符合规定,管道流量将失败。

如果一切正常,流动停止其执行和审批等待。詹金斯服务器提供了有人用正确的权限手动推动建立一个接口。图3示出了这个过程。

图片

图3 - 批准步骤例子

批准后,管道继续执行流程,并继续到下一个步骤,这是编译神器上传到Nexus仓库。然后我们有一个新的应用程序快照准备好部署。

现在是时候为Ansible闪耀。管道流量只设置所需要的参数,如编译神器URL和目标主机执行Ansible剧本之后。该剧本被用来自动在所有目标主机的配置。在这个实验中,我们将用它来安装Java和准备环境,以便接收春季启动应用程序作为服务。该剧本是要安装的应用程序作为服务,直到它接收到有效的响应,以确保部署成功将轮询其HTTP端口。

在Ansible剧本执行后,最后一步可能是将通知发送到有关新部署的通过电子邮件或松弛的结果每个利益相关者。这不是在我们的例子管道还没有实现,但我愿意为引入请求

Ansible剧本

通过本实验所用的剧本让我们深入到获取有关做了什么到现在为止的更多细节。Ansible在本实验中发挥两次根本性的作用。首先,它自动化的所有基础设施,这个实验,我们用它作为一种工具来部署通过管道詹金斯我们的应用程序。

基础设施配置

有没有在这里没有秘密。随着有关如何Ansible作品小知识,你可以创建一个使用像在这个实验中用来创建一个ALM摘录的那些社会Ansible角色实验室(甚至是生产环境)。这个过程背后的心态是我在其他文章中讨论:“开发人员的快捷方式,开始使用Ansible”请看看这个过程的全面审查。

设计架构之后,我们寻找可以自动化我们的设计的参与者,如声纳和詹金斯服务器,例如Ansible角色。最后,我们来到了下面剧本:

----名称:部署詹金斯CI主机:jenkins_serverREMOTE_USER:流浪汉成为:是的角色-geerlingguy.repo-EPEL-geerlingguy.jenkins-geerlingguy.git-tecris.maven-geerlingguy.ansible-名称:部署的Nexus服务器主机:nexus_serverREMOTE_USER:流浪汉成为:是的角色-geerlingguy.java-savoirfairelinux.nexus3-OSS-名称:部署声纳服务器主机:sonar_serverREMOTE_USER:流浪汉成为:是的角色-wtanaka.unzip-zanini.sonar-名称:处所的CentOS主机:APP_SERVERREMOTE_USER:流浪汉成为:是的角色-詹金斯纯键配置

基本上,我们组的角色是否有意义在一起,以提供所需的基础设施。让我们在詹金斯的条款仔细看看:

-名称:部署詹金斯CI主机:jenkins_serverREMOTE_USER:流浪汉成为:是的角色-geerlingguy.repo-EPEL-geerlingguy.jenkins-geerlingguy.git-tecris.maven-geerlingguy.ansible

这个任务定义了詹金斯将被部署,并介绍了我们用于部署詹金斯服务器角色的主机组。我们将需要启用CentOS的EPEL软件库中,詹金斯安装本身和Git,Maven和Ansible所需要的新产品线。而已。随着代码仅仅11行,我们有一个詹金斯服务器建立和运行准备开始我们的CI / CD过程。

为了得到这个基础设施准备就绪,我们采取了流浪和Ansible之间的集成的优势。在这个实验中使用的流浪汉文件可能在可见Github的流浪汉-ALM信息库。然后在漂浮的文件目录一个简单的“无业游民”起来,我们有实验室环境准备。更多有关如何准备你的机器与libvirt的运行流浪汉可能会在可见文档

应用程序部署

管道的设计准备应用程序二进制文件,现在所谓的“神器”,并上传他们的Nexus。该工件可以在通过的Nexus通常称为神器URL的URL即可到达。Ansible也是管道的一部分,并且将获得神器URL作为输入进行部署。因此,Ansible将不仅为部署也为机器配置负责。

让我们在Ansible剧本仔细一看是我们部署在目标主机上的应用:

----名称:安装Java主机:APP_SERVER成为:是的become_user: 根角色-geerlingguy.java-名称:从回购下载应用主机:APP_SERVER任务-GET_URL::是的网址: “{{查找( 'ENV', 'ARTIFACT_URL')}}”DEST: “/ TMP / {{查找( 'ENV', 'APP_NAME')}}罐”。-统计:路径: “/ TMP / {{查找( 'ENV', 'APP_NAME')}}罐”。-名称:安装春季启动主机:APP_SERVER成为:是的become_user: 根角色-  {作用:pellepelster.springboot角色,spring_boot_file: “{{查找( 'ENV', 'APP_NAME')}}罐”,spring_boot_file_source: “/ TMP / {{查找( 'ENV', 'APP_NAME')}}罐”,spring_boot_application_id: “{{查找( 'ENV', 'APP_NAME')}}”}

这个实施细节可以在可见演示应用程序的GitHub库

这个剧本才将执行三项任务:

  1. 安装基于从Ansible银河预定义角色的Java

  2. 下载基于从詹金斯输入从Nexus的存储库中的二进制文件

  3. 设置再次使用从社会上角色的应用程序作为一个春天启动服务

必威体育网页来自社区的资源可以用来做事情快,不推倒重来。这个剧本是在应用程序库,这意味着应用程序知道如何给自己部署。

通过使用Ansible詹金斯插件,它可以通过设置来执行它所需的变量从管道调用这个剧本。下面是摘录自管道演示如何做到这一点:

高清artifactUrl = “HTTP:// $ {} NEXUS_URL /库/ ansible,聚会/ $ {repoPath} / $ {版本} / $ {pom.artifactId}  -  $ {}版本的.jar”withEnv([“ARTIFACT_URL = $ {artifactUrl}”, “APP_NAME = $ {pom.artifactId}”]){回声“的网址是$ {} env.ARTIFACT_URL和应用程序的名称为$ {} env.APP_NAME”//安装星系角色SH“ansible星系安装-vvv -r拨备/ requirements.yml -p拨备/角色/”ansiblePlaybook着色:真正,credentialsId:“SSH-Jenkins的,限制:“$ {} HOST_PROVISION”,安装:'ansible',库存:'拨备/ inventory.ini',剧本:'拨备/ playbook.yml',执行sudo:真正,sudoUser:“詹金斯”}

要做到这一点,目标主机必须拥有詹金斯用户和它的按键配置正确。这是同时供应的实验室完成。所有目标主机是CentOS的机器与詹金斯用户已经建立了关键。你猜怎么着?有一个Ansible作用配置用户和它的钥匙。这样做是因为它是一个前提条件有Ansible访问的主机不知何故

技巧和窍门

有一些技巧,我想和大家分享,以缩短对使用Ansible与詹金斯自己的方式:

  1. 与詹金斯用户和SSH密钥准备目标主机。目标主机可以是在Red Hat OpenShift,虚拟机,裸机等等做一个吊舱没有关系。Ansible需要一种方法来连接到主机来执行它的魔力。

  2. 设置詹金斯用户的私钥凭据存储库。这样,你可以很容易地检索它在管道上的代码并把它作为参数传递给Ansible插件。

  3. 运行deploy剧本之前,考虑詹金斯服务器上安装所有需要的角色。这可以通过流水线执行过程中执行有关规定的文件很老的shell脚本运行来完成:“sh‘的ansible星系安装-vvv -r拨备/ requirements.yml -p拨备/角色/’”。

  4. 您可能会遇到一些情况,您只需要一个特定的主机上部署应用程序(为一个蓝绿色的部署, 例如)。你可以通过使用在Ansible剧本执行“-limit”参数做到这一点。

我们已经看到Ansible怎么可能在CI / CD管道流动中发挥重要作用。可以说,这是为此而生的。这样的CI / CD管道会不会担心如何部署应用程序或机器是否正常供应;它只是委托给Ansible应用程序的部署。

一个Ansible的好处是可以共享和重用其他项目和应用程序之间创建的角色的能力。

在我们的实验室,我们重用了一堆从社会角色。就这样,我们可以充分利用社会力量来保持代码库得到随时间更好。在你的公司,你可以配置Ansible角色的开发和运营团队可能有助于创造一个更美好的代码基础回购,提高内部流程的质量。这就是DevOps的是一回事!

avatar_zanini.jpg

里卡多·贾尼尼是在拉丁美洲地区一担。他在集成,中间件和软件工程专业知识。里卡多一直在研究软件质量,因为他的第一个专业多年,今天帮助战略客户取得成功与红帽中间件产品和优质工艺。必威体育吧找到更多的职位由里卡多·贾尼尼//www.pbimages.com/en/blog/authors/ricardo-zanini

一个红帽技术客户经理(TAM)是一家专业产品专家谁与IT部门协同工作,以战略性规划成功的部署,并帮助实现最佳的性能和增长。谭是Red Hat的一部分世界级客户体验和互动组织并提供前瞻性的建议和指导,以确定你的帮助和解决潜在问题,防患于未然。如果出现问题,您的TAM将自己的问题,并聘请最好的资源,以最小的业务中断尽快解决这个问题。必威体育网页

用连接在噬红帽收敛事件在你旁边!红帽融合是加深对红帽的产品知识和发现应用开源技术来满足他们的业务目标的新方式自由,邀请只事件提供技术用户的机会。这些事件前往城市在世界各地为您提供了方便,当地一天的学习经验,并与Red Hat的专家和业内同行交流。

开源协作的好奇心。加入我们的红帽峰会,5月8-10日,在旧金山与噬细胞和其他人红帽专家联系!现在注册仅售1100 US $使用代码CEE18。


关于作者

出于兴趣

新闻要注意,只为你

即将发生的事件

相关研讨会