Использование TFS TF History для определения последних изменений

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

6 ответов

Для получения последнего номера набора изменений без локальной рабочей области, пожалуйста, используйте эту команду:

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

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

Как отметил Эндрю, 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

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

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

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

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

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

Мой сценарий 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,

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

Другие вопросы по тегам