Я создал скрипт Python, который извлекает структуры данных из базы данных SQL (таблицы, представления, индексы, SP) и сохраняет их в учетной записи хранения Azure в папке в формате «ДД-ММ-ГГГГ».
Я хочу создать следующий модуль, который берет эти сценарии из папки и отправляет их в репозиторий Azure DevOps в качестве фиксации новой ветки, которая мгновенно объединяется с основной, чтобы я мог видеть ежедневные изменения, вносимые в базу данных.
Можно ли это сделать на Databricks или мне придется использовать конвейеры DevOps? Если DevOps — единственный путь, как я могу это сделать?
Целая папка, в которой хранятся сценарии, аналогичные проекту базы данных SQL, который можно извлечь из Visual Studio.
Итак, вам нужно, чтобы сценарий Python извлекал структуры данных из базы данных SQL в учетную запись хранения Azure и ежедневно сохранял данные в папке «DD-MM-YYYY
», а затем вы также хотите перетащить всю папку «DD-MM-YYYY
» из учетной записи хранения Azure в Azure. Репо ежедневно. Верно? @KacperG
@BrightRan-MSFT - верно, первая часть выполняется, поскольку она ежедневно записывает БД в хранилище. Я ищу решение для следующего шага.
В конвейере вы можете использовать Azure CLI «az Storage Copy», чтобы скопировать папки из учетной записи хранения Azure в локальный каталог на компьютере агента, а затем использовать команду git
для фиксации и отправки папок в репозитории Azure.
Убедитесь, что в учетной записи хранения существуют последние ежедневные данные с папкой (например, 06-08-2024
). В моем примере ниже папки хранятся в контейнере (daily-sqldb-data
) учетной записи хранения.
В Azure DevOps у меня есть репозиторий git (daily-sqldb-data
). Перейдите в «Настройки проекта» > «Хранилища», на вкладке «Безопасность» репозитория убедитесь, что для следующих двух идентификаторов установлено разрешение «Contribute
» на «Allow
».
Project Collection Build Service ({Organization Name})
{Project Name} Build Service ({Organization Name})
В Azure DevOps перейдите в раздел «Настройки проекта» > «Подключения к службам», чтобы создать подключение к службе Azure Resource Manager (соединение ARM), которое может подключаться и получать доступ к подписке Azure, в которой находится учетная запись хранения.
В конвейере вы можете использовать задачу 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, Как я уже упоминал выше, при настройке соединения ARM убедитесь, что субъект службы, используемый этим соединением, имеет доступ к учетной записи хранения. вы можете попробовать вручную запустить «az login
» с тем же субъектом службы на локальном компьютере, а затем вручную запустить ту же команду «az storage copy
», чтобы проверить, работает ли она. Если также не работает, проверьте разрешение субъекта службы для учетной записи хранения.
Какие вещи вы хотите отправить в репозитории Azure из учетной записи хранения Azure? Скрипты Python или вся папка «
DD-MM-YYYY
» ежедневных данных, полученных из базы данных SQL?