当我创建构建定义时,我已经设置了一些源设置,例如:
问题是我希望它在有人签入Builds或Install文件夹时触发构建,但Includes文件夹只是一些库和它需要的其他项目。当这些库被更改时,我不希望它重新运行。但是我需要在这里设置它们以确保它们被复制到构建放置服务器。当有人签入此文件夹时,有没有办法在不强制构建触发器的情况下复制此Includes文件夹?
当我创建构建定义时,我已经设置了一些源设置,例如:
问题是我希望它在有人签入Builds或Install文件夹时触发构建,但Includes文件夹只是一些库和它需要的其他项目。当这些库被更改时,我不希望它重新运行。但是我需要在这里设置它们以确保它们被复制到构建放置服务器。当有人签入此文件夹时,有没有办法在不强制构建触发器的情况下复制此Includes文件夹?
***_NO_CI***
在签入到 Includes 目录时使用特殊关键字。
没有简单的方法可以做到这一点。正如您所发现的,源设置具有双重作用,它们定义了下载的构建所需的文件集和触发 CI 的文件集。
我认为这不是问题,如果包含在您的构建中使用,那么我想在它们更改时启动一个新构建,以确保更改不会破坏构建过程中的任何内容。
有两件事要做来解决这个问题。
首先,您需要将源文件夹放入以构建为中心的布局中,这将有助于消除尽可能多的重叠。
如果您需要一个不应触发构建的特定共享文件夹,则不要将其包含在源映射中,而是添加一个脚本以将文件下载到您的工作区,作为构建的早期部分。
该示例需要针对您的 Visual Studio 版本进行更新,并且您应该将源目录传递给脚本。
REM %1 represents the Sources directory
REM Compute variables
SET TfExe="%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe"
REM SET TfExe="C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe"
Set RefPath="$/TFS BUILDS/Shapes/Main/Includes"
Set localPath="%~1\Includes"
REM set the Drive Letter for this build
Set Localdrive=%localPath:~1,2%
%Localdrive%
cd %1
REM Map the folders
%TfExe% workfold /map %RefPath% %localPath%
REM Get the required content
%TfExe% get %RefPath%
REM Unmap the folders
%TfExe% workfold /unmap %RefPath%