如何更好地拆分Teamcity的FAKE构建脚本

5

如果没有Teamcity,我就会把所有东西都放到一个大的 .fsx 脚本中,然后只需 “点燃并忘记” 它。对于构建来说,有一个单一的脚本来完成所有工作也是可行的。

但是当我们把 .fsx 脚本放入Teamcity时,一切都变了。Teamcity有很好的构建日志和构建步骤功能,但把所有逻辑都放到同一个脚本和构建步骤中会导致极大的构建日志。

我们在一个单一的 .fsx 脚本中进行构建和测试,并且我准备把发布构建也放进去。但现在我不认为这是一个很好的主意。也许将此构建脚本拆分为多个构建脚本,并在多个构建步骤中运行它们会更好?

但是使用多个脚本在没有Teamcity的情况下本地运行构建就不太方便了。或者我们可以为每个任务拥有多个小的构建脚本,以及一个调用所有这些小脚本的本地构建的构建脚本。

这个问题最好的解决方案是什么?

2个回答

2

我想我可以做类似于@forki23建议的事情。 我将所有内容放入单个.fsx文件中,定义了几个不相互关联的目标链,就像这样:

Clean ==> Build
BuildTests ==> RunTests
SignExes ==> PackDistr

在每个构建步骤中,我都会调用一个“叶子”目标,即

Step1: fake build.fsx target=Build
Step2: fake build.fsx target=RunTests
Step3: fale build.fsx target=PackDistr

在本地,我创建了几个.bat文件用于本地构建,并在这些.bat文件中定义了目标的调用顺序。但是我认为使用@forki23建议的isLocalBuild值会更好。这将使构建逻辑更加封装到单个.fsx脚本中,这非常棒!


2
这是我的个人观点,不是“最佳解决方案”:我不会在Teamcity中使用多个构建步骤或构建流程,因为这将导致供应商锁定。
话虽如此,如果您仍然想使用构建流程,则使用单个构建文件并大量使用FAKE的构建目标和条件依赖关系。
if isLocalBuild then
  A 
  ==> B
  ==> C

所以你仍然可以像以前一样在本地运行它。 在TeamCity中定义一个构建流水线,在每个构建步骤中只调用一个目标(使用FAKE.exe target=A)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接