teamcity_TeamCity构建依赖项

teamcity

介绍

构建依赖关系的主题既非琐碎的,也非次要的。 各种构建工具从不同的角度处理此主题,从而提供了各种解决方案,每种解决方案都有其优点和缺点。

熟悉发行版和快照依赖关系的Maven和Gradle用户可能不了解TeamCity快照依赖关系,或者假定他们与Maven相关(这是不正确的)。 熟悉工件和快照相关性的TeamCity用户可能不知道,除了TeamCity提供的功能之外,添加Artifactory插件还使他们能够使用工件并构建相关性。

上面提到的某些名称似乎建立得不够充分,而其他一些则可能需要讨论其使用方式。 考虑到这一点,我决定在自己的博客文章中探讨每种解决方案,并设定了提供足够信息的目标,以便人们可以选择最有效的方法。

第一篇文章探讨了 Maven快照和发行版的依赖关系。 这是第二篇文章,涵盖了TeamCity提供的工件和快照依赖关系,而第三部分也是最后一部分将介绍TeamCity Artifactory插件提供的工件和构建依赖关系。

非Maven依赖项

虽然基于Java的Maven依赖关系管理和工件存储库在Java中非常普遍并且分布广泛,但是在某些情况下,您仍然可能发现它们不足或不足以满足您的需求。 首先,您可能没有使用Java进行开发,或者您的构建工具可能未提供与Maven存储库的内置集成,就像Ant (或它的Gant和NAnt衍生产品), SCons , Rake或MSBuild一样 。 其次,快照Maven依赖项提供了自己的挑战,这在上一篇博客文章中已涉及到,这使得很难确保在构建链中使用正确的快照依赖项。

为了解决这些情况,TeamCity提供了两种方法来连接相关的构建配置及其结果: 工件快照相关性。

TeamCity神器依赖项

TeamCity中工件依赖的想法非常简单:在当前版本开始之前,下载另一版本生成的工件。 将工件下载到指定的文件夹(默认情况下为checkout目录)之后,您的构建脚本可以使用它们来实现其目标。 您可以在TeamCity文档中找到配置详细信息。

自然,此方案不适用于具有自动依赖项管理的构建工具,但是它与接受或期望本地路径(相对于checkout目录)的构建或shell脚本一起使用时效果很好。 请注意,复制不仅适用于生成的构建二进制文件,而且适用于任何类型的二进制文件或文本文件,例如上面的屏幕截图所示的TeamCity覆盖率报告。

关于指定工件依赖项有一个重要的细节,那就是“从中获取工件”配置,在此配置中,您可以指定应从中获取文件的构建类型。 该字段的可能值为“上次成功”,“完成”,“固定”或“标记构建”,以及构建号或“来自同一链的构建”。 尽管大多数值对于理解“上一次成功构建”为默认且通常合适的选项应该是微不足道的,但“相同链”构建的定义与TeamCity 快照依赖关系直接相关。

TeamCity快照依赖项

想象一下一个整体的多步骤构建过程(构建,测试,打包,部署),您决定将其拆分为多个较小的构建,依次调用它们,形成执行链。 这样做可以使每个链步骤独立配置或触发,并并行运行某些步骤,以加快流程速度(例如执行测试或构建独立的组件)。 最重要的是,它使整体维护非常容易。 但是,在这样做的同时,您需要确保每个链式步骤都使用从VCS提取的相同的一致源集,即使在链式步骤运行的同时进行了新的提交。 这就是TeamCity 快照依赖项的目的:它们将多个构建配置连接到称为执行链的单个执行链中 ,并且每个步骤都使用相同的源集 ,而与VCS更新无关。 请注意,TeamCity使用术语“快照依赖关系”可能会使熟悉Maven快照依赖关系的人们感到困惑,这是两个不相关的概念。

快照依赖项的配置类似于工件依赖项。 您可以在TeamCity文档中找到配置详细信息。

一起使用工件和快照依赖项

如果适用,建议定义构建配置之间的两种依赖关系,因为这不仅可以确保在整个链步骤中使用一致的源集,而且还可以确保生成的工件始终如一。 现在,上面提到的工件依赖项中的“从同一链构建”的定义变得很清楚,因为这是此方案中唯一有意义的选项。

从某种意义上讲,您可以考虑在获取第一个源的“快照”之后,构建链步骤与VCS更新隔离地运行。 链工件可以从相同的来源重新创建,也可以通过与工件相关的链步传递。 这使得链接步骤一致,可重现并且始终是最新的(当应用于使用链接工件时),而使用Maven快照依赖项则无法轻松实现。

TeamCity 7.0中的构建链可见性

通过为构建链提供新的UI,使构建链的步骤可见并可以重新运行, TeamCity 7.0将构建链的概念提升到了一个全新的水平。 定义快照依赖关系后,新的“构建链”选项卡将出现在项目报告中,以可视化方式表示所有相关的构建链,并提供一种方法,使用原始提取的同一组资源手动重新运行任何链步骤。

建立链触发

将构建配置与快照相关性相关联,因此将其构建分组到构建链中,不仅使它们在使用的源方面更加一致,还影响将构建添加到构建队列的方式:触发某个链步骤后,默认行为是除了最初触发的步骤之外,还添加所有前面的链式步骤,并保持其各自的顺序。 为了更加清楚,让我重复一遍: 触发某些链配置会在构建队列中添加之前的配置(在其左侧),而不是后续的配置(在其右侧) ,尽管乍一看似乎是违反直觉的。 想法是标记链执行停止的位置,这恰好是最初触发的配置。 它成为最后的执行步骤。

要在链配置中发现VCS更改时触发后续链步骤,您可以将带有“快照依赖项更改触发”选项的VCS触发器添加到配置中,这将是最后一个执行步骤。 然后,只要更新任何前面的链式步骤,就会触发此配置,从而调度整个链式执行。

考虑到此行为,因此,您需要确定哪些配置是自动触发的,哪些应该手动运行。 通常,可以通过VCS触发器自动触发对外部环境没有影响的较早的链式步骤,但是在人工核实了先前的链式结果之后,会手动调用最终的链式步骤(可能会修改外部系统)。 手动运行最终链式步骤的过程通常称为“促进”先前完成的构建。

示例构建链:编译,测试,部署

想象一下连接到构建链中的三个示例构建配置: "Compile""Test""Deploy""Deploy"是依赖于"Test"的快照,快照依赖于"Compile"

在此示例场景中,遵循上面给出的建议,将自动触发"Compile""Test"配置,而手动触发"Deploy""Compile"配置中的VCS更改仅触发该链式步骤的执行,而"Test"配置中的VCS更改则触发"Compile""Test"执行(按该顺序)。

"Compile"配置添加到构建队列后,其源时间戳记将记录在服务器上,以用于所有后续链式步骤。 如果将任何链式步骤连接到不同的VCS根,则其源也将根据相同的时间戳拉出。

促进完成的构建

一旦自动链执行停止(运行"Test" ),您可以通过单击未触发的"Deploy"配置上的相应“运行”按钮来继续执行(请参见上面的构建链屏幕截图)。 另外,也可以通过其“构建操作”促进完成的"Test"构建,并调用依赖于快照的配置-在这种情况下为"Deploy"配置。

摘要

本文概述了TeamCity工件和快照依赖性,构建链,如何触发其步骤以及如何促进完成的构建。 我希望您现在除了了解Maven之类的构建工具所提供的依赖关系之外,还应该了解其工作原理以及何时(或不适合)何时使用TeamCity构建依赖关系。

请有关此主题的更多信息,请参阅TeamCity文档:

  • 依赖构建
  • 建立链

本系列的最后一篇博文将揭示如何使用TeamCity Artifactory插件来实现类似于基于Maven的依赖管理的项目构建链的行为。 敬请关注!

参考:来自Goldman ++博客的JCG合作伙伴 Evgeny Goldin的TeamCity构建依赖项 。


翻译自: https://www.javacodegeeks.com/2012/04/teamcity-build-dependencies.html

teamcity

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刷新器-Java EE 7后端十大功能

这是我的Java EE 7小知识系列的第二部分。 在进行简要介绍的第一个介绍之后,我决定请Arjan Tijms撰写有关Java EE 7中他最喜欢的新后端功能的文章。如果您关注Java EE领域,您将知道Arjan。 他是Java EE开发人员,JSF和Security EG的长期成员&a…

spark官方文档_这些未在 Spark SQL 文档中说明的优化措施,你知道吗?

本文来自上周(2020-11-17至2020-11-19)举办的 Data AI Summit 2020 (原 SparkAI Summit),主题为《Spark SQL Beyond Official Documentation》的分享,作者 David Vrba,是 Socialbakers 的高级机器学习工程师。实现高效的 Spark 应用程序并获…

一键对频对讲机好吗_挑战传统,新型对讲机展现独特一面--极蜂智能网络对讲机...

说起对讲机你首先想到的是什么样子的,是香港电影中警察佩戴的那种,还是国内建筑工地上使用的傻大粗那种,不过无论是哪种形状的,现实中确实非常的实用。不过随着科技的发展,很多不可能的事情已经变为现实,而…

提防Java中的函数式编程!

这对函数式编程并不会造成太大的影响,这真棒。 这是关于某些实践的警告,您很可能会将其应用于您的代码,而这完全是错误的! 。 高阶函数对于函数式编程是必不可少的,因此,谈论它们将帮助您成为聚会中的焦点…

LoadRunner脚本增强技巧之检查点

检查点的设置理解起来非常简单,就是要在服务器返回的页面中检查是否存在关键信息。检查点函数的错误会导致整个脚本运行结果的失败,通过这个功能可以方便地定位脚本运行中的逻辑错误。检查点的设置通常分为两种,一种是对文字的检查&#xff0…

Spark简介,您的下一个REST Java框架

希望今年您对Java的热情很高! 今天,我们将研究一个清新,简单,美观且实用的框架,以Java编写REST应用程序。 它将非常简单,甚至根本不会看起来像Java。 我们将研究Spark Web框架。 不,它与Apache…

SQL Search

Press TAB to expand wildcard tab键之后,会自动展开,直接枚举表中所有的字段 根据名字查找存储过程,发现找不到 原因是,本地是一个备份库。服务器上通过sql source control进行版本控制的。 在通过sql source control将服务器上新…

Python异常处理和进程线程

写在前面 最坏的结果,不过是大器晚成; 一、异常处理 - 1.语法错误导致的异常 - 这种错误,根本过不了python解释器的语法检测,必须在程序运行前就修正; - 2.逻辑上的异常 - 即逻辑错误,例如除零错误&#xf…

在Oracle中使用JDBC插入功能

介绍 在本文中,我将显示一个示例,说明如何使用Oracle支持的JDBC批量插入功能,这些功能特定于Oracle。 有关为什么可能希望一般使用批量插入的更多详细信息,例如,在某些情况下需要考虑性能,请参阅Joormana …

Vue+ECharts的小示例

VueECharts做数据可视化1. Vue Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现…

汇编学习笔记(3)-80x86指令集

前言 (1)指令的一般格式 [标号:] 助记符 [操作数1 , [操作数2]] [; 注释] 一行一条指令 助记符就是指令的名称,每条指定必定有个助记符。 助记符前面的标号是给汇编编译器看的,由我们自己取名,一般取表示本…

osg 三维gis开发_三维GIS平台的可视化应用 (下)

上一篇主要对三维GIS的基础数据和三维模型进行了一点说明,本篇将接着聊剩下的部分,主要是三维GIS平台能够支持什么样的场景展示,并来对平台的应用进行一些介绍。没看过上篇的朋友可以先了解一下再看本篇:MonoLog:三维G…

前端HTML介绍

一、HTML简介HTML定义:  超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加标记符&#xff…

solr创建索引_Solr:创建拼写检查器

solr创建索引在上一篇文章中,我谈到了Solr Spellchecker的工作原理,然后向您展示了其性能的一些测试结果。 现在,我们将看到另一种拼写检查方法。 与其他方法一样,此方法使用两步过程。 相当快速的“候选单词”选择,然…

带有Javaslang的Java 8中的功能数据结构

Java 8的lambda(λ)使我们能够创建出色的API。 它们令人难以置信地提高了语言的表达能力。 Javaslang利用lambda来基于功能模式创建各种新功能。 其中之一是功能性集合库,旨在替代Java的标准集合。 (这只是鸟瞰图,您…

丰田pcs可以关闭吗_丰田车必备的配置有哪些是在亚洲龙上体现了?

亚洲龙基于丰田TNGA架构下的GA-K平台打造而来,与雷克萨斯ES一致,先期推出搭载2.5L自然吸气发动机以及2.5L混合系统的车型。作为一汽丰田的全新旗舰轿车,亚洲龙主销车型配备丰田TSS规避碰撞辅助套装,英文全拼为 “Toyota Safety Se…

[NOIP2014]飞扬的小鸟

思路{ 对于每一列,小鸟或下落,或上升。那我们很容易想到对应的背包问题! 按照完全背包的思想更新上升部分,01背包的方法更新下降部分。 撞到柱子了(aluba。。。。。。aluba.。。。。。)不慌,只需把它设为不可打即可&am…

在自定义Java 9映像上运行Eclipse Neon

我已经开始修改自定义Java二进制运行时映像文件。 映像文件是打包为运行时平台的模块的配置。 基本上,默认映像包含组成Java运行时的所有内容。 自定义图像可以包含该图像的一些子集。 例如,我创建了一个仅包含“ compact 3”概要文件的映像&#xff0c…

如何以访客模式访问_重新访问了访客模式

如何以访客模式访问访客模式是面向对象设计中最被高估但又被低估的模式之一。 高估了它,因为它通常选择得太快了( 可能是由建筑宇航员选择的 ),然后以错误的方式添加后,使原本非常简单的设计肿了。 如果您不遵循教科书…

【数据挖掘导论】——数据质量

数据质量数据挖掘使用的数据一般是为其它用途收集或者收集的时候还没有明白目的。因此数据经常不能在数据的源头控制质量。为了避免数据质量的问题,所以数据挖掘着眼于两个方面:数据质量问题的检測和纠正(数据清理);使…