Questions tagged «continuous-integration»

在软件工程中,持续集成(CI)经常执行对完整软件产品的持续构建和自动化测试。每天至少一次,通常一天几次,有时甚至在每次签入版本控制系统后的次数一样多。

1
构建脚本和构建服务器的职责
我需要对构建脚本和构建服务器的职责进行一些说明。 我在网上阅读了几篇有关持续集成和构建的文章。包含 F5密钥不是构建过程 构建服务器:项目的心脏监护仪 每日构建是您的朋友 我和我的顾问就软件的构建过程进行了交谈。因为他很有经验,所以我相信他的发言,但是我感到困惑。 据我了解,根据我的研究(由于这是我要提出的问题,请在此处对我进行纠正),理想应该如下: 每个项目都有其构建脚本 这个脚本建立了项目 该脚本确保依赖项是先前构建的 由于依赖关系可能是其他项目,因此使用自己的构建脚本会产生树状层次结构。可能会有一个顶级构建脚本来构建所有项目和应用程序。 但是,构建服务器的职责是: 签出仓库 触发构建 触发测试和其他质量检查工具 使工件可用 可以手动,每晚或每次存储库更改时触发 据我所知,我的顾问的目标是使一个构建脚本变得不灵活且不可维护(除了为我们的旧代码库创建一个构建脚本会花费很长时间的事实)。此外,构建服务器还应维护依赖关系,例如在创建新依赖关系时使用较旧的依赖关系。特别是Ant因为它是一个具体的主题,因此无法构建代码库中使用的所有各种技术,并且无法维护依赖性。 您能否详细说明目标并明确职责?

3
持续集成和DVCS模式
我们目前使用Subversion和TeamCity,我们将转向使用Mercurial(特别是Kiln,因为我们是FogBugz用户)。 显然,这将导致我们的开发模式(我们两个人!)发生变化-希望有所改善-但我正在努力解决的一个问题是如何构建事物,以便我们仍然享受持续集成/我们的CI服务器的好处(已经存在并且将继续保持收益是给定的,对此问题的讨论不在此问题的范围之内。 借助SVN,我们致力于使用数量有限的中央存储库-每个项目实际上一个中央存储库(或多或少的一个Visual Studio解决方案),因此可以轻松触发构建并确保所有文件都已提交且没有任何内容但是,如果我们要充分利用Mercurial,我们将希望拥有更多的存储库实例,我希望这些更改通常会流向确定的“实时”存储库。我苦苦挣扎的问题是,对于我来说,实时回购似乎太“迟到”,无法触发我的CI构建OTOH每个开发人员每个项目一个CI构建可能会过多(并导致其他问题)。 我在钓鱼,但是那是因为中央颠覆仓库提供的一件事(我,在我们的设置下!)非常清楚什么时候建造。 nb我不是在问将Mercurial与持续集成结合使用的机制-我想为个人项目,模式和结构以及工作实践/工作流程做些准备,以求达到目标。

3
构建自动化与部署自动化与持续集成
我想变得更高效,我想高效地使用操作工具。 考虑到这一点,我想了解有关持续集成的更多信息,但是似乎有很多不同的事情要涉及到。 我实际上在工作中使用Jetbrains套装(IntelliJ,WebStorm ...),所以我想继续使用它们,并且我想使用TeamCity,它似乎是一个不错的工具,带有许多用于持续集成的插件。 我的问题是我不知道它们之间有什么区别: 楼宇自动化(TeamCity是这种软件):我知道我们可以使用远程VCS存储库来构建应用程序,这很棒,但是这样做的主要目的是什么?在执行此操作时,什么样的信息很重要?实际上,我已经知道我的软件是否在本地构建,而我的团队也是如此。那么,在不部署自动化的情况下使用它的目的是什么? 部署自动化(TeamCity似乎并不容易做到) 持续集成(似乎是上述两者的结合) 持续交付(这到底是什么?为什么它与持续集成不同?) 您能帮我多了解一点吗?

2
大型公司如何进行持续整合?
在我的公司中,通常不做任何中间构建来检查每个功能/错误修正分支如何在dev中合并。每天只有一次构建,这总是会引发很多测试失败和构建错误。有人告诉我,为超过1000个开发人员的每次合并进行构建都是不合理的。 因此,我搜索了在拥有那么多开发人员或更多开发人员的公司(Microsoft,Facebook)中如何配置CI,却一无所获。也许内部人士可以告诉我呢?

3
集成测试中应包括集成测试吗?
假设我们正在开发一个Web应用程序,并且Hudson做一些典型的工作,例如编译,单元测试和静态代码分析。 但是棘手的部分是:一旦完成先前的工作,Hudson就会部署并启动应用程序服务器以进行集成测试。 这意味着一些困难的事情,例如数据库连接,第三部分应用程序连接,套接字端口监听,环境变量,服务器启动故障处理等。我们每次都必须正确地设置和拆除这些东西,这很难。更糟糕的是,集成测试会轻易破坏集成测试。 您认为持续集成(CI)中是否应包括集成测试?可以手动吗?还是简化集成测试?

5
什么是持续集成(CI),它有什么用?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 有人可以向我解释持续集成的概念吗,它如何以一种易于理解的方式工作?公司为什么要在代码交付工作流程中采用CI?我是一名开发人员,而我的公司(主要是构建团队)使用Team City。作为开发人员,我总是签出,更新代码并将其提交到SVN,但总的来说,我从来没有真正担心过TeamCity或CI。所以我想了解CI的用处?CI是敏捷方法论的一部分吗?

2
使用持续的构建结果作为绩效评估指标的一部分?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我的老板计划使用我们持续构建的指标(每次提交都要构建并运行测试)作为我们绩效评估的一部分(在“质量”指标中)。对我来说,这似乎是个坏主意,但我想知道是否有人研究过此方法或以前曾尝试过此方法。 我的想法是,由于担心测试将失败,因此我们的开发人员将不会像他们本来那样进行尽可能多的测试。我觉得他正在将一种有价值的开发人员工具变成一支棍子,以击败开发人员。 明显的反论点是,这将促使人们在做出承诺之前更加谨慎,从而提高他们的素质。 我在这里基地吗?请抛开我们是否应该进行绩效评估的问题,该问题已在其他地方得到解答。


1
依赖性提升策略:孤立还是精心策划?
我们有很多相互依赖的应用程序和Web服务(一些面向公众的产品,一些内部和私有“后端”的一部分)。这些组件中的每一个都有4个环境(用于特定目的的服务器/节点集群): 非生产 DEV-CI建立推动变更的集成开发环境;有助于工程师解决在本地无法复制的难以发现的错误 QA -隔离的质量检查/测试环境 DEMO -为业务利益相关者提供稳定的UAT环境 生产 LIVE -我们的现场/制作环境 代码升级是:(LOCAL开发人员的机器)=> DEV=> QA=> DEMO=> LIVE。 假设我们有一个名为的应用程序myapp,该应用程序由RESTful Web服务支持,该服务myws本身由一个名为的数据库支持mydb。 目前,我们拥有我所说的“ 策划 ”推广这些依赖关系之中:在myapp-dev指向myws-dev它使用mydb-dev。同样,myapp-qa指向myws-qa使用mydb-qa。与DEMO和相同LIVE。 问题是,无论何时我进行更改,例如myapp,这都需要我也对myws和进行更改mydb。但是因为每个DEV环境都指向其依赖项的DEV环境,所以这意味着我必须同时计划和部署这些更改。此外,如果一个构建变得不稳定/损坏,它通常会使其他上游组件崩溃;例如,如果开发人员在更改时破坏了某些内容mydb-dev,则myws-dev和myapp-dev群集通常也会变得不稳定。 为了解决这个问题,我针对我所谓的“ 孤立的 ”促销策略提出了一个建议:所有组件间的依赖关系都遵循以下准则: 上游的依赖关系取决于DEMO对它们的下游依赖环境,对于所有其非生产环境的(DEV,QA和DEMO); 和 上游依赖项依赖于LIVE环境,生产环境依赖于下游依赖项 使用此约定,实际myapp-dev将指向myws-demo,而将使用mydb-demo。同样,myapp-qa也将指向myws-demo和mydb-demo。 我在这里可以找到的优势是构建稳定:DEMO特定组件的环境变得不稳定的可能性要小得多,因为DEMO没有在DEV和上进行严格的测试,代码就无法实现QA。 我可以发现这种方法的唯一缺点是,如果DEMO某个特定组件发生故障,则所有上游依赖项的所有非生产环境都将突然中断。但是我要反驳说,由于在DEV和上进行的测试,这种情况极少发生QA。 这已经得到了成为一个问题,很多开发者(比我更聪明,经验丰富)已经解决了,如果这个问题,其解决方案已经有名字给他们我不会感到惊讶(除了什么我打电话策划/孤立)。所以我问:孤立的促销策略的优点是否胜过任何缺点,在这里我可能忽略哪些缺点?

3
持续集成(与iOS和Android项目)[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我正在尝试对公司进行一些积极的改变,其中之一是实现持续集成。我们进行移动开发(iOS / Android),因此我需要一个同时支持两种类型项目的配置项。如您所知,我对CI的了解不多,但我在Google上进行了一些搜索,我认为Jenkins和Hudson是最受欢迎的两个。 我有两个部分的问题。 您对詹金斯有何想法? CI是否有办法检查项目是否符合 编码标准(例如松耦合等)?

4
通过持续集成来保持不断增长的多样化代码库
我需要有关连续集成设置的概念和设计的帮助。 我们当前的CI设置使用buildbot。当我开始设计它时,我继承了一个定制的CI构建器(不是严格地说,因为我一年前参与了它的设计),该构建器经过定制可在一夜之间一次运行整个构建。一段时间后,我们认为这还不够,并开始探索不同的CI框架,最终选择了buildbot。我过渡到buildbot的目标之一(除了享受所有额外的乐趣)是要克服我们定制的夜间构建器的某些不足之处。 幽默一下,让我解释一下我继承的东西。我公司的代码库是将近150个独特的c ++ Windows应用程序,每个应用程序都依赖于十几个内部库中的一个或多个(以及许多第三方库)。其中一些库是相互依赖的,并且具有依赖的应用程序(尽管它们彼此无关)必须使用该库的相同内部版本来构建。这些应用程序和库中的一半被认为是“旧版”且不可移植,必须使用IBM编译器的几种不同配置(我已经为其编写了独特的子类Compile)构建,而另一半则使用Visual Studio构建。ShellCommands,因为不支持VSS)。 我们最初的每晚构建器只是简单地收集了所有内容的来源,并按一定顺序构建了东西。没有办法只构建一个应用程序,选择版本或对事物进行分组。它将启动虚拟机来构建许多应用程序。它不是很健壮,也不是可分发的。它不是非常可扩展的。我希望能够克服buildbot中的所有这些限制。 我最初执行此操作的方式是为我们要构建的每个应用程序创建条目(它们全部包含150个),然后创建可以将各种应用程序构建为组的触发调度程序,然后将这些组包含在整个夜间构建调度程序下。它们可以在专用的从属服务器上运行(不再需要虚拟机),如果我愿意,我可以简单地添加新的从属服务器。现在,如果我们要按计划进行完整构建,只需单击一下即可,但是如果需要,我们也可以只构建一个应用程序。 但是,这种方法有四个缺点。一种是源代码树的复杂依赖关系网。为了简化配置维护,所有构建器都是从大型词典生成的。检索依赖关系的方式并非十分稳健(即,在我的构建目标字典中删除某些内容)。第二个原因是每个构建都有15到21个构建步骤,这很难在Web界面中浏览和查看,并且由于有大约150列,因此需要永久加载(从30秒到几分钟)。第三,我们不再能够自动发现构建目标(尽管,尽管我的一位同事为此而烦恼,但我最初并不认为这对我们有什么帮助)。最后, 现在,转向新开发,我们开始使用g ++和subversion(请注意,不要移植旧的存储库-只是为了新的东西)。另外,我们也开始进行更多的单元测试(“更多”可能会给出错误的图片……更像是任何东西),以及集成测试(使用python)。我很难弄清楚如何将它们适合我的现有配置。 那么,我在哪里从哲学上错了?我怎样才能最好地继续前进(使用buildbot-这是我有许可证可以解决的唯一难题),以便实际上可以维护我的配置?如何解决设计中的某些弱点?对于大型(可能是过度)复杂代码库的CI策略,真正起作用的是什么? 编辑: 我以为我解释了我的问题,但显然我还不够清楚。我不是在寻求有关更改CI平台的建议。它不会发生,答案表明那将不会被接受。我想知道的是其他人如何使用CI管理复杂的代码库。我有十几种平方的不同产品,而且我的依赖项随风而散,它们都是不同的。这就是我想知道的处理方法。

1
拥有TFS后,为什么还要在PowerShell中创建部署脚本?
我正在尝试自动部署/持续集成,并与团队负责人进行了交谈。 我告诉他我正在研究如何在PowerShell中创建构建/部署脚本,他说使用GUI在TFS中设置自动部署非常容易,我应该进行研究。除了致力于从VS进行源代码控制外,我对TFS零经验。 在哪种情况下,TFS会失败?使用PowerShell进行自动部署会更好吗?选择PowerShell而不使用TFS还有哪些其他原因和优势? 还有另一件事:例如,我可以运行第三方工具来缩小TFS中的JS文件吗? 我可能想到的PowerShell的一些优点: PowerShell提供最大的灵活性 您可以轻松切换到另一个源代码管理系统,例如Mercurial 这些脚本比TFS生成的脚本更易于维护 PowerShell轻巧:您可以在任何PC上运行脚本

4
持续集成服务器在哪一点有趣?
我一直在阅读有关Jenkins等CI服务器的信息,我想知道:在什么时候有用? 因为对于一个只有5个类和10个单元测试的小项目,肯定没有真正的需要。 在这里,我们进行了大约1500个单元测试,它们在90秒钟内(在旧的Core 2 Duo工作站上)通过了(因为它们实际上是在测试“单元”,因此非常快)。我们的规则是测试失败时我们不能提交代码。 因此,每个开发人员都会启动其所有测试以防止回归。 显然,因为所有开发人员总是启动所有测试,所以一旦一个开发人员撤消另一个更改(如有),我们就会捕获由于冲突更改而导致的错误。 对我来说还不是很清楚:我应该像Jenkins一样设置CI服务器吗?它会带来什么? 它对提高速度有用吗?(在我们的情况下不是问题) 因为可以重新创建旧版本,这是否有用?(但是我们可以通过检出旧版转速来使用Mercurial来做到这一点) 基本上,我知道它会很有用,但我无法确切知道原因。 任何考虑到我上面提出的观点的解释都将受到欢迎。

4
连续构建服务器(cc.net,hudson,bamboo等)的远程构建经验?
当前,我们在构建过程中使用一次cc.net服务器,该服务器同时构建.net(使用msbuild和nant)和java(使用maven和ant)。 CC.net监视源代码控制,并触发在单独服务器上运行的远程版本。CC.net然后整理结果。 当我们运行远程版本时,通常: 使用模拟数据运行nunit或junit或类似数据 (可选)运行数据库脚本来创建新的数据库实例或从已知位置还原数据库。 运行硒或类似的东西来测试UI 运行emma或ncover进行代码覆盖 为各种部署环境(测试,验收,生产)构建系统 我们可能一次运行多个构建,一些.net和一些Java(来自不同的项目团队)。 设置新项目时,要使远程版本正常工作是很耗时的,并且我们认为必须有比cc.net更适合远程版本的内容。 有没有人对持续集成系统的远程构建有任何经验? 我真的不想要CI服务器的功能列表,如果您了解如何在多语言,多服务器环境中使用它们,我将不胜感激。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.