DevOps基础-5.5-持续交付:你的CI工具链

欢迎回来。在这一篇文章我们将谈论工具。每个组织和团队的持续交付流水线(Pipeline)是不同的。管道的概念是一系列阶段(Stage),每个阶段都由特定工具支持。让我们看看持续交付的六个关键阶段以及与之相关的工具。关键领域是:版本控制,CI系统,构建,测试,您需要一个工件存储库和部署。

       版本控制是我们提交代码更改的地方,可以查看所有更改的完整历史记录。它允许开发人员通过将每个更改视为代码中的独立层来保持彼此同步。今天大多数组织选择以GitHub或BitBucket的形式使用Git作为SAS或有时作为本地企业版本。这些增加了社交媒体中常见的协作和共享优势。你可以把它想象成Facebook满足版本控制。好吧,接下来就是持续集成

        作为开源的Jenkins在许多组织中很受欢迎。它的UI确实很low,但它有大量的社区支持,几乎每个软件提供商都与它集成。还有来自CloudBees的商业产品。其他CI系统选项包括GoCD,Bamboo和TeamCity。Travis CI或Circle CI等公司也采用了大量持续集成作为服务。好了,现在让我们谈谈构建工具。构建工具非常依赖于语言。

        如果你正在使用Ruby,你可能会简单地使用Make或Rake,但这些只是每次执行一组一致的步骤。或者您可以采用Maven的工作流方法,这可以让您从开发人员桌面运行可重复的构建和测试,一直到CI系统。如果你正在对前端代码进行测试,那么使用Gulp真的很受欢迎。而且,如果你正在建设基础设施,比如HashiCorp的Packer。 大多数开发语言都内置了单元测试,或者社区强烈推荐使用JUnit for Java等。

       使用短接和格式化的代码规范也是如此。种类链接golang。有golint或gofmt。或者也许使用Ruby,有一个名为RuboCop的版本。 集成测试通常使用测试驱动的框架或使用内部脚本执行。该领域的测试框架和工具包括Robot,Protractor和Cucumber。关于这些的很酷的事情是它们让你表达了代码的外部方法。  他们可以挂钩到Selenium进行UI测试,或者你可以自己使用Selenium。

       如果您最终对前端进行了大量的验收测试,那么您可以使用名为Sauce Labs的SAS产品。假设您正在进行基础设施测试。您可能正在使用Kitchen CI for Chef等工具。这实际上创建了新实例并运行代码的完全融合以进行测试。像ApacheBench或Jmeter这样的工具可以帮助您进行性能测试。你还需要在那里添加一些安全测试。 Galen和Mitten是两种开源外部测试工具。还有一些工具可以像开源工具Brakeman一样进行代码检查,也可以从像Veracode这样的公司提供付费产品。

        这些测试最重要的属性之一是您能够在check in之前在开发的机器上运行它们,而不仅仅依赖于CI管道。 Vagrant,Otto和Docker Compose等工具允许您在本地部署和运行整个应用程序。因此,您不仅可以随时运行单元测试,还可以运行集成和验收测试。一旦你的代码被构建和测试,工件必须去某个地方(工件仓库)。像Artifactory或其开源等效的Nexus等热门解决方案管理着许多不同的工件格式。

        或者可以将特定输出(如Docker镜像)发送到Docker Hub或内部docker服务器。你知道Ernest,我之前用过的一个选项,就是让你的构建系统标记工件并将其上传到Amazon S3。这反过来又创建了一个最小的,可行的工件库。但它绝对有效。最后,我们进行部署。 Rundeck是一个很好的工作流驱动的部署选项。它允许您定义作业,经常在其周围放置权限,然后在整个系统中自动化工作流。

       部署是一种流行的工作流程,人们使用它来实现自动化。 有些人使用他们的配置管理工具进行应用程序部署,或者其他人只编写他们自己的自定义工具。有些人使用UrbanCode和ThoughtWorks等人的商业工具。有一个来自Etsy的开源产品,它叫做Deployinator。它提供了一个仪表板,可让您运行自己的部署工作流程。 这个领域的工具变化很大。就像我们之前说的那样,没有人拥有完全相同的连续交付管道,这没关系。

       你知道,当我为不同的地方建造管道时,我试着想一想我在这里建造的最简单的东西是什么? 我问,我试着真正关注的问题; 这部分管道的最低可行产品是什么请记住,任何不直接为您正在处理的产品增加价值的东西都是浪费。 过度投资您的CI管道,超出您的产品需求,需要时刻考虑投入产出比。

PS:这里以我个人工作经验,强调一点,管道或者翻译流水线,还是英文的pipeline最舒服。不管CI还是CD,在Jenkins上许许多多构建job,都是使用Pipeline来写代码实现串联起来。如果要写pipeline,那就要会Groovy语言,是Java的一种脚本语言。一个pipeline文件,也叫Jenkinsfile,里面是由许多阶段(关键字是stage)来定义的。一个stage下可以定义step。以后,是很有必要,来开一个Pipeline系列文章,来学习Jenkins的高级部分,我博客已经有jenkins的基础入门部分。

你可能感兴趣的:(DevOps基础扫盲课程系列)