Teamcity 对工件没有影响的文件内容替换程序

Teamcity 对工件没有影响的文件内容替换程序,teamcity,teamcity-9.1,Teamcity,Teamcity 9.1,我正在使用TeamCity的一个相对较新的功能:文件内容替换器。在我当前的设置中,我的VCS中有一个version.js文件: window["MyPlugin"].version = "1.0.##VCS_REVISION##.##CI_BUILD_NUMBER##"; 我使用文件内容替换器构建功能将最后一部分替换为: %build.vcs.number%.%system.build.number% 到目前为止还不错 我有一个相关的构建步骤。这是一个MSBuild步骤,但除了调用一个ps1

我正在使用TeamCity的一个相对较新的功能:文件内容替换器。在我当前的设置中,我的VCS中有一个version.js文件:

window["MyPlugin"].version = "1.0.##VCS_REVISION##.##CI_BUILD_NUMBER##";
我使用文件内容替换器构建功能将最后一部分替换为:

%build.vcs.number%.%system.build.number%
到目前为止还不错

我有一个相关的构建步骤。这是一个MSBuild步骤,但除了调用一个
ps1
,它什么也不做,它做两件相关的事情:

  • 将所有js文件移动到“
    输出
    ”文件夹
  • 将所有js文件压缩到“
    Zips
    ”文件夹中 这也是我的两个工件(一个输出文件夹和一个zip文件)

    但是,文件内容替换程序会还原其更改,但此还原也会反映在artifact nr 1中,这是不受版本控制的文件(即使它们位于“我的项目文件夹”的子文件夹中)。zip文件中的
    version.js
    文件不会恢复

    如果我将工件1更改为
    my/output/folder=>all.%build.vcs.number%.zip
    ,则zip文件也将包含还原状态,而不是我想要的输出

    如何设置TeamCity up,使工件文件不受此恢复的影响?还是需要此构建功能以外的其他功能

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


    另外,我也问过这个问题。

    文件内容替换在“发布工件”阶段之前恢复更改。这是“设计的”。您可以在构建日志中检查它。但是,您可以在隐藏的工件
    .teamcity/JetBrains.FileContentReplacer/
    中找到修改过的文件

    如果您想将更改后的文件作为常规工件发布,您应该创建该文件的副本(或者像您已经做的那样打包/归档)。另外,您可以创建一个脚本来进行所需的更改,而不必使用文件内容替换程序构建功能。

    FWIW,我已经提出了一个TeamCity功能请求来改进这一点:是的,这很奇怪。这些类型的操作过去是V9之前的“构建步骤”,V9属于IMO。我认为问题在于teamcity如何保留签出目录,而不是每次都从头开始。AppVeyor可以更好地处理这一方面,您可以从头开始,但可以指定某些目录,如(nuget)包或节点_模块等,以便在构建之间“保留”。这是一个比签出文件夹和FileContentReplacer在构建完成后“恢复文件”更好的解决方案。这正是JetBrains的座右铭出现在我脑海中的时候。您需要退回到bash和sed,而不是仅仅添加这个构建特性。走吧,我的朋友。