持续集成与持续部署实践

本文涵盖了三个关键主题:自动化CI / CD配置,将Git存储库用于常见的CI / CD工件以及对Jenkins管道进行参数设置。

术语

首先是第一件事; 让我们定义一些术语。 CI / CD是一种实践,允许团队快速而自动地测试,打包和部署其应用程序。 这通常可以通过利用名为Jenkins的服务器来实现,该服务器用作CI / CD编排器。 Jenkins侦听特定的输入(通常是在代码签入后的Git钩子),并在被触发时启动管道。

管道由开发和/或运营团队编写的代码组成,该代码指示Jenkins在CI / CD流程中采取哪些措施。 该管道通常类似于“构建我的代码,然后测试我的代码,如果这些测试通过,则将我的应用程序部署到下一个更高的环境(通常是开发,测试或生产环境)”。 组织通常具有更复杂的管道,并结合了诸如工件库和代码分析器之类的工具,但这提供了一个高级示例。

现在我们了解了关键术语,让我们深入了解一些最佳实践。

1.自动化是关键

要在PaaS上运行CI / CD,您需要在群集上配置正确的基础架构。 在此示例中,我将使用OpenShift 。

实现这一点的“ Hello,World”实现非常简单。 只需运行oc new-app jenkins- <persistent / ephemeral>voilà ,您就可以运行一个正在运行的Jenkins服务器。 但是,企业中的使用要复杂得多。 除Jenkins服务器外,管理员通常还需要部署代码分析工具(如SonarQube)和工件库(如Nexus)。 然后,他们将不得不创建流水线来执行CI / CD和Jenkins从站,以减少主站上的负载。 这些实体中的大多数都由OpenShift资源支持,这些资源需要创建以部署所需的CI / CD基础结构。

最终,可能需要复制部署CI / CD组件所需的手动步骤,并且您可能不是执行这些步骤的人。 为了确保快速,无错误且完全像以前那样产生结果,应在创建基础结构的方式中采用自动化方法。 这可以是Ansible剧本,Bash脚本或您希望自动执行CI / CD基础结构部署的任何其他方式。 我使用Ansible和OpenShift-Applier角色来自动化我的实现。 您可能会发现这些工具很有价值,或者可能找到其他对您和您的组织更有效的工具。 无论哪种方式,您都会发现自动化大大减少了重新创建CI / CD组件所需的工作量。

配置詹金斯大师

除了一般的“自动化”之外,我想选出Jenkins管理员,并讨论管理员可以利用OpenShift自动化Jenkins配置的几种方法。 Red Hat容器目录中的Jenkins映像与安装的OpenShift-Sync插件打包在一起。 在视频中 ,我们讨论了如何使用此插件来创建Jenkins管道和奴隶。

要创建Jenkins管道,请创建类似于以下内容的OpenShift BuildConfig:

apiVersion: v1
kind: BuildConfig
...
spec:  
source:      
git:  
ref: master      
uri: <repository-uri>  
...  
strategy:    
jenkinsPipelineStrategy:    
jenkinsfilePath: Jenkinsfile      
type: JenkinsPipeline

OpenShift-Sync插件会注意到已经创建了带有策略jenkinsPipelineStrategy的BuildConfig,并将其从Git源指定的Jenkins文件中提取出来,转换为Jenkins管道。 也可以使用内联Jenkinsfile,而不是从Git存储库中提取。 有关更多信息,请参见文档 。

要创建Jenkins从属,请创建以以下定义开头的OpenShift ImageStream:

apiVersion: v1
kind: ImageStream
metadata:
annotations:
slave-label: jenkins-slave
labels:
role: jenkins-slave

注意此ImageStream中定义的元数据。 OpenShift-Sync插件会将带有标签角色:jenkins-slave的任何ImageStream转换为Jenkins从属。 Jenkins奴隶将以奴隶标签注释中的值命名。

ImageStreams对于简单的Jenkins从属配置来说工作得很好,但是一些团队会发现有必要配置实质性细节,例如资源限制,就绪性和活动性探针以及实例上限。 这是ConfigMap发挥作用的地方:

apiVersion: v1
kind: ConfigMap
metadata:
labels:
role: jenkins-slave
...
data:
template1: |-
<Kubernetes pod template>

注意,仍然需要角色:jenkins-slave标签才能将ConfigMap转换为Jenkins从属。 Kubernetes pod模板由冗长的XML组成,它将根据您的组织喜好配置每个细节。 要查看此XML,以及有关将ImageStream和ConfigMap转换为Jenkins从属的更多信息,请参见文档 。

请注意上面显示的三个示例,这些操作都不需要管理员对Jenkins控制台进行手动更改。 通过使用OpenShift资源,可以以易于自动化的方式配置Jenkins。

2.分享是关怀

第二个最佳实践是维护一个通用CI / CD工件的Git存储库。 主要思想是防止团队重新发明轮子。 想象一下,作为管道CD阶段的一部分,您的团队需要在OpenShift环境中执行蓝/绿部署。 负责编写管道的团队成员可能不是OpenShift专家,也没有带宽从头开始编写此功能。 幸运的是,已经有人在公共CI / CD存储库中编写了将该功能合并到一起的功能,因此您的团队可以使用该功能,而不必花费时间来编写该功能。

为了更进一步,您的组织可以决定维护整个管道。 您可能会发现团队正在编写具有类似功能的管道。 对于那些团队来说,使用公共存储库中的参数化管道要比从头开始编写自己的管道更为有效。

3.少即是多

正如我在上一节中所暗示的那样,第三个也是最后一个最佳实践是参数化CI / CD管道。 参数化将防止管道过多,从而使您的CI / CD系统更易于维护。 想象一下,我有多个可以部署应用程序的区域。 如果不进行参数化,则每个区域都需要一个单独的管道。

要对写为OpenShift构建配置的管道进行参数化,请将env节添加到配置中:

...
spec:
...
strategy:
jenkinsPipelineStrategy:
env:
- name: REGION
value: US-West          
jenkinsfilePath: Jenkinsfile      
type: JenkinsPipeline

使用此配置,我可以将REGION参数传递给管道,以将我的应用程序部署到指定区域。

该视频提供了更实质的情况,其中必须进行参数化。 通常,某些组织决定将其CI / CD管道拆分为单独的CI和CD管道,因为在部署之前会发生某种批准过程。 想象一下,我要部署四个映像和三个不同的环境。 如果不进行参数设置,我将需要12条CD管道以允许所有部署可能性。 这可以很快解决。 为了简化CD管道的维护,组织会发现更好地参数化映像和环境,以允许一个管道执行许多工作。

摘要

企业级别的CI / CD往往比许多组织预期的要复杂。 幸运的是,有了Jenkins,有很多方法可以无缝地自动进行设置。 维护通用CI / CD工件的Git存储库也将减轻工作量,因为团队可以摆脱维护的依赖关系,而不必从头开始编写自己的依赖关系。 最后,对CI / CD管道进行参数化将减少必须维护的管道数量。

如果您发现了其他无法避免的做法,请在评论中分享。

翻译自: https://opensource.com/article/18/11/best-practices-cicd

持续集成与持续部署实践

持续集成与持续部署实践_持续集成和部署的3个最佳实践相关推荐

  1. angular 最佳实践_干净高效的Angular应用程序的最佳实践

    angular 最佳实践 by Vamsi Vempati 由Vamsi Vempati 干净高效的Angular应用程序的最佳实践 (Best practices for a clean and p ...

  2. 平安 开源 数据库 实践_自举开源业务的3个最佳实践

    平安 开源 数据库 实践 转到美国任何本地新兴社区的社交和演讲活动,您将很快发现一个主导主题:投资. 阅读任何创业新闻网站,您会看到同样高度关注筹款活动. 诸如AngelList和CrunchBase ...

  3. 集成git怎样更新代码_持续集成之理论篇

    本文作者:CODING 用户 - 何健 持续集成 ?--? 大概数周前,突然有学长问我有没有接触过"持续集成". 在我脑海中,这是一个陌生的词汇,于是百度了解了一番.实际上有开发和 ...

  4. java代码扫描工具比较_代码扫描工具的选型和Sonar最佳实践

    目标 在编码阶段发现NNE空指针异常.IO流未正确关闭等致命性bug,杜绝此类"零容忍"线上异常的发生. 技术选型 关于代码扫描工具,比较主流的有Sonar.FindBugs.Al ...

  5. 天云大数据_【案例分享】天云大数据最佳实践系列之——信用评分模型

    本文为天云大数据原创 大数据能力特有的性质,使其正在成为大型银行真正的核心竞争力.银行大数据能力表现在多方面,但大数据思维和数据挖掘能力是最关键.也是最重要的.天云大数据自成立以来,一直深耕于金融领域 ...

  6. 迅雷下载百度云中的内容_在云中加速Web内容交付的最佳实践

    本系列文章 基于云的以资产为中心的协作的最佳实践:使用Rational Asset Manager实现协作多租户 使用Tivoli Access Manager在多租户云解决方案中进行访问控制的最佳实 ...

  7. 后端传输大量log数据_京东智联云MySQL读写分离最佳实践 ,轻松搞定数据库高性能扩展...

    数字化时代,数据库对任何企业而言都是其应用的核心资源.MySQL作为当前最流行的关系型数据库,虽然是开源软件,但是其简单易懂.易于部署管理,且具有ACID特性.强大的SQL查询等特点,被各种业务系统作 ...

  8. 基于python技术的自动化运维是干嘛的_《Python自动化运维 技术与最佳实践》.pdf...

    [实例简介]Python自动化运维 技术与最佳实践 [刘天斯著][机械工业出版社][2014.12][291页].pdf [实例截图] [核心代码] 目 录 本书赞誉 前 言 第一部分 基础篇 第1章 ...

  9. 需求分析与建模最佳实践_社交媒体和主题建模:如何在实践中分析帖子

    需求分析与建模最佳实践 主题建模的实际使用 (Practical use of topic modeling) There is a substantial amount of data genera ...

最新文章

  1. hash tree算法
  2. android应用植入广告SDK,获取广告收入
  3. excel 两组数据交点_30秒即可完成Excel数据对比,超高效率,快学起来不要犹豫!...
  4. boost::mp11::tuple_transform相关用法的测试程序
  5. 学习C ,常见的误解
  6. WIFI vs 无线网
  7. Flask中的 url_for() 函数
  8. java 元素居中_如何在ColumnLayout中居中元素
  9. js实现炫酷数字效果
  10. 设计模式—结构型模式概述(思维导图)
  11. 搜索引擎自动提交连接php文件,死链检测工具(自动提交给百度,逆天了)
  12. WPS简历模板的图标怎么修改_研究了 2000 份 BAT 员工的简历后,我发现这 3 个共同点...
  13. Otsu算法——最大类间方差法(大津算法)
  14. 自考《软件工程》总结笔记
  15. Golang的基础数据类型
  16. vmware ubuntu 内存不够解决方案
  17. Vue生命周期和钩子函数详解
  18. Android 版本号及对应的版本名
  19. 用 Mathematica 破解密码
  20. 【高级软件工程课后作业】

热门文章

  1. CArray动态数组
  2. 博罗县房产管理局应用级本地容灾备份系统采购项目
  3. haproxy+keepalived实现高可用负载均衡
  4. 一个以标签为特色的社交网站——易寻
  5. MySQL 管理猿利器: MySQL ODBC for iPhone!
  6. 删除 setup.py 安装的 Python 软件包
  7. 部署Vista需要了解的十大事项
  8. Shiro 权限标签
  9. github出现Your account has been flagged.导致账号无法公开的解决办法
  10. 【Word2Vec】word2vec是如何得到词向量的?