云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

轻量服务器_数据库乱码_免费领

小七 141 0

分布式数据库_个人_模板式自助建站

在构建连续的交付管道时,团队经常面临扇入挑战。背景我们指的是这个吗?下图显示了一个典型的场景。有多个组件或应用程序构成系统的一部分。每个都有自己的构建/测试管道。这可能还包括执行部署和运行各种组件级别测试。理想情况下,您的体系结构原则导致了松散耦合的组件和定义良好的接口。你将有一种方法来确保接口的向后兼容性,或者,如果你需要做一个突破性的改变,一个机制来版本你的API和支持并发版本。这将允许每个组件有自己独立的生命周期,包括生产部署。但是,有时这是不可能的,您需要将具有特定版本的组件集合在一起(如果愿意,可以组装),并执行某种形式的聚合/集成测试阶段。在一个特定的客户参与中,有一个需求是根据一组基线组件连续运行一个非功能测试套件。当它们被更新时,需要更新基线,然后重新运行测试。在解决这个问题的过程中,我们为这个常见的扇入模式开发了一个实现。在本文的其余部分中,我将向您展示如何构建一组作业来实现这一点图案.要求寻址每个组件都有自己的CI/CD管道,因此会发布经过测试和版本控制的工件每个组件都有自己的版本编号策略系统范围的测试周期将需要许多小时才能运行完成测试循环后,应在每次测试运行开始时重新运行,应部署任何新的组件版本每个测试运行都必须对升级的组件版本进行审核并将其包含在testsJob实现中解决方案使用两个工作流实现需求作业:添加/合并清单作业部署和测试作业如下图所示,他们的关键步骤实施。为什么两份工作?简单的答案是"由于并发"回答:我们想要为了确保处理来自上游组件的所有触发器-我们不想删除任何一个,我们需要确保更新是按顺序处理的我们需要确保在清单上一次只进行一次更新(即同步写入)-即构建并发1我们还需要确保只有一个构建可以运行部署或NFT测试—即,当NFT运行时,我们不能开始重新部署新的组件版本。我们研究了单个工作流作业是否足够,但是,工作流的并发限制意味着多个构建将合并,因此,世界人工智能,存在丢弃某些触发器及其相关参数的风险,其次,不可能将多个阶段包装到一个并发单元中(至少在JENKINS-29892实现之前是这样的)类型。The第一个问题我们需要解决的是在哪里持久化需要部署的所需组件版本的状态,即系统或应用程序级别的清单。一些选项是c考虑:存储scm中文件中的版本存储共享文件系统中的版本存储与构建相关的文件中的版本从外部存储库中查找-即始终采用最新的"已发布"版本我们决定将版本存储在与生成关联的文件中提供了最大的可移植性(只依赖于Jenkins本身而不是外部系统),但是,购物返利app,由于它允许历史维持。我们的实现检索以前的清单(即从上一次成功的构建),然后允许在将其作为建造。让我们看看我们在中实现了文件处理步骤工作流。获取上一个清单:尝试{步骤"CopyArtifact",筛选器:"manifest",pr项目名称:环境作业名称,选择器:[$class:'StatusBuildSelector',新零售企业应用中心,稳定:false]])//对文件执行某些操作}捕获(异常e){回声e.toString()//执行某些操作以创建文件的第一个版本}我们选择只从上一次成功构建中获取文件,以确保如果作业异常终止且发布失败,我们不会丢失连续性。开完成我们的更新处理,我们需要发布更新清单:存档'清单'接下来,我们需要实际读取和写入清单中的组件版本号。幸运的是,Groovy提供了一些简单的类来处理这个问题。我们将使用属性()类。如果我们还没有一个清单(即第一次运行场景),我们定义了一个新的属性()对象:版本=新属性()否则,我们从文件:def str=readFile"manifest":文件,淘客网店推广平台,字符集:"utf-8"def sr=新的字符串读取器(str)def props=新属性()支柱负载(高级)写出文件与此类似,但是,由于序列化限制,我们需要在@NonCPS中包装StringWriter的使用函数:writeFile文件:"manifest",文本:writeProperties(props)@NonCPS def writeProperties(属性){def sw=新的StringWriter()道具店(sw,空)返回西南至字符串()}然后,该作业执行其主要功能,即获取作业参数并更新清单:版本[app]=修订版并执行构建的异步触发器来运行测试:生成作业:下游作业,传播:false,云服务器哪家好,等待:false注意:此作业设置为带有两个字符串参数的参数化生成:app和revision此作业设置为不执行并发生成。如果它以不同的参数并发触发,那么触发器将不会合并-多个生成将排队。这保证我们处理中对清单的所有更新转过身来可以下载此作业的完整源代码发件人:https://github.com/harniman/workflow-演示/blob/master/fan-in添加到-清单.groovyTo有助于理解,工作已经有了阶段,这使得在CloudBeesJenkins平台阶段可以清楚地看到进展视图:注意链接到清单突出显示清单显示所需的应用程序版本per:部署和测试作业部署和测试作业也配置为一次执行一个构建。它也是一种工作流作业类型。这确保了多个触发器被合并-它不是参数化的,而是从上游读取组件和版本的清单建造。这个作业使用类似的步骤从上游生成读取所需的清单,也从上次运行此作业时读取当前清单。同样,我们需要处理这样的场景:这是第一次运行,而文件没有存在。拥有创建了当前和必需的Properties()对象,这是一个很容易比较并返回更新列表的groovy代码块必需:def比较(所需版本,当前版本){当前应用程序=currentVersions.stringPropertyNames().toArray()请求应用程序=requiredVersions.stringPropertyNames().toArray()Properties updatedVersions=新属性()对于(i=0;i0){日志"更新应用程序","以下应用程序需要更新:${appsToUpdate.toString()}"def分支=[:]对于(i=0;i