我正在编写一个脚本,只有在源代码发生更改时才会运行构建。我需要知道自上次构建以来是否有更改。这曾经有效,因为文件夹不会被删除,所以很容易确定是否有更改,但现在每次运行构建时都会删除所有内容。我考虑使用TFS TF历史命令查询最后一个或最后两个变更集,但是从输出中解析出变更集编号时遇到了问题。我还考虑使用变更集命令。有没有命令行参数可以用来回答问题:自某个日期或变更集编号以来是否有更改?
如果没有本地工作区,想要查看最新的变更集编号,请使用以下命令:
tf history /collection:"http://server:8080/tfs/Collection" "$/Project" /recursive /stopafter:1 /noprompt /login:domain\user,password
从我的批处理文件中提取出来的代码片段,用于构建。
set _aPath="f:\TFS\a"
set _TFPath="c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE"
...
pushd %_aPath%
%_TFPath%\TF.exe history . /r /noprompt /stopafter:1 /Version:W > temp
FOR /f "tokens=1" %%a in ('findstr /R "^[0-9][0-9]*" temp') do set _BuildVersion=10.3.0.%%a
del temp
popd
使用临时文件,但运行良好。
tf vc info d:\w\code04\Server.sln | findstr /R "Last modified: [^\r\n]+r\n"
。 - Dustin Oprea正如安德鲁所提到的,TFS内置了持续集成功能。然而,是的,很容易查询自某个时间点或变更集以来的变更集。您需要查看该变更集和最新变更集之间的历史记录:
tf history <folder> /version:C<changeset>~T /noprompt /recursive
如果唯一的输出是您查询的变更集,那么显然自从该提交以来就没有进行过任何更改。否则,您将看到额外的变更集,每行一个。
我的一行命令:
for /f "usebackq tokens=*" %%a in (`tf history . /recursive /noprompt /stopafter:1 /version:T ^| powershell -Command "$input | ? { $_ -imatch '^(\d+)\s+' } | %% { $matches[0].Trim() } | Select-Object -First 1"`) do set TIP_CHANGESET=%%a
有一个适配器可以集成BuildForge和Microsoft Team Foundation Server。如果您感兴趣,这是网址...http://www-304.ibm.com/partnerworld/gsd/solutiondetails.do?&solution=46360&lc=en
Automatra TFS适配器为Rational Build Forge提供了持续集成(CI)和报告功能。
TFS适配器进一步在TFS源(更改集)和WorkItem级别实现了CI功能。开箱即用的报告提供了清晰的物料清单(BOM)报告,可交付给您构建的下游消费者。
最后,正如您所知,Build Forge的强大之处在于它能够将构建与部署(以及更多)联系起来。显然,有了这些持续集成能力,您就可以继续推进我相信您希望实现的持续交付能力。
我的PowerShell脚本名为GetVcsRevision.ps1
,位于VCS根目录的子文件夹中:
param (
[string]$PathToTF='C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\TF.exe'
,[Parameter(Mandatory=$true)][string]$Login
,[Parameter(Mandatory=$true)][string]$Password
)
$result = &$PathToTF @("history","/stopafter:1","/recursive","..\*","/login:""$Login"",""$Password""") 2>&1 3>&1
if ($result.GetType().Name -eq "Object[]")
{
<# $result format is:
Changeset User Date Comment
--------- ----------------- ---------- ----------------------------------------
26038 user 24.06.2014 Sample commit comment
$result[2] is:
26038 user 24.06.2014 Sample commit comment
$result[2].Split(" ")[0] is:
26038
#>
$result[2].Split(" ")[0]
}
else
{
"0"
}
0
。