【.com快译】持续集成、持续交付和持续部署(CI/CD)已经在开发者社区中存在多年。有些公司有运营部门,但很多公司没有。对于大多数企业来说,他们的运营团队和他们的开发团队一样熟悉CI/CD工具和实践。CI/CD实践同样适用于基础设施和第三方应用程序以及内部开发的应用程序。此外,还有许多不同的工具,但都使用相似的模式。也许最重要的是,领导您的公司采用这种新做法将使您在公司内享有很高的权威,并且您将成为其他人效仿的领导者。多年来,一些组织已采用Ansible、Chef或Puppet等工具对基础架构采用CI/CD实践。其他工具,例如TestKitchen,可以对最终托管应用程序的基础设施执行测试。事实上,这些测试甚至可以将应用程序部署到类似生产的环境中,针对更高级的生产工作负载配置执行应用程序级测试。但是,仅仅能够测试基础架构就很棒。Terraform还可以使用TestKitchen来测试比一些原始配置管理工具更短暂和更幂等的基础设施配置。结合Linux容器和Kubernetes,您现在可以使用类似生产的规范和资源来测试完整的基础设施和应用程序部署,这些规范和资源在数小时而不是数月或数年内创建和停用。在再次部署和测试之前清理所有资源。但是,您也可以专注于版本控制网络配置或数据库数据定义语言(DDL)文件,并开始在它们上运行小型CI/CD管道。也许它只是检查语法、语义或一些最佳实践。事实上,大多数开发流水线都是这样开始的。一旦搭建好脚手架,在其上进行构建就更容易了。准备就绪后,您将开始查看管道的各种用例。例如,我经常在公司内部撰写时事通讯,使用MJML在版本控制中进行维护。我需要能够托管Web版本,有些人喜欢能够获取PDF,所以我构建了一个管道。现在,当我创建新的时事通讯时,我将其提交给GitLab中的合并请求。这会自动创建一个index.html,其中包含指向时事通讯的HTML和PDF版本的链接。HTML和PDF文件也在管道中创建。除非有人来查看,否则不会发布这些内容。然后,GitLabPages发布网站,我可以下载HTML以作为时事通讯发送。将来,当合并请求合并或经过特殊批准步骤后,我会自动发送新闻通讯。这看起来很简单,但为我节省了很多时间。这就是这些工具的本质:它们可以节省您的时间。重点是创建抽象工作的工具,以便它们可以应用于多个问题而几乎没有变化。我还应该指出,我创建的内容只需要很少的编码,只需几个简单的HTML模板、一个循环遍历HTML文件的节点,以及另一个用所有HTML页面和PDF填充索引页面的节点。其中一些可能看起来有点复杂,但其中大部分来自我使用的不同工具的教程。许多开发人员很乐意与您一起完成这些类型的工作,因为他们可能会在完成后发现它很有用。本文所附的链接指向我们计划为DevOpsKC制作的时事通讯,创建网站的所有代码都来自我在处理内部时事通讯时所做的工作。下面描述的许多工具都提供了这种类型的交互,但有些工具提供的模式略有不同。该领域的一种新兴模式是使用YAML等标记语言以声明方式描述管道,每个阶段都是短暂且幂等的。其中许多系统还通过在管道的不同阶段创建有向无环图(DAG)来确保正确的顺序。这些阶段通常运行在Linux容器中,可以在容器中执行任何操作。某些工具(例如Spinnaker)仅专注于部署组件,提供其他工具通常不具备的操作功能。Jenkins通常以XML格式保存管道,大多数交互发生在GUI中,但最近的实现使用Groovy中的领域特定语言(DSL)。此外,Jenkins作业通常在安装了特殊Java代理的节点上执行,该代理由多个插件和预安装组件组成。Jenkins在它的工具中引入了管道,但是使用起来有点难,有几个地方需要注意。最近,Jenkins的开发人员决定引导社区采取一些不同的举措,这些举措有望为项目注入新的活力,真正将CI/CD带给大众。我认为最值得注意的举措是创建云原生Jenkins,它可以将Kubernetes集群转变为JenkinsCI/CD平台。一旦您更多地了解这些工具并开始将这些实践应用到您的公司或运营中,其他人很快就会效仿。您将提高自己和他人的工作效率。让我们更深入地了解一下这些工具。我们将简要介绍每个工具,并提供指向更多信息的链接。1.GitLabCI项目页面:https://about.gitlab.com/product/continuous-integration/源代码:https://gitlab.com/gitlab-org/gitlab-ce/许可证:MITGitLab是CI/CD的一个作为该领域的新人,却成为ForresterResearch的持续集成工具Wave报告的领导者,在竞争如此激烈的领域实属不易。是什么让GitLabCI如此出色?它使用YAML文件来描述整个管道。它还具有一个称为AutoDevOps的功能,允许更简单的项目自动构建管道,内置多个测试。该系统使用Herokuishbuildpacks(https://github.com/gliderlabs/herokuish)来确定语言以及如何构建应用。一些语言还可以管理数据库,这对于构建新应用程序并将其从开发过程的一开始就部署到生产环境来说是一项非常关键的能力。该系统直接与Kubernetes集成,并使用几种不同的部署方法之一自动将应用程序部署到Kubernetes集群中,例如基于百分比和蓝绿部署。除了CI功能,GitLab还提供了很多补充功能,比如运维监控,Prometheus会自动随你的应用部署;使用GitLabIssues、Epics和Milestones实现项目组合和项目管理;管道中内置了安全检查,结果作为来自多个项目的合并值提供;以及使用WebIDE直接在GitLab中编辑代码的能力,甚至提供管道的预览或执行部分以获得更快的反馈。2.GoCD项目页面:https://www.gocd.org/源代码:https://github.com/gocd/gocd授权方式:Apache2.0GoCD出自Thoughtworks的奇思妙想,足以证明其功能和效率。对我来说,GoCD与其他工具的区别主要在于其价值流映射(VSM,https://www.gocd.org/getting-started/part-3/#value_stream_map)功能。事实上,管道可以链接起来,一个管道为下一个管道提供“东西”。这可以提高对部署过程负有不同职责的不同团队的独立性。当将这样的系统引入打算将这些团队分开的遗留企业时,此功能可能很有用——但让每个人都使用相同的工具可以让以后更容易找到VSM中的瓶颈并重组团队或尝试提高效率。为贵公司的每个产品配备一个VSM会有很大帮助;GoCD允许在版本控制中使用JSON或YAML进行描述,并直观地显示所有数据,使该工具对于试图更好地了解自己的企业更加有用。有价值的。首先安装GoCD并仅使用手动批准门来映射您的流程。然后让每个团队使用手动批准,这样您就可以开始收集有关瓶颈所在位置的数据。3.TravisCI项目页面:https://docs.travis-ci.com/源代码:https://github.com/travis-ci/travis-ci许可证:MITTravisCI是我第一个用软件作为服务(SaaS)CI系统,厉害了。管道与源代码一起存储为YAML,并与GitHub等工具无缝集成。我不记得上一次管道因TravisCI或集成而失败是什么时候,TravisCI的正常运行时间很长。它不仅可以作为SaaS使用,而且还有一个托管版本。我没有运行那个版本——有很多组件,安装它们似乎有点困难。我想使用TravisCI提供的Helm图表将所有内容部署到Kubernetes会容易得多。这些图表还没有部署所有内容,但我相信它会在未来变得更好。如果您不想处理麻烦,还有一个企业版。但是,如果您正在开发开源代码,则可以免费使用SaaS版本的TravisCI。这是来自优秀团队的优质服务!它减轻了很多开销,让您可以使用非常常见的平台来开发开源代码,而无需运行任何东西。4.Jenkins项目页面:https://jenkins.io/源代码:https://github.com/jenkinsci/jenkins授权方式:MITJenkins是CI/CD界最正宗、最受尊敬的事实标准。我建议你阅读《Jenkins:Shifting Gears》(https://jenkins.io/blog/2018/08/31/shifting-gears/),作者是Kohsuke,Jenkin开发人员和CloudBeesCTO。它总结了我过去十年对Jenkins和社区的感受。他描述了多年来所需要的创新,我很高兴CloudBees在这一转变中处于领先地位。Jenkins对于大多数非开发人员来说有点难,一直是管理员的负担。然而,这些方面正是他们旨在解决的问题。Jenkins配置即代码(JCasC)应该有助于解决困扰管理员多年的复杂配置问题。这有助于通过YAML文件对Jenkins主机进行零接触配置,类似于其他CI/CD系统。JenkinsEvergreen旨在通过提供基于不同用例的预定义Jenkins配置来简化此过程。这些发行版应该比普通的Jenkins发行版更容易维护和升级。Jenkins2引入了原生管道功能,有两种类型的管道。当你做一些简单的事情时,这两种管道都不像YAML那样容易使用,但它们非常适合更复杂的任务。JenkinsX可以称为Jenkins的彻底改造,很可能是云原生Jenkins的实现(或者至少是大多数用户在使用云原生Jenkins时看到的)。它会带来JCasC和Evergreen,直接在Kubernetes上使用,发挥其长处。对于Jenkins来说,这是激动人心的时刻,我期待它继续创新并引领该领域。5.ConcourseCI项目页面:https://concourse-ci.org/源代码:https://github.com/concourse/concourse许可证:Apache2.0通过PivotalLabs的人接触到了Concourse***,那时候它还处于早期测试阶段,同类工具还不多。该系统由微服务组成,每个作业都在一个容器内运行。它最有用的功能之一是其他工具所没有的,那就是能够从本地系统运行作业。这意味着您可以在本地开发(假设您已连接到Concourse服务器)并运行您构建的代码,就好像它在真实的构建管道中运行一样。此外,您可以从本地系统重新运行过期的构建并将特定更改注入测试修复。Concourse还有一个简单的扩展系统,它依赖于资源的基本概念。粗略地说,您要为管道提供的每个新功能都可以在Docker映像中实现,并作为新资源类型包含在配置中。这使得所有功能都可以封装在一个可以独立升级和修改的不可变工件中,重大更改不一定会同时破坏所有构建 。6.Spinnaker项目页面:https://www.spinnaker.io/源代码:https://github.com/spinnaker/spinnaker许可证:Apache2.0Spinnaker来自Netflix,更侧重于持续部署而非持续集成。它可以与其他工具(包括Travis和Jenkins)集成,以启动测试和部署管道。它还与Prometheus和Datadog等监控工具集成,以根据这些系统提供的指标做出部署决策。例如,金丝雀部署使用判断概念和收集的指标来确定上一个金丝雀部署是否导致相关指标的任何降级并且应该回滚,或者确定部署是否可以继续。在讨论持续部署时,与部署相关的几个额外的独特功能涵盖了一个经常被忽视的方面,这似乎是对立的,但对成功至关重要:Spinnaker有助于降低持续部署的连续性。它将阻止某个阶段在特定时间运行,从而防止在应用程序生命周期的关键时刻进行部署。它还可以执行手动批准,以确保公司的业务在变更发布之前从变更中受益。事实上,持续集成和持续部署的全部意义在于,一旦业务需求发生变化,就可以立即部署变更。7.Screwdriver项目页面:http://screwdriver.cd/源代码:https://github.com/screwdriver-cd/screwdriver许可证:BSDScrewdriver是一个非常简单的工具。它使用微服务方法,依靠Nomad、Kubernetes和Docker等工具作为其执行引擎。有一个关于如何部署到AWS和Kubernetes的很??好的部署教程(https://docs.screwdriver.cd/cluster-management/kubernetes),但是一旦开发中的Helm图表(https://github.com/screwdriver-cd/screwdriver-chart)已完成,Screwdriver有望得到改进。Screwdriver还使用YAML来描述管理,具有许多合理的默认值,因此每个管道的样板配置较少。配置描述了可能在作业之间具有复杂依赖关系的高级工作流。例如,可以保证一个作业在另一个作业之后或之前运行。作业可以并行运行,然后合并。您还可以使用逻辑运算符来运行作业,例如,如果任何依赖项都成功或仅所有依赖项都成功。更好的是,您可以指定要从合并请求中触发的某些作业。此外,当发生这种情况时,相关作业不会运行,从而在工件进入生产但仍需要审查时允许轻松隔离管道。本文简要介绍了这些CI/CD工具,每个工具都有更酷的功能和差异化优势,值得研究。它们都是开源的并且可以免费使用,因此部署它们并查看哪一个最适合您的要求。原标题:系统管理员的7个CI/CD工具,作者:DanBarker
