Статьи

Дженкинс: Получить исходный код по конкретному TFS Changeset

Серия « Jenkins CI » посвящена полезным методам и подходам для создания рабочих мест для построения ваших проектов или проведения тестов. Иногда требуется, чтобы все ваши тесты на дым были выполнены регулярно и были зелеными. Тем не менее, всегда есть новая разработка, и в тесты можно вносить ошибки. В большинстве случаев вы хотите запускать эти тесты, только когда вы на 100% уверены, что новые изменения не приведут к поломке сборок или неожиданным сбоям. Решение в таких случаях заключается в загрузке источника тестов по определенному стабильному номеру набора изменений.

Jenkins TFS Specific ChangesetJenkins TFS Specific Changeset

 

Получить исходный код по конкретному TFS Changeset

Стандартный способ загрузки кода из TFS — использование вкладки «Управление исходным кодом» . Параметр Team Foundation Server добавляется путем установки  подключаемого модуля Team Foundation Server .

Управление исходным кодом по умолчаниюУправление исходным кодом по умолчанию

 

Однако, если вы использовали плагин, вы знаете, что нет способа настроить его для загрузки исходного кода по определенному номеру набора изменений. Таким образом, чтобы загрузить исходный код с помощью определенного набора изменений, необходимо добавить новую пакетную команду Windows.

Добавить пакетную команду Windows JenkinsДобавить пакетную команду Windows Jenkins

 

В появившемся окне должны быть добавлены следующие команды.

%TFS% workspaces -format:brief -server:{your-tfs-team-project-collection-url}
%TFS% workspace -new Hudson-%JOB_NAME%-MASTER;{your-domain-user-name} -noprompt -server:{your-tfs-team-project-collection-url}
%TFS% workfold -map $/{tfs-path-to-your-sln} C:\Jenkins\jobs\%JOB_NAME%\workspace\ -workspace:Hudson-%JOB_NAME%-MASTER -server:{your-tfs-team-project-collection-url}
%TFS% get $/{tfs-path-to-your-sln} -force -recursive -version:%ChangesetNumber% -noprompt
%TFS% history $/{tfs-path-to-your-sln} -recursive -stopafter:1 -noprompt -version:%ChangesetNumber% -format:brief -server:{your-tfs-team-project-collection-url}

Вам нужно только изменить фрагменты внутри фигурных скобок «{}» с вашей информацией. Код собирается создать на новый TFS рабочее пространство с именем вашего Дженкинс работы. Затем он будет генерировать на отображение на вашем пути TFS проекта в локальную папку . Наконец, он собирается загрузить в исходный код с помощью определенного числа наборов изменений . Он передается команде параметром  % ChangesetNumber% . Поэтому вам нужно создать параметр нового задания типа string с именем ChangesetNumber .

Параметр номера набора изменений Jenkins JobПараметр номера набора изменений Jenkins Job

Получить последний код Windows Batch Command

Можно использовать аналогичные команды, чтобы получить последний исходный код.

%TFS% workspaces -format:brief -server:{your-tfs-team-project-collection-url}
%TFS% workspace -new Hudson-%JOB_NAME%-MASTER;{your-domain-user-name} -noprompt -server:{your-tfs-team-project-collection-url}
%TFS% workfold -map $/{tfs-path-to-your-sln} C:\Jenkins\jobs\%JOB_NAME%\workspace\ -workspace:Hudson-%JOB_NAME%-MASTER -server:{your-tfs-team-project-collection-url}
%TFS% get $/{tfs-path-to-your-sln} -force -recursive -noprompt
%TFS% history $/{tfs-path-to-your-sln} -recursive -stopafter:1 -noprompt -format:brief -server:{your-tfs-team-project-collection-url}

Команды идентичны с небольшим отличием — отсутствием  аргумента % ChangesetNumber% .

Объединить Получить последний код и Получить по конкретному номеру набора изменений

Если вы хотите создать многоцелевое задание Jenkins, способное работать в двух режимах — получите последний и получите по конкретному номеру набора изменений. Первый режим будет запущен, если% ChangesetNumber% оставить пустым. Для этого требуется небольшая настройка ранее упомянутых команд.

IF "%ChangesetNumber%" == "" ( 
%TFS% workspaces -format:brief -server:{your-tfs-team-project-collection-url}
%TFS% workspace -new Hudson-%JOB_NAME%-MASTER;{your-domain-user-name} -noprompt -server:{your-tfs-team-project-collection-url}
%TFS% workfold -map $/{tfs-path-to-your-sln} C:\Jenkins\jobs\%JOB_NAME%\workspace\ -workspace:Hudson-%JOB_NAME%-MASTER -server:{your-tfs-team-project-collection-url}
%TFS% get $/{tfs-path-to-your-sln} -force -recursive -noprompt
%TFS% history $/{tfs-path-to-your-sln} -recursive -stopafter:1 -noprompt -format:brief -server:{your-tfs-team-project-collection-url}
) ELSE ( 
%TFS% workspaces -format:brief -server:{your-tfs-team-project-collection-url}
%TFS% workspace -new Hudson-%JOB_NAME%-MASTER;{your-domain-user-name} -noprompt -server:{your-tfs-team-project-collection-url}
%TFS% workfold -map $/{tfs-path-to-your-sln} C:\Jenkins\jobs\%JOB_NAME%\workspace\ -workspace:Hudson-%JOB_NAME%-MASTER -server:{your-tfs-team-project-collection-url}
%TFS% get $/{tfs-path-to-your-sln} -force -recursive -version:%ChangesetNumber% -noprompt
%TFS% history $/{tfs-path-to-your-sln} -recursive -stopafter:1 -noprompt -version:%ChangesetNumber% -format:brief -server:{your-tfs-team-project-collection-url}
)

Удалить рабочую область TFS

В качестве нового шага после сборки необходимо добавить команду очистки для удаления ранее созданного рабочего пространства TFS .

DELETE %TFS% workspace /delete /noprompt /collection:"{your-tfs-team-project-collection-url}" "Hudson-%JOB_NAME%-MASTER;{your-domain-user-name}"