2015-11-12 26 views
1

我使用TeamCity的一个相对较新的功能:文件内容替代品。在我的当前设置我有一个version.js文件在我的VCS:文件内容替代品对工件没有影响

window["MyPlugin"].version = "1.0.##VCS_REVISION##.##CI_BUILD_NUMBER##"; 

我用的文件内容替换构建功能,以取代去年部分:

%build.vcs.number%.%system.build.number% 

到目前为止好!

我有一个相关的构建步骤。这是一个MSBuild一步,但它并没有什么不同之处称之为ps1,它做了两两件事有关:

  1. 将所有的JS文件到“output”文件夹;
  2. 将所有js文件压缩到“zips”文件夹中;

这些也是我的两个工件(一个输出文件夹和一个zip文件)。

但是,文件内容替代品恢复其更改,但该恢复也反映在工件1中,这些文件不受版本控制(即使它们位于我的项目文件夹的子文件夹中)。压缩文件中的version.js文件未被还原。

如果我将工件1更改为my/output/folder => all.%build.vcs.number%.zip,那么压缩文件还将包含恢复状态,而不是我想要的输出。

如何设置TeamCity以使工件文件不受此回复影响?还是我需要的东西不是这个构建功能?

我正在使用运行在Windows 2012 Server(VM)上的TeamCity 9.1.3 build 37176和用于评估目的的默认数据库。我使用TFS 2013作为我的VCS。

PS。我也问过这个on the JetBrains forums

回答

6

文件内容替换恢复“发布工件”阶段之前的更改。这是“按设计”。您可以在构建日志中检查它。但是,您可以在隐藏的工件.teamcity/JetBrains.FileContentReplacer/中找到修改的文件。
如果要将更改后的文件发布为普通工件,则应创建该文件的副本(或按照您已完成的工作进行打包/归档)。而不是使用文件内容替代者构建功能,您可以创建一个脚本,使所需的更改不会被还原。

+0

FWIW,我已经提出了一个TeamCity功能要求来改进:https://youtrack.jetbrains.com/issue/TW-43173 – Jeroen

+0

是的,这是奇怪的。这些类型的操作曾经是V9之前的“构建步骤”,它属于IMO。我认为问题在于teamcity如何保持结帐目录,而不是每次都从头开始。 AppVeyor更好地处理这个方面,你可以从头开始,但可以指定特定的目录,如(nuget)包或node_modules等来在构建之间“保留”。这是一个更好的解决方案,然后在构建完成后,签出文件夹将继续执行,FileContentReplacer将“恢复文件”。 – enorl76