Передача данных из учетной записи хранения Azure в репозиторий Azure DevOps ежедневно

Я создал скрипт Python, который извлекает структуры данных из базы данных SQL (таблицы, представления, индексы, SP) и сохраняет их в учетной записи хранения Azure в папке в формате «ДД-ММ-ГГГГ».

Я хочу создать следующий модуль, который берет эти сценарии из папки и отправляет их в репозиторий Azure DevOps в качестве фиксации новой ветки, которая мгновенно объединяется с основной, чтобы я мог видеть ежедневные изменения, вносимые в базу данных.

Можно ли это сделать на Databricks или мне придется использовать конвейеры DevOps? Если DevOps — единственный путь, как я могу это сделать?

Какие вещи вы хотите отправить в репозитории Azure из учетной записи хранения Azure? Скрипты Python или вся папка «DD-MM-YYYY» ежедневных данных, полученных из базы данных SQL?

Bright Ran-MSFT 05.08.2024 16:49

Целая папка, в которой хранятся сценарии, аналогичные проекту базы данных SQL, который можно извлечь из Visual Studio.

KacperG 05.08.2024 20:59

Итак, вам нужно, чтобы сценарий Python извлекал структуры данных из базы данных SQL в учетную запись хранения Azure и ежедневно сохранял данные в папке «DD-MM-YYYY», а затем вы также хотите перетащить всю папку «DD-MM-YYYY» из учетной записи хранения Azure в Azure. Репо ежедневно. Верно? @KacperG

Bright Ran-MSFT 06.08.2024 08:00

@BrightRan-MSFT - верно, первая часть выполняется, поскольку она ежедневно записывает БД в хранилище. Я ищу решение для следующего шага.

KacperG 06.08.2024 09:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конвейере вы можете использовать Azure CLI «az Storage Copy», чтобы скопировать папки из учетной записи хранения Azure в локальный каталог на компьютере агента, а затем использовать команду git для фиксации и отправки папок в репозитории Azure.

  1. Убедитесь, что в учетной записи хранения существуют последние ежедневные данные с папкой (например, 06-08-2024). В моем примере ниже папки хранятся в контейнере (daily-sqldb-data) учетной записи хранения.

  2. В Azure DevOps у меня есть репозиторий git (daily-sqldb-data). Перейдите в «Настройки проекта» > «Хранилища», на вкладке «Безопасность» репозитория убедитесь, что для следующих двух идентификаторов установлено разрешение «Contribute» на «Allow».

    • Project Collection Build Service ({Organization Name})
    • {Project Name} Build Service ({Organization Name})

  3. В Azure DevOps перейдите в раздел «Настройки проекта» > «Подключения к службам», чтобы создать подключение к службе Azure Resource Manager (соединение ARM), которое может подключаться и получать доступ к подписке Azure, в которой находится учетная запись хранения.

  4. В конвейере вы можете использовать задачу AzureCLI@2 для запуска команды «az storage copy».

# azure-pipelines.yml

variables:
  accountName: 'storagebriran'
  containerName: 'daily-sqldb-data'

pool:
  vmImage: ubuntu-latest

steps:
- checkout: self
  persistCredentials: true

# Create a temporary local branch named as the format 'DD-MM-YYYY' to receive the data downloaded from storage account.
- task: Bash@3
  displayName: 'Create temporary branch'
  inputs:
    targetType: inline
    script: |
      git config --global user.name "[Auto-Boot]"
      git config --global user.email [email protected]

      branchName=$(date +"%d-%m-%Y")
      echo "##vso[task.setvariable variable=folderName;]$branchName"

      echo "Create '$branchName' branch."
      git branch $branchName
      git checkout $branchName

# Download data folder 'DD-MM-YYYY' from storage account.
- task: AzureCLI@2
  displayName: 'Download Daily Data'
  inputs:
    azureSubscription: 'myArmConnection'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      echo "Download entire folder '$(folderName)' from container '$(containerName)' of Storage account '$(accountName)'."
      az storage copy -s https://$(accountName).blob.core.windows.net/$(containerName)/$(folderName) -d "$(Build.SourcesDirectory)" --recursive

# Merge the download data folder 'DD-MM-YYYY' from the local temporary branch to the local main branch.
# Commit and push the updates form the local main branch to remote.
- task: Bash@3
  displayName: 'Merge and Push Daily Data'
  inputs:
    targetType: inline
    script: |
      git add --all
      git commit -m "Add daily data in '$(folderName)' folder."

      echo "----------------------------------------------"
      echo "Merge daily data to main branch."
      git checkout main
      git merge $(folderName)
      git branch -d $(folderName)

      echo "----------------------------------------------"
      echo "Pushing changes to remote..."
      git add --all
      git commit -m "Merge daily data from '$(folderName)' branch."
      git push

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

# Disbale CI trigger.
trigger: none

# Trigger the pipeline at 23:00 UTC everyday. The time zone for cron schedules is UTC.
# If you want to schedule a time in your time zone, you need to calculate the corresponding UTC time.
# For example, the time 22:00 in UTC+8 time zone is 14:00 in UTC time zone.
schedules:
- cron: 0 23 * * *
  displayName: 'Daily run at 23:00 UTC'
  branches:
    include:
    - main

. . .

steps:
. . .

Я получил следующую ошибку: не удалось выполнить команду копирования из-за ошибки: невозможно запустить задание из-за ошибки: невозможно вывести список файлов по причине HEAD XXX.blob.core.windows.net/tech/tech_SQL_Repo/2024-08-05 -------------------------------------------------- ----------‌​-------------------- ОТВЕТ 403: 403 Аутентификация на основе ключа не разрешена для этой учетной записи хранения. КОД ОШИБКИ: KeyBasedAuthenticationNotPermited, нужно ли выполнять дополнительную авторизацию?

KacperG 06.08.2024 15:57

@KacperG, Как я уже упоминал выше, при настройке соединения ARM убедитесь, что субъект службы, используемый этим соединением, имеет доступ к учетной записи хранения. вы можете попробовать вручную запустить «az login» с тем же субъектом службы на локальном компьютере, а затем вручную запустить ту же команду «az storage copy», чтобы проверить, работает ли она. Если также не работает, проверьте разрешение субъекта службы для учетной записи хранения.

Bright Ran-MSFT 06.08.2024 16:30

Другие вопросы по теме