Как пометить исходный код после успешной сборки в Visual Studio Team Services

Я пытался использовать новую сборку в Visual Studio Team Services (не XAML), но не мог понять, как пометить источник после успешной сборки. Есть идеи?

Ниже приведен скриншот, показывающий, как это сделать в XAML one.

введите здесь описание изображения

У меня уже есть запрос на функцию по адресу https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/9613014-allow-label-source-upon-succesful-build-on-visual m на самом деле просит обходной путь, пока Microsoft его не реализует.


person cilerler    schedule 02.09.2015    source источник


Ответы (5)


Я только что заметил, что эта функция теперь доступна в сборке vNext. Его конфигурация находится на вкладке «Репозиторий» в определении сборки.

Маркировка

person Yves Dierick    schedule 08.10.2015
comment
извините, я не могу размещать изображения, моя репутация слишком низкая :-( - person Yves Dierick; 08.10.2015
comment
@cilerler: отредактировано со скриншотом! - person Dave New; 19.10.2015
comment
Но как вы используете это поле? Независимо от того, что я ввел в это поле, я получаю сообщение об ошибке, говорящее о том, что недопустимый формат исходной метки: . Я даже набрал то, что вы написали на скриншоте, но все равно получаю ошибку. Я не могу найти документы, указывающие на то, какие переменные можно использовать в этом поле. Любая помощь будет оценена по достоинству. - person Greg Veres; 27.05.2016
comment
@GregVeres проверьте visualstudio.com/en-us/docs/build/ определить/общие - person Jay Wick; 10.08.2016
comment
@GregVeres попробуйте что-нибудь вроде $(Build.DefinitionName)_$(Build.DefinitionVersion)_$(Build.BuildId)_$(Build.BuildNumber)_$(My.Variable) (из visualstudio.com/en-us /docs/build/define/repository# ) - person JoeBrockhaus; 25.08.2016

Я думаю, что ответ Ива Дирика был правильным еще в октябре 2015 года, но с тех пор расположение экранов VSTS сильно изменилось. В последней версии (по состоянию на февраль 2017 г.) вы можете добавить метку к успешной сборке, выбрав задачу «Получить источники» в определении сборки, выбрав «Показать Дополнительные настройки» в правом верхнем углу, а затем установив переключатель При успешном выполнении в появившемся разделе Источники тегов.

Мне потребовалось некоторое время, чтобы найти его, поэтому я подумал, что это может помочь кому-то еще. Не помогает то, что эта опция находится в разделе «Источники тегов» и вообще не упоминает слово «метка».

введите описание изображения здесь


Обновление от 13 марта 2018 г.

Они снова изменили макет этой страницы, но упростили его, и теперь эта опция более удобно называется «Источники ярлыков». Обновлен вариант маркировки сборок

person Philip Stratford    schedule 28.02.2017
comment
Кажется, они снова изменили макет и переместили это куда-то, я просто не могу его найти. - person Malyngo; 13.03.2018
comment
На самом деле я думаю, что они сделали это проще сейчас. Он по-прежнему находится на том же месте, что и на моем снимке экрана выше, но ползунок «Дополнительные параметры», похоже, исчез. Просто убедитесь, что у вас выбрана задача «Получить источники» с левой стороны. - person Philip Stratford; 13.03.2018

Для тех из вас, кто просматривает эту ветку и ищет решение для размещения TFS (не VSO), обратите внимание, что поддержка меток сборки появилась в обновлении 1 TFS 2015: https://www.visualstudio.com/en-us/news/tfs2015-update1-vs.aspx

Мы еще не запускаем обновление 1, поэтому я не могу подтвердить.

Редактировать: теперь мы используем обновление 1 (и 2, на самом деле), а источники сборки меток работают для локальной среды.

person TScott    schedule 22.02.2016
comment
Мы используем локальное обновление TFS 2015 1, и эта функция присутствует. - person llykke; 04.04.2016

Функция источников меток недоступна в сборке vNext.

Помимо функции «Источники меток», функции «Связать рабочие элементы» и «Создать рабочий элемент при сбое сборки» также недоступны.

Вы можете отправить один запрос функции на сайте Microsoft UserVoice: https://visualstudio.uservoice.com/forums/121579-visual-studio/category/30925-team-foundation-server-visual-studio-online

person Vicky - MSFT    schedule 03.09.2015
comment
Спасибо, Вики, я уже отправил сообщение в UserVoice, на самом деле ища обходной путь. Спасибо за ваше время! - person cilerler; 03.09.2015

Сборка XAML помечает источники в начале сборки, а сборка vNext, похоже, помечает в конце сборки. Я заметил это, потому что я изменяю/проверяю/маркирую файлы во время сборки. Если я позволю vNext пометить сборку, она переместит метку, которую я применил к файлам после возврата, на предыдущую версию (версию, которая использовалась в GetSources).

Но я не видел маркировки vNext ни в одном лог-файле. Я пропустил это? Мне придется отключить маркировку в vnext и сделать это в моем скрипте msbuild...

edit: отключена маркировка в определении сборки vnext и создана встроенная задача msbuild для маркировки источников рабочей области. Теперь я могу пометить все исходники в начале сборки и переместить метку для файлов, которые были изменены во время сборки :)

Если кто-то хочет сделать что-то подобное, вот моя встроенная задача:

<!--
    TaskName="LabelWorkspaceSources"
    - input: TfexeFullPath is the path to tf.exe
    - input: BaseDirectory is the mapped folder of the software to build
    - input: Label to apply
    - input: Version is the changeset to apply the label to
-->
<UsingTask TaskName="LabelWorkspaceSources" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
    <ParameterGroup>
        <TfexeFullPath Required="true" />
        <BaseDirectory Required="true" />
        <Label Required="true" />
        <Version Required="true" />
    </ParameterGroup>
    <Task>
        <Code Type="Fragment" Language="cs">
        <![CDATA[

        //--- get the workspace mapping ---

        System.Diagnostics.Process tfProcess = new System.Diagnostics.Process();
        tfProcess.StartInfo.FileName = TfexeFullPath;
        tfProcess.StartInfo.Arguments = "workfold";
        tfProcess.StartInfo.UseShellExecute = false;
        tfProcess.StartInfo.CreateNoWindow = true;
        tfProcess.StartInfo.RedirectStandardOutput = true;
        tfProcess.StartInfo.WorkingDirectory = BaseDirectory;
        tfProcess.Start();

        string output = tfProcess.StandardOutput.ReadToEnd();

        tfProcess.WaitForExit();

        string workfoldOutput = output.Trim();
        Log.LogMessage(workfoldOutput, MessageImportance.High);

        string[] linesWorkfoldOutput = workfoldOutput.Split(new string[] { System.Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
        List<string> mappedFolders = new List<string>();

        Log.LogMessage("Trying to parse mapped folders.", MessageImportance.High);
        foreach (string line in linesWorkfoldOutput)
        {
            //e.g. $/TPA: C:\TFS_Source\TPA
            if (line.Contains("$/"))
            {
                string[] lineSplit = line.Split(new string[] { ": " }, StringSplitOptions.RemoveEmptyEntries);

                //entry lineSplit[0] now contains the server path, lineSplit[1] contains the local folder
                mappedFolders.Add(lineSplit[1]);
                Log.LogMessage("Found mapped folder: " + lineSplit[1], MessageImportance.High);
            }
        }


        //--- label all the mapped folders ---

        foreach (string mappedFolder in mappedFolders)
        {
            tfProcess = new System.Diagnostics.Process();
            tfProcess.StartInfo.FileName = TfexeFullPath;
            tfProcess.StartInfo.Arguments = "label " + Label + " \"" + mappedFolder + "\" /child:replace /recursive /comment:\"Label created by task LabelWorkspaceSources\" /version:" + Version;
            tfProcess.StartInfo.UseShellExecute = false;
            tfProcess.StartInfo.CreateNoWindow = true;
            tfProcess.StartInfo.RedirectStandardOutput = true;
            tfProcess.StartInfo.WorkingDirectory = mappedFolder;
            tfProcess.Start();

            output = tfProcess.StandardOutput.ReadToEnd();

            tfProcess.WaitForExit();

            Log.LogMessage(tfProcess.StartInfo.Arguments, MessageImportance.High);
            Log.LogMessage(output, MessageImportance.High);
        }
        ]]>
        </Code>
    </Task>
</UsingTask>
person PainElemental    schedule 13.11.2017