Резервная копия репозитория Azure DevOps

Мы создали репозиторий на https://dev.azure.com/. Он работает нормально. Теперь моему менеджеру регулярно требуется резервная копия этого репозитория. Я объяснил менеджеру, что https://dev.azure.com/ управляется MS как SAAS, поэтому репозиторий всегда безопасно. Но ему нужна собственная копия. Это то, что это !!

Я подумал о нескольких вариантах: а) получить последнюю версию на любой машине разработчика и сделать резервную копию на ленточном устройстве;
б) использовать некоторую инфраструктуру Azure DevOps для хранения резервных копий в хранилище Azure.

Насколько осуществим вариант б?

Возможно ли резервное копирование Azure DevOps со всей прошлой историей регистрации?

Любая служба резервного копирования в Azure DevOps, которую я могу связать с хранилищем Azure?

Возможно ли инкрементное резервное копирование с использованием какой-либо службы xyz в Azure DevOps?


comment
Не уверен, что вы пытаетесь создать резервную копию. Если это исходный код: он использует git, поэтому вы можете клонировать репо в любом месте. Если это рабочие элементы (эпики / особенности / истории / задачи), все они могут быть экспортированы. Кроме того: это скорее вопрос документации по инструментам, а не конкретный вопрос программирования.   -  person David Makogon    schedule 21.05.2020


Ответы (1)


Насколько осуществим вариант б?

Это возможно в службе Azure Devops. Вам нужен конвейер Yaml, который запускает все ветки.

Вы можете использовать задача командной строки для резервного копирования репозитория в {RepoName}.git папку, а затем скопируйте эту папку в хранилище Azure с помощью Задача копирования файлов Azure. Подобно этому:

trigger:
  branches:
    include:
    - '*'

pool:
  vmImage: 'windows-latest'

steps:
  - task: CmdLine@2
    inputs:
      script: 'git clone --mirror https://{Your PAT}@dev.azure.com/{OrgName}/{ProjectName}/_git/{RepoName}'

  - task: ArchiveFiles@2
    inputs:
      rootFolderOrFile: '$(System.DefaultWorkingDirectory)/{RepoName}.git'
      includeRootFolder: true
      archiveType: 'zip'
      archiveFile: '$(Build.ArtifactStagingDirectory)/Backup.zip'
      replaceExistingArchive: true

  - task: AzureFileCopy@4
    displayName: 'AzureBlob File Copy'
    inputs:
      SourcePath: '$(Build.ArtifactStagingDirectory)/Backup.zip'
      azureSubscription: xxxx
      Destination: AzureBlob
      storage: xxxxxxxx
      ContainerName: arm
      BlobPrefix: test

Подробности:

1.CI Trigger с подстановочным знаком (*) может отслеживать все ваши ветки. Поэтому, если в вашем репо есть какое-либо обновление, конвейер будет запущен.

2. Задача cmd вызывает git clone --mirror, чтобы сделать копию вашего git репо. Чтобы скопировать репозиторий Azure Git в задачу cmd с помощью PAT, вы можете использовать формат здесь:

git clone https://{yourPAT}@dev.azure.com/yourOrgName/yourProjectName/_git/yourRepoName

Эта команда создаст папку RepoName.git, содержащую копию вашего репо по этому пути: $(System.DefaultWorkingDirectory). На создать PAT, вам нужно только создать его с областью доступа для чтения кода:

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

3. Логика такова: если есть какие-либо изменения в вашем исходном репозитории => конвейер будет запущен => он сделает последнюю копию в DefaultWorkingDirectory (задача CMD) => заархивируйте эту копию в Backup.zip файл (Задача архивации файла => Azure Задача копирования файла скопирует этот Backup.zip в BLOB-объекты хранилища Azure)

person LoLance    schedule 22.05.2020
comment
Я пробовал использовать тот же подход, но он дает ошибку на первом шаге. У меня есть PAT с полным доступом, и я использую, как указано выше, но выдает ошибку 400: фатальный: невозможно получить доступ к ‹имени репо›. Я также пробовал использовать Powershell после кодирования PAT с помощью base64, но все та же проблема. Любая помощь по этому поводу, пожалуйста. - person zainul; 17.03.2021