热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[CI,Git,OpenShift,Bash,CD]持续集成和部署方面的3个实践

本文介绍了三大主题:自动化持续集成持续部署(CICD)配置、使用Git代码仓库用于常见的CICD工件以及参数化Jenkins管道。术语介绍先不妨定义几个术语。CICD

  本文介绍了三大主题:自动化持续集成/持续部署(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- 就行了,你有了一台运行中的Jenkins服务器,随时可以上路。然而在企业中使用复杂得多。除了Jenkins服务器外,管理员还常常需要部署代码分析工具(比如SonarQube)和工件仓库(比如Nexus)。然后,他们要创建管道以执行CI/CD,并创建Jenkins从节点以减轻主节点的负载。大多数这些实体受到OpenShift资源的支持,需要创建这些资源才能部署所需的CI/CD基础设施。

  最终,可能需要复制部署CI/CD组件所需的手动步骤,你可能不是执行那些步骤的人。为了确保生成结果时快速、无错误、并与以前一模一样,应该在创建基础设施的方式中包含自动化方法。这可以是Ansible playbook、Bash脚本或者希望自动部署CI/CD基础设施的任何其他方式。

  我使用Ansible和OpenShift-Applier角色来自动化我的实现。你可能觉得这些工具很有价值,也可能觉得别的工具更适合你和贵企业。无论怎样,你会发现自动化大大减少了重新创建CI/ CD组件所需的工作量。

  配置Jenkins主节点

  除了一般的“自动化”外,我想单单挑出Jenkins主节点,谈谈管理员可以利用OpenShift自动化Jenkins配置的几种方法。来自Red Hat Container Catalog中的Jenkins映像随附安装了OpenShift-Sync插件(

  github/openshift/jenkins-sync-plugin)。

  想创建Jenkins管道,要创建类似这样的OpenShift BuildConfig:

  apiVersion: v1

  kind: BuildConfig

  ...

  spec:

  source:

  git:

  ref: master

  uri:

  ...

  strategy:

  jenkinsPipelineStrategy:

  jenkinsfilePath: Jenkinsfile

  type: JenkinsPipeline

  OpenShift-Sync插件会注意到,拥有策略jenkinsPipelineStrategy的BuildConfig已创建,可将它转换成Jenkins管道,从Git源代码指定的Jenkinsfile来获取。还可以使用QQ号转让内联式Jenkinsfile,而不是从Git代码仓库来获取一个。欲知详情,请参阅说明文档。

  想创建Jenkins从节点,创建以下列定义开始的OpenShift ImageStream:

  apiVersion: v1

  kind: ImageStream

  metadata:

  annotations:

  slave-label: jenkins-slave

  labels:

  role: jenkins-slave

  …

  请注意这个ImageStream中定义的元数据。OpenShift-Sync插件会将标签是role: jenkins-slave的任何ImageStream转换成Jenkins从节点。Jenkins从节点将以来自slave-label标注的值命名。

  ImageStreams非常适合简单的Jenkins从节点配置,但是一些团队发现有必要配置一些基本细节,比如资源限制、就绪和活性探针以及实例上限。这时ConfigMaps可以派上用场:

  apiVersion: v1

  kind: ConfigMap

  metadata:

  labels:

  role: jenkins-slave

  ...

  data:

  template1: |-

  

  注意仍需要role: jenkins-slave标签将ConfigMap转换成Jenkins从节点。Kubernetes pod模块包括一段很长的XML,可根据贵企业的喜好来配置每个细节。想查看该XML以及将ImageStreams和ConfigMaps转换成Jenkins从节点方面的更多信息,请参阅说明文档。

  从上面三个例子中可以看出,没有一项操作要求管理员手动更改Jenkins控制台。通过使用OpenShift资源,Jenkins能以一种轻松自动化的方式来配置。

  2. 共享就是关爱

  第二个最佳实践是维护常见CI/CD工件的Git仓库。主要想法是,防止团队重新发明轮子。设想你的团队需要执行蓝/绿部署到OpenShift环境的工作,作为管道的CD阶段的一部分。团队中负责编写管道的成员可能不是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管道将减少需要维护的管道的数量。

  

持续集成和部署方面的3个最佳实践

 


推荐阅读
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
author-avatar
流浪汉中的小男人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有