Конвейер Azure — Ворота после развертывания для задания базы данных

#azure-pipelines #azure-databricks #azure-deployment

Вопрос:

ОБНОВЛЕНИЕ: Я значительно редактирую этот вопрос, поскольку комментарии ниже подчеркивают необходимость большей ясности и детализации

Цель состоит в том, чтобы иметь многоступенчатый конвейер, определенный в файле yaml. На первом этапе «Сборка» есть задача, которая запускает задание Databricks из конвейера Azure (с использованием интерфейса командной строки databricks). Эта работа может занять некоторое время, чтобы закончить. Этап сборки должен завершиться успешно только после подтверждения статуса задания»УСПЕШНО».

Одним из подходов было бы добавить цикл while, который проверяет состояние задания каждые X минут, см. Пример кода ниже (показана только задача запуска задания и проверки состояния / примера, взятого отсюда).:

 stages:
- stage: Build
  displayName: 'Train Model'
  jobs:
  - job: Train
    displayName: 'Train Model'
    pool:
      vmImage: 'ubuntu-18.04'
    steps:

    - task: Bash@3
      displayName: 'Run Training Job'
      inputs:
        targetType: 'inline'
        script: |
          run_id1=$(databricks jobs run-now --job-id $(databricks.job.train.id) | jq ".run_id")
          run_state=$(databricks runs get --run-id $run_id1 | jq -r ".state.life_cycle_state")
          while [ $run_state == "RUNNING" -o $run_state == "PENDING" ]
          do
            sleep 30
            run_state=$(databricks runs get --run-id $run_id1 | jq -r ".state.life_cycle_state")
          done
          result_state1=$(databricks runs get --run-id $run_id1 | jq -r ".state.result_state")
          
          if [ $result_state1 == "SUCCESS" ]
          then
            exit 0
          else
            exit 1
          fi
          
- stage: Staging
  displayName: 'Deploy to Staging'
  dependsOn: Build
  condition: succeeded()
 

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

Комментарий ниже указывает на использование ворот после развертывания в качестве потенциального решения этой проблемы.

Как это может быть реализовано? фрагмент кода yaml, указывающий на решение, был бы очень полезен

Комментарии:

1. Для этого и предназначены ворота после развертывания. Вы мало что объяснили о специфике того, как вы можете проверить состояние длительных операций, поэтому я предлагаю вам обратиться к документации. docs.microsoft.com/en-us/azure/devops/pipelines/release/…

2. Спасибо @Daniel Mann, это действительно выглядит полезным. Я определил все этапы своего конвейера в шаблоне yml. Можно ли настроить ворота после развертывания в yml? К сожалению, мне не удалось это найти

3. Да, в среде в задании развертывания.