Azure DevOps - Git Настройка репозитория - PullRequest
0 голосов
/ 05 мая 2020

у нас есть приложение, использующее несколько независимых модулей кода - они не взаимодействуют друг с другом. См. Примерный пример ниже:

  1. Модуль 1
    • Файл 1.1
    • Файл 1.2
    • Файл 1.3
  2. Модуль 2
    • Файл 2.1
    • Файл 2.2

........

Модуль 1000
  • Файл 1000,1
  • Файл 1000,2

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

  • запрос на вытягивание для модуля 1 только вытягивает модуль 1
  • запрос на фиксацию только фиксирует файлы модуль 1
  • Azure Развертывание Devops только развертывает файлы модуля 1
    • это самая важная часть
    • Мне все равно, если пользователь клонирует всю 1000 репозиторий модулей только для работы с модулем 1, пока пользователь фиксирует ветку и готовит развертывание в производственной среде, только модуль 1 развертывается - я не могу отправить процесс развертывания на производство всех 1000 модулей только потому, что модуль 1 был модифицированный

Единственное решение, которое я вижу, - это создание репозитория для каждого модуля, но я надеюсь, что кто-то знает более элегантную методологию

Примечание: я не являюсь разработчиком на полную ставку - я больше имею право на управление операциями, и мои знания Git / repos / et c ограничены - поэтому я признаю, что мне может не хватать яркой части информации, которая сделала бы этот вопрос спорным.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

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

Если модуль module1 находится в папке module1 вашего репо. Вы можете запустить git команду git diff --name-only HEAD HEAD~1 в задаче сценария, чтобы узнать, какой модуль обновляется. И установите папку модуля в переменную, используя оператор ##vso[task.setvariable]. Затем вы можете настроить задачу сборки для сборки только измененного модуля. Пожалуйста, ознакомьтесь с приведенным ниже примером:

Проверьте документ, чтобы узнать больше о task.setvariable . Проверьте здесь, чтобы узнать больше о Условиях .

steps:
- powershell: |
    #get the changed files
    $a = git diff --name-only HEAD HEAD~1  

    #get the changed module folders
    $folders = $a | foreach {$_.split("/")[0]}

    #assign the folders to variable folderName
    echo "##vso[task.setvariable variable=folderName]$folders" 


 #this build task will only be executed when module1 changed
- task: VSBuild@1
  displayName: Build Module1
  condition: contains(variables.folderName, 'module1')

#this build task will only be executed when module2 changed
- task: VSBuild@1
  displayName: Build Module2
  condition: contains(variables.fileName, 'module2')

Вышеупомянутый yaml является простым примером. Возможно, вам придется немного изменить сценарии задач PowerShell в соответствии с вашим проектом. Вы можете использовать только одну задачу сборки, если все модули используют одну и ту же конфигурацию сборки.

1 голос
/ 05 мая 2020

Для достижения ваших целей вы должны рассмотреть следующие шаги:

  • правильные триггеры CI / PR для сборки только измененного модуля - вы можете иметь несколько сборок для каждого репозитория. Вам нужен просто отдельный файл YAML
 specific path build
trigger:
  branches:
    include:
    - master
    - releases/*
  paths:
    include:
    - Module-1/*
    exclude:
    - '*'

Выше настройте триггер CI только для Module-1, игнорируя изменения в других каталогах. Позже в этом сценарии вы можете подготовить пакет и развертывание только для Module-1

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

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