2012-04-26 2 views
3

Я пишу скрипт, который будет запускать сборку только в случае изменения исходного кода. Мне нужно знать, происходит ли изменение с момента запуска сборки. Это работало, потому что папка не удалялась, поэтому было легко определить, было ли изменение, но теперь все удаляется каждый раз, когда выполняется сборка. Я подумал об использовании команды истории TFS TF для запроса последнего набора изменений или последних двух наборов изменений, но возникли проблемы с разбором только номера набора изменений из вывода. Я также рассмотрел использование команды changeet. Есть ли какой-либо параметр командной строки, который я могу использовать для ответа на вопрос, произошло ли изменение с даты или номера набора изменений?Использование истории TFS TF для определения последнего набора изменений

+0

Во-первых, Team Build имеет функцию, которая делает это уже. Вы используете что-то еще? Во-вторых, это _any_ изменение в репозитории, достаточное для запуска сборки, или вам нужно выяснить, есть ли изменение в каком-то конкретном каталоге или каталогах? – Andrew

+0

Да, я использую другую систему, специально создаю. Мы используем адаптер TFS для сборки CI, но мы хотим только запустить сборку, если есть обновление. Поскольку сборка является специфичной для отрасли, я только хочу знать, есть ли изменения в этой ветке/папке. –

+0

Ответ от Guanghui Qin, работает очень хорошо, очень быстро, и вам не нужно рабочее пространство для него. – Yogurtu

ответ

2

Как упоминал Андрей, TFS имеет встроенную встроенную функциональность интеграции. Однако, да, с тех пор, как определенная точка, это дата или набор изменений, легко запросить набор изменений. Вы хотите, чтобы взглянуть на историю между этой ревизией и последнее:

tf history <folder> /version:C<changeset>~T /noprompt /recursive 

Если только выходная линия ревизия вы запрашиваются, то, очевидно, не было никаких изменений с этой фиксированием. В противном случае вы увидите дополнительные изменения, по одному на строку.

+1

Да, это говорит мне изменения, в том числе и опрашиваемые. Как я могу разобрать номер на выходе? Есть ли способ проанализировать использование командных команд? –

1

Существует адаптер, который может интегрировать BuildForge и Microsoft Team Foundation Server. Вот URL, если вы заинтересованы ... http://www-304.ibm.com/partnerworld/gsd/solutiondetails.do?&solution=46360&lc=en

ССТ адаптер Automatra для Rational Build Forge обеспечивает непрерывную интеграцию (CI) и создание отчетов.

Адаптер TFS дополнительно обеспечивает возможности CI как на уровнях источника TFS (Change Set), так и на уровне WorkItem. Отчеты из коробки предоставляют отчет о четких отчетах о материалах (BOM), которые могут быть доставлены потребителю ваших сборок ниже по потоку.

Наконец, как вы должны знать, сила Build Forge - это способность моста строить с развертыванием (и за его пределами). Очевидно, что благодаря этим возможностям непрерывной интеграции вы сможете двигаться вперед с непрерывной доставкой, которую, я думаю, вы хотите достичь.

3

Отрывок из моего командного файла для сборки.

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 

использует временный файл, но работает хорошо.

+0

Обратите внимание, что вам не нужен промежуточный файл, например: 'tf vc info d: \ w \ code04 \ Server.sln | findstr/R "Последнее изменение: [^ \ r \ n] + r \ n" ' –

0

скрипт PowerShell Мой, который называется GetVcsRevision.ps1 и находится в подпапках VCS Root:

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.

Вы можете сделать функцию из этого скрипта и вызвать его в сценарии сборки.

3

К последнему номеру без набора изменений локальной рабочей области, пожалуйста, используйте следующую команду:

tf history /collection:"http://server:8080/tfs/Collection" "$/Project" /recursive /stopafter:1 /noprompt /login:domain\user,password 
+0

Я так сильно вас люблю. – Yogurtu

1

Моя команда одна линия:

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 

после выполнения TIP_CHANGESET окр. переменная содержит набор изменений чата

Смежные вопросы