Azure Devops - запускать сборку только в той папке, в которой есть изменения - PullRequest
1 голос
/ 27 февраля 2020

У меня есть несколько искровых заданий, написанных на scala и построенных с использованием maven. Прямо сейчас следуйте по следующему пути

/src/job1/<<build data>>
/src/job2/<<build data>>
.....

Эти данные сборки содержат код pom. xml, тесты и другие мысли, необходимые для каждой передачи задания maven.

У нас есть папка root, в которой есть папа пом. xml, которая собирает весь код, но я не хочу каждый раз собирать весь код. Я хочу иметь возможность тестировать и создавать только код для изменяющихся заданий.

Единственный способ, который, на мой взгляд, возможен, - это запускать сборку тестов только в папках, изменения которых были обнаружены, но я могу » Похоже, что это сделать без создания одной azure сборки devops для каждой папки, есть идеи?

TL: DR - Как передать путь к папке, в которой есть изменения в azure devops, процессу сборки?

Ответы [ 3 ]

2 голосов
/ 28 февраля 2020

Как передать путь к папке, в которой есть изменения в azure devops, процессу сборки?

Мы могли бы добавить сценарии powershell для проверки папки или пути, например:

$editedFiles = git diff HEAD HEAD~ --name-only
echo "$($editedFiles.Length) files modified:"
$editedFiles | ForEach-Object {
   echo $_
    Switch -Wildcard ($_ ) {
        '/src/job1' { 
              Write-Output "##vso[task.setvariable variable=job1]True"
         }        
        '/src/job2' { 
              Write-Output "##vso[task.setvariable variable=job2]True" }
    }
}

Этот скрипт устанавливает переменные, на которые затем ссылаются в пользовательских условиях в задаче построения конвейера или в конвейере сборки:

and(succeeded(), eq(variables['job1'], 'True'))

enter image description here

Вы можете проверить этот похожий поток для некоторых деталей.

Надеюсь, это поможет.

1 голос
/ 27 февраля 2020

Вы можете обойти эту проблему, создав скрипт, который будет выполнять следующие действия:

  • Получить набор изменений / фиксацию в сборке, чтобы проверить, какие файлы изменены.
  • На основе файлы меняются, вы определяете logi c, чтобы решить, какую папку он должен создать, запускаете тесты и т. д. c.

Это решение потребует от вас построения всех logi c для решить, какие папки собирать и тестировать.

0 голосов
/ 04 марта 2020

Спасибо за ваш вклад. Я смог сделать это с вашими входными данными на git, я понял, что мы используем рабочий процесс gitflow и каждый раз, когда у нас есть пул-запрос к главной ветви (что означает развертывание), создается коммит с запуском «Объединенный PR», это как я могу сравнить последние два коммита и проверить, что изменилось.

Как я делаю:

    # This part uses this to get the latest two pull requests hashes
    $last_pr_commit=git log  --grep="^Merged PR" -n 1  --pretty=format:"%h" --abbrev=200
    $second_last_pr_commit=git log -n 1  --grep="^Merged PR"  --oneline --abbrev=200 $last_pr_commit^...HEAD~2 --pretty=format:"%h"

    # This get  the path of the files
    $result=git diff $last_pr_commit $second_last_pr_commit --name-only

А потом я просто строю те, которые мне интересны.

    ForEach ($line in $($result -split "`r`n"))
    {
        # In my case I only need the two first parts of path
        $folderPath=$line.split('/')[0]+'/'+$line.split('/')[1]
        if ($line.contains('.scala')){
            # Running the tests and packaging
            mvn package $folderPath
        }
    }

Это PowerShell, но он может работать с bash, изменяя для l oop.

Спасибо

...