Возможно ли создать вручную задачу или шаг GitHub Actions для развертывания существующей тестовой сборки приложения Azure в продакшен?

Вопрос или проблема

Я создал простой рабочий процесс GitHub Actions для развертывания в тестовый слот моего приложения ASP.NET Core, который срабатывает при коммите в ветку master.

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

Это возможно? Единственный способ, который сейчас работает наполовину, это ручной триггер ‘workflow_dispatch’, но он не связан с кодом на данном коммите, под которым изначально запускался рабочий процесс. Он будет пересобирать и развертывать на актуальном состоянии основной ветки.

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

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

Ответ или решение

Да, вам действительно может понадобиться реализовать деплой существующих тестовых сборок вашего приложения на Azure App в производственную среду с использованием GitHub Actions. Давайте подробно рассмотрим ваш сценарий и возможные пути его реализации.

Проблема

Вы уже настроили рабочий процесс GitHub Actions для автоматического развертывания вашего ASP.NET Core приложения в тестовом слоте при каждом коммите в ветку master. Однако теперь вы хотите вручную триггерить развертывание этой же сборки в продакшн-слот, основываясь на конкретном хеш-commit, который использовался ранее, а не на последней версии кода.

Возможные Решения

  1. Использование workflow_dispatch с параметрами
    Вы можете использовать возможность GitHub Actions workflow_dispatch, которая позволяет вам вручную запускать рабочий процесс, добавляя необходимые параметры. Вы можете передавать хеш коммита в качестве параметра и использовать его в вашем действии развертывания. Вот пример того, как это может выглядеть:

    on:
     workflow_dispatch:
       inputs:
         commit_hash:
           description: 'Commit hash for the build to deploy'
           required: true

    Затем в вашем рабочем процессе вы можете использовать этот параметр для извлечения ранее собранного артефакта:

    jobs:
     deploy:
       runs-on: ubuntu-latest
       steps:
         - name: Checkout specific commit
           uses: actions/checkout@v2
           with:
             ref: ${{ github.event.inputs.commit_hash }}
    
         - name: Use existing artifact
           run: |
             # Коды для развертывания вашего приложения, используя артефакт
  2. Проверка наличия артефакта в реестре
    Как вы упомянули, есть другой вариант, который заключается в добавлении шага, который проверяет, существует ли уже образ с данным хешем в реестре. Если он существует, можно пропустить шаги сборки и перейти сразу к шагам развертывания. Это может быть реализовано следующим образом:

    jobs:
     deploy:
       runs-on: ubuntu-latest
       steps:
         - name: Check if the image exists
           run: |
             if ! docker images | grep -q "${{ github.sha }}"; then
               echo "Image not found, proceeding with build..."
               # команды для сборки образа
             else
               echo "Image already exists, skipping build."
             fi
    
         - name: Deploy
           run: |
             # команды для развертывания вашего приложения

Заключение

Существует несколько способов вручную инициировать развертывание конкретной сборки в Azure с использованием GitHub Actions. Использование workflow_dispatch с параметрами, передающими хеш конкретного коммита, и проверка наличия уже собранного артефакта — оба этих подхода позволяют более гибко управлять процессом развертывания.

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

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

Оцените материал
Добавить комментарий

Капча загружается...