指定生成触发器和原因

您可以根据需要手动对生成进行排队,但在大多数情况下,通过使用自动触发器定义的生成过程最能满足您的团队的需求。触发生成后,具体原因将记录在 Reason 属性中。本主题将介绍和说明如何在开发生成过程时使用所有可用的生成触发器和生成原因。

  • 使用生成触发器实现团队目标

    • 防止团队生成中断

    • 使用持续集成维持质量

    • 通过运行夜间 BVT 检查产品质量

  • 使用自动生成触发器

    • 签入更改后使用持续集成触发器对生成进行排队

    • 已签入更改但生成的运行频率存在限制时使用滚动生成触发器对生成进行排队

    • 团队成员尝试签入更改时使用封闭签入触发器对生成进行排队,并在生成失败时阻止更改。

    • 使用计划触发器定期对生成进行排队

  • 手动对生成进行排队

    • 对生成进行排队

    • 对专用生成进行排队

  • 使用自定义代码对生成进行排队

  • 使用生成触发器和原因

使用生成触发器实现团队目标

Hh190718.collapse_all(zh-cn,VS.110).gif防止团队生成中断

开发人员签入的更改中断生成时,对小团队造成的后果可能是大麻烦,而大型团队则会严重降低生产率和推迟日程,以此衡量的代价非常高昂。可以使用封闭签入触发器来防止某些或所有基本代码出现此问题。

Hh190718.collapse_all(zh-cn,VS.110).gif使用持续集成维持质量

持续集成是尽可能频繁地将代码集成到共享储存库中的过程。执行代码集成期间,如果生成中断或测试失败,系统将及时通知您代码中的错误。可以使用持续集成触发器来实现持续集成。滚动生成触发器与**“持续集成”**触发器相似,每次发生签入时,如果您没有足够强大的生成系统来运行生成,则前者会很有用。

封闭签入触发器可用作对持续集成更严格的一种方法。**“持续集成”触发器会警告您的团队存在某些问题(如生成中断或核心单元测试失败),而“封闭签入”**触发器会阻止您的代码库出现这类问题。

有关如何使用生成系统来支持持续集成的更多信息,请参见 定义生成过程以支持持续集成连续生成和部署

Hh190718.collapse_all(zh-cn,VS.110).gif通过运行夜间 BVT 检查产品质量

您可以计划定期测试运行以评估生成的质量。这些测试通常称为生成验证测试 (BVT) 或冒烟测试。这些测试通常由一组广泛的测试组成,这组测试用于验证特定生成中应用程序的主要区域。您可以使用**“计划”**触发器来实现夜间 BVT 运行。

有关**“计划”**触发器的更多信息,请参见使用计划触发器定期对生成进行排队。有关如何设置 BVT 过程的更多信息,请参见如何:在生成应用程序之后配置和运行计划的测试

使用自动生成触发器

必须为生成定义指定生成触发器。在大多数情况下,您会希望生成过程自动运行。可以选择本节所述的自动触发器之一。

Hh190718.collapse_all(zh-cn,VS.110).gif签入更改后使用持续集成触发器对生成进行排队

如果使用**“持续集成”触发器定义生成,则每次团队成员签入更改时都会对该生成进行排队。生成定义工作区**将确定触发生成定义的文件。有关生成工作区的更多信息,请参见使用生成工作区

将为**“持续集成”**触发的生成分配 ReasonIndividualCI。

Hh190718.collapse_all(zh-cn,VS.110).gif使用滚动生成触发器定期生成多个签入

如果使用**“滚动生成”触发器定义生成,那么只要生成不运行,生成系统就对各个签入的生成进行排队。如果生成正在运行,则系统会一直等待,直到生成完成并且相继将尚未生成的所有签入的另一生成排入队列。如果选中“生成频率不超过n 分钟”**复选框,然后键入一个介于 0 和 2147483647 之间的整数值,则还可以限制生成的频率。

例如,您可能只有一个生成代理,因此,可能每 20 分钟就会完成生成。如果使用**“持续集成”触发器并且您的团队在上午 10 点 .. 和上午 11 点 .. 之间对代码进行了 9 次签入,那么下午 1 点 .. 前可能都无法生最近的签入。但是,如果您使用的是“滚动生成”** 触发器并将时间间隔指定为 60 分钟,那么同一组签入可能在上午 11:20 生成 ..

生成定义工作区将确定触发生成定义的文件。有关生成工作区的更多信息,请参见使用生成工作区

将为**“滚动生成”**触发的生成分配 ReasonBatchedCI。

Hh190718.collapse_all(zh-cn,VS.110).gif团队成员尝试签入更改时使用封闭签入触发器对生成进行排队,并在生成失败时阻止更改。

如果使用**“封闭签入”触发器定义生成,团队成员提交给版本控制系统的更改将被置于搁置集中并排入生成队列。生成必须成功,签入过程才能完成。生成定义工作区**将确定由生成定义控制的文件。有关生成工作区的更多信息,请参见使用生成工作区

将为**“封闭签入”**触发的生成分配 ReasonCheckInShelveset。

有关如何实现**“封闭签入”**触发器的更多信息,请参见定义封闭签入生成过程以验证更改.有关此类生成定义对您的团队的影响的更多信息,请参见签入由封闭签入生成控制的挂起的更改

Hh190718.collapse_all(zh-cn,VS.110).gif使用计划触发器定期对生成进行排队

Hh190718.collapse_all(zh-cn,VS.110).gif计划触发器

如果使用**“计划”触发器定义生成并清除“即使自上一次生成后未进行任何更改仍进行生成”**复选框,如果更改自生成定义的最近一次运行后已签入,则将在您指定的日期和时间对此生成进行排队。无论更改是否与最近的一次正常生成关联,都将对该生成进行排队。

将为以此方式触发的生成分配 ReasonSchedule。

提示提示

如果开发的是自定义生成过程模板且选择了 Schedule 作为 InvokeForReasonReason 属性中的值,则在大多数情况下,您可能还应选择 ScheduleForced。

Hh190718.collapse_all(zh-cn,VS.110).gif计划触发器(原因:ScheduleForced)

如果使用**“计划”触发器定义生成并选择“即使自上一次生成后未进行任何更改仍进行生成”**复选框,将在您指定的日期和时间对生成进行排队。无论更改是否已签入,都将对该生成进行排队。

将为以此方式触发的生成分配 ReasonScheduleForced。

提示提示

如果开发的是自定义生成过程模板且选择了 ScheduleForced 作为 InvokeForReasonReason 属性中的值,则在大多数情况下,您可能还应选择 Schedule。

手动对生成进行排队

在某些情况下,您可能有不希望自动运行的生成过程。

  • 您的生成定义可能还不能自动运行,因为它仍处于开发阶段。

  • 您可能有只希望手动运行的特殊生成过程。

在下列情况下,可以选择**“手动”**触发器。生成定义将仅当团队成员手动对其进行排队时运行。

Hh190718.collapse_all(zh-cn,VS.110).gif对生成进行排队

您可以手动对任何生成定义进行排队,即使是使用**“手动”**触发器以外的生成触发器对生成进行定义也是如此。手动对生成进行排队时,Reason 将设置为 Manual。有关如何手动对生成进行排队的更多信息,请参见将生成排入队列

Hh190718.collapse_all(zh-cn,VS.110).gif对专用生成进行排队

如果要生成已放入搁置集中的更改,则可以在签入代码前使用专用生成(也称为“合作者生成”)来验证对该代码的更改。手动对专用生成进行排队时,Reason 将设置为 ValidateShelveset。有关如何对专用生成进行排队的更多信息,请参见将生成排入队列

使用自定义代码创建已完成的生成

可以利用 Microsoft.TeamFoundation.Build 命名空间中的类开发用于创建已完成的生成的自定义代码。以这种方式对生成进行排队时,Reason 将设置为 UserCreated。有关更多信息,请参见Extending Team Foundation: Build

使用生成触发器和原因

可通过以下方式在生成过程中利用触发器和原因:

  • 为生成过程设置触发器:在生成定义中,单击**“触发器”**选项卡,然后选择最符合您的团队需求的触发器。有关如何创建生成定义的更多信息,请参见创建生成定义

  • 定义自定义生成过程接受的生成原因:您可以使用 InvokeForReason 活动将一段生成过程包含在内,该生成过程是您希望只在因特定原因而已运行的生成中运行的。有关更多信息,请参见Team Foundation Build Activities: InvokeForReason