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中的构建链可见性

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

建立链触发

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

要在链配置中发现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

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

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

相关文章

复选框操作checked选中为true,反之为False,也可以赋值为true,false

转载于:https://www.cnblogs.com/shiluoliming/p/6518236.html

java 个税计算_【JAVA300例】10、计算个人所得税

逻辑是这样的。每个等级计算的系数都不一样。分别有多个档位。要判断处于什么档位然后用特殊的公式去计算。原版是从小到大判断,每次写条件很烦。这里换成从大到小。节省敲代码时间。import java.util.Scanner;public class Test010{public static void main(String…

Java是否越来越接受静态导入?

曾经有一段时间,至少在礼貌的社会中,人们普遍认为使用“ 不是 ”一词是不可接受的。 确实,那时(也许直到今天),许多人确实(也确实)认为不是一个真实的词。 尽管这个词并没有 引起争议…

Stream 工具方法

inputstream 转 string 1、使用字符流 InputStream is TestZhimaCustomerCertificationInitialize.class.getClassLoader().getResourceAsStream("config/rsa_private_key_pkcs8.pem"); InputStreamReader isr new InputStreamReader(is); BufferedReader br new…

从0开始学习 GitHub 系列汇总笔记

本文学习自Stromzhang, 原文地址请移步:从0开始学习 GitHub 系列汇总 我的笔记: 0x00 从0开始学习GitHub 系列之[初识GitHub] GitHub 影响力 a.全球顶级科技公司纷纷加入 GitHub ,并贡献他们自己的项目代码 Google: https://github.com/goog…

Drools Guvnor –管理访问

外部化业务或技术规则对于可伸缩应用程序非常重要,但是应该管理BRMS服务访问。 guvnor使用基于角色的授权提供控件UI访问和操作。 在drools-guvnor参考手册中列出了几种权限类型。 具有所有权限的管理员。 分析师或只读分析师:特定类别的分析师权限。 软…

java文件操作和_JAVA文件操作类和文件夹的操作

JAVA文件操作类和文件夹的操作package com.gamvan.tools;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import jav…

CCNA基础知识摘录

cisco设备的启动要点:1、检测硬件(保存在rom)2、载入软件(IOS)(保存在Flash)3、调入配置文件(密码,IP地址,路由协议都保存在此)(此文件保存在NVRAM&#xff0…

【VS开发】IP地址格式转换(htonl、ntohl;inet_addr、inet_ntoa)

1、htonl ()和ntohl( ) u_long PASCAL FAR ntohl (u_long netlong); u_short PASCAL FAR ntohs (u_short netshort); ntohl( )-----网络顺序转换成主机顺序 u_long PASCAL FAR htonl (u_long hostlong); u_short PASCAL FAR htons (u_short hostshort); htonl ()-----主机顺序转…

SOA示例应用程序

SOA描述了一组用于创建松散耦合的,基于标准的,与业务相关的服务的模式,由于描述,实现和绑定之间的关注点分离,因此提供了新的灵活性。 近年来,至少在参与大多数信息技术活动的人们中,面向服务的…

java 分贝_java11教程--jhsdb命令

您可以使用该jhsdb工具将Java进程或崩溃的Java虚拟机(JVM)的核心转储连接。概要jhsdb clhsdb [--pid pid | --exe executable --core coredump]jhsdb debugd [options] (pid | executable coredump) [server-id]jhsdb hsdb [--pid pid | --exe executable --core coredump]jhsd…

Oracle使用startup与startup force启动的区别

1. startup 就是正常启动数据库,没什么好说的。 2. startup force 是shutdown abort startup的组合,即强制关闭数据库 正常启动数据库,想快速重启数据库时胆子大的人用的。 startup force测试 在一个窗口执行startup force 命令 点击(此…

js点击button按钮跳转到页面代码

www.111cn.net 编辑:smoke 来源:转载在网页中button按钮不具备a标签的属性了,如果我们要给button 按钮增加跳转事件我们可以在它的确onclick事件上点击跳转js来实现,下面我来给大家介绍一些常用的方法。点击按钮怎么跳转到另外一个页面呢?我们…

Mac OS X上的Java Memcached

介绍 在本文中,我将解释如何: 在Mac OS X上安装和配置Memcached 在Java应用程序中使用Memcached 我不会过多地介绍在您的应用程序中使用分布式缓存的好处,但是至少让我们提供一些在企业门户(在我的情况下为eXo平台)…

Js实现内容向上无缝循环滚动

当前项目有一个类似公告向上滚动的需求,在网上搜索到一个比较棒的程序,现摘录如下: //document.getElementById()的最简化应用 function $(element) {if (arguments.length > 1) {for (var i 0, length arguments.length, elements [];…

Repeater 中TextBox 触发TextChanged事件

两种方法 1.TextBox 绑定TextChanged 并设置AutoPostBack "true" &#xff0c;如果不设置AutoPostBack "true"则不会触发TextChanged事件&#xff0c;然后在对应的方法里面循环Repeater查找改变项 部分代码 <ItemTemplate ><tr><td style &…

什么是Spring Integration?

随着Spring Integration项目逐渐获得越来越多的采用和兴趣&#xff0c;企业集成或企业开发领域的开发人员很可能会遇到它。 他们可能会发现它很有趣&#xff0c;但并没有完全理解它的含义&#xff0c;所要解决的问题&#xff0c;可以从中获取更多信息以及它在ESB和其他SOA基础结…

java jmap mat_java内存调优之jmap,jstack,mat

查看整个JVM内存状态jmap -heap [pid]要注意的是在使用CMS GC 情况下&#xff0c;jmap -heap的执行有可能会导致JAVA 进程挂起查看JVM堆中对象详细占用情况jmap -histo [pid]可以通过jmap -histo [pid] | head -20查看top20的实例个数以及内存占用情况导出整个JVM 中内存信息&a…

lftp

-f&#xff1a;指定lftp指令要执行的脚本文件&#xff1b; -c&#xff1a;执行指定的命令后退出&#xff1b; --help&#xff1a;显示帮助信息&#xff1b; --version&#xff1a;显示指令的版本号。下载 get当然是可以的&#xff0c;还可以&#xff1a; mget -c *.pdf #把所有…

Apache Shiro第1部分–基础

Apache Shiro &#xff08;最初称为JSecurity&#xff09;是Java安全框架。 它被接受并于2010年成为Apache顶级项目。它的目标是功能强大且易于使用。 该项目正在积极开发中&#xff0c;用户和开发人员的邮件列表均处于活动状态。 最重要的区域记录在其网页上。 但是&#xff0…