Непрерывная поставка с помощью GitHub Actions

Рабочий процесс GitHub Actions можно использовать для определения рабочего процесса для автоматического создания и развертывания кода в приложении-функции в Функции Azure.

Файл YAML (.yml), определяющий конфигурацию рабочего процесса, сохраняется в /.github/workflows/ пути в репозитории. Это определение содержит действия и параметры, составляющие рабочий процесс, который зависит от языка разработки функций. Рабочий процесс GitHub Actions для функций выполняет следующие задачи независимо от языка:

  1. Настроить среду.
  2. Создайте проект кода.
  3. Разверните пакет в приложении-функции в Azure.

Действие Функции Azure обрабатывает развертывание в существующем приложении-функции в Azure.

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

  • На портале Azure
  • Использование Azure CLI
  • Из репозитория GitHub

Если вы не хотите создать файл YAML вручную, выберите другой метод в верхней части статьи.

Необходимые компоненты

  • Azure CLI при локальной разработке. Вы также можете использовать Azure CLI в Azure Cloud Shell.

Создание учетных данных для развертывания.

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

Внимание

Профиль публикации — это ценные учетные данные, позволяющие получить доступ к ресурсам Azure. Убедитесь, что вы всегда переносите и храните его безопасно. В GitHub профиль публикации должен храниться только в секретах GitHub.

Скачивание профиля публикации

Чтобы скачать профиль публикации приложения-функции, сделайте следующее:

  1. Выберите страницу Обзор приложения-функции, затем выберите Получить профиль публикации.

    Загрузить профиль публикации

  2. Сохраните и скопируйте содержимое файла.

Добавление секрета GitHub

  1. В GitHub перейдите в репозиторий.

  2. Перейдите в меню Параметры.

  3. Выберите "Секреты" и "Действия переменных>".

  4. Нажмите Создать секрет репозитория.

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

  6. Выберите Добавить секрет.

Теперь GitHub может проходить проверку подлинности в вашем приложении-функции в Azure.

Создание рабочего процесса из шаблона

Лучший способ вручную создать конфигурацию рабочего процесса — начать с официально поддерживаемого шаблона.

  1. Выберите Windows или Linux, чтобы убедиться, что вы получите шаблон для правильной операционной системы.

    Развертывания в Windows.runs-on: windows-latest

  2. Скопируйте шаблон для конкретного языка из репозитория действий Функции Azure с помощью следующей ссылки:

  3. env.AZURE_FUNCTIONAPP_NAME Обновите параметр с именем ресурса приложения-функции в Azure. При необходимости может потребоваться обновить параметр, который задает языковую версию, используемую приложением, например DOTNET_VERSION для C#.

  4. Добавьте этот новый файл YAML в /.github/workflows/ путь в репозитории.

Создание конфигурации рабочего процесса на портале

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

Портал автоматически получает профиль публикации и добавляет его в секреты GitHub для репозитория.

Во время создания приложения-функции

Вы можете быстро приступить к работе с GitHub Actions с помощью вкладки "Развертывание" при создании функции в портал Azure. Чтобы добавить рабочий процесс GitHub Actions при создании нового приложения-функции:

  1. В портал Azure выберите "Развертывание" в потоке создания приложения-функции.

    Снимок экрана: параметр развертывания в меню

  2. Включите непрерывное развертывание, если требуется, чтобы каждое обновление кода активировало отправку кода в портал Azure.

  3. Введите организацию, репозиторий и ветвь GitHub.

    Снимок экрана: сведения о учетной записи пользователя GitHub.

  4. Завершите настройку приложения-функции. Теперь репозиторий GitHub содержит новый файл /.github/workflows/рабочего процесса.

Для существующего приложения-функции

Чтобы добавить рабочий процесс GitHub Actions в существующее приложение-функцию:

  1. Перейдите к приложению-функции в портал Azure и выберите Центр развертывания.

  2. Для источника выберите GitHub. Если вы не видите сборку сообщений по умолчанию с помощью GitHub Actions, нажмите кнопку "Изменить" поставщика GitHub Actions и нажмите кнопку "ОК".

  3. Если у вас еще нет авторизованного доступа к GitHub, выберите "Авторизовать". Укажите учетные данные GitHub и выберите вход. Чтобы авторизовать другую учетную запись GitHub, выберите "Изменить учетную запись " и войдите с другой учетной записью.

  4. Выберите организацию, репозиторий и ветвь GitHub. Чтобы развернуть с помощью GitHub Actions, необходимо иметь доступ на запись в этот репозиторий.

  5. В параметрах проверки подлинности выберите, следует ли проходить проверку подлинности GitHub Actions с помощью удостоверения, назначаемого пользователем, или использовать учетные данные для проверки подлинности "Базовый". Для базовой проверки подлинности используются текущие учетные данные.

  6. Выберите файл предварительной версии, чтобы просмотреть файл рабочего процесса, который добавляется в репозиторий GitHub.github/workflows/

  7. Нажмите кнопку "Сохранить", чтобы добавить файл рабочего процесса в репозиторий.

Добавление конфигурации рабочего процесса в репозиторий

С помощью az functionapp deployment github-actions add команды можно создать файл конфигурации рабочего процесса из правильного шаблона приложения-функции. Затем новый файл YAML хранится в правильном расположении (/.github/workflows/) в предоставленном репозитории GitHub, а файл профиля публикации для приложения добавляется в секреты GitHub в том же репозитории.

  1. Выполните следующую az functionapp команду, заменив значения githubUser/githubRepoиMyResourceGroupMyFunctionapp:

    az functionapp deployment github-actions add --repo "githubUser/githubRepo" -g MyResourceGroup -n MyFunctionapp --login-with-github
    

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

  2. В окне терминала должно появиться следующее сообщение:

    Please navigate to https://github.com/login/device and enter the user code XXXX-XXXX to activate and retrieve your GitHub personal access token.
    
  3. Скопируйте уникальный XXXX-XXXX код, перейдите https://github.com/login/deviceк ней и введите скопированный код. После ввода кода вы увидите следующее сообщение:

    Verified GitHub repo and branch
    Getting workflow template using runtime: java
    Filling workflow template with name: func-app-123, branch: main, version: 8, slot: production, build_path: .
    Adding publish profile to GitHub
    Fetching publish profile with secrets for the app 'func-app-123'
    Creating new workflow file: .github/workflows/master_func-app-123.yml
    
  4. Перейдите в репозиторий GitHub и выберите "Действия". Убедитесь, что рабочий процесс запущен.

Создание файла конфигурации рабочего процесса

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

  1. В GitHub перейдите в репозиторий.

  2. Выберите действия и новый рабочий процесс.

  3. Поиск функций.

    Снимок экрана: поиск шаблонов функций GitHub Actions.

  4. В рабочих процессах приложения функций, созданных Microsoft Azure, найдите тот, который соответствует языку кода, и выберите "Настроить".

  5. В созданном файле YAML обновите env.AZURE_FUNCTIONAPP_NAME параметр с именем ресурса приложения-функции в Azure. При необходимости может потребоваться обновить параметр, который задает языковую версию, используемую приложением, например DOTNET_VERSION для C#.

  6. Убедитесь, что новый файл рабочего процесса сохраняется и /.github/workflows/ выберите " Зафиксировать изменения...".

Обновление конфигурации рабочего процесса

Если по какой-то причине необходимо обновить или изменить существующую конфигурацию рабочего процесса, просто перейдите к /.github/workflows/ расположению в репозитории, откройте конкретный файл YAML, внесите необходимые изменения и зафиксируйте обновления в репозитории.

Пример: файл конфигурации рабочего процесса

В следующем примере шаблона используется версия 1 functions-action и для publish profile проверки подлинности. Шаблон зависит от выбранного языка и операционной системы, в которой развернуто приложение-функцию:

Если приложение-функция работает в Linux, выберите Linux.

name: Deploy DotNet project to Azure Function App

on:
  [push]

env:
  AZURE_FUNCTIONAPP_NAME: 'your-app-name'   # set this to your function app name on Azure
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'       # set this to the path to your function app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'                   # set this to the dotnet version to use (e.g. '2.1.x', '3.1.x', '5.0.x')

jobs:
  build-and-deploy:
    runs-on: windows-latest
    environment: dev
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@v3

    - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: 'Resolve Project Dependencies Using Dotnet'
      shell: pwsh
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        dotnet build --configuration Release --output ./output
        popd

    - name: 'Run Azure Functions Action'
      uses: Azure/functions-action@v1
      id: fa
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
        publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}

действие Функции Azure

Действие Функции Azure (Azure/azure-functions) определяет способ публикации кода в существующем приложении-функции в Azure или в определенном слоте в приложении.

Параметры

В этом действии чаще всего используются следующие параметры:

Параметр Описание
app-name (обязательно) Имя приложения-функции.
slot-name (Необязательно) Имя определенного слота развертывания, в который требуется развернуть. Слот должен уже существовать в приложении-функции. Если этот код не указан, код развертывается в активном слоте.
publish-profile (Необязательно) Имя секрета GitHub, содержащего профиль публикации.

Следующие параметры также поддерживаются, но используются только в определенных случаях:

Параметр Описание
package (Необязательно) Задает подкататуру в репозитории, из которого следует опубликовать. По умолчанию это значение имеет значение ., что означает развертывание всех файлов и папок в репозитории GitHub.
respect-pom-xml (Необязательно) Используется только для функций Java. Требуется ли для артефакта развертывания приложения производный от файла pom.xml. При развертывании приложений-функций Java необходимо задать для этого параметра true значение и задать для .нее значениеpackage. По умолчанию этот параметр имеет значение false, что означает, что package параметр должен указывать на расположение артефакта приложения, например ./target/azure-functions/
уважение-funcignore (Необязательно) Учитывает ли GitHub Actions файл funcignore, чтобы исключить файлы и папки, определенные в нем. Задайте это значение true , если в репозитории есть файл funcignore, и вы хотите использовать его для исключения путей и файлов, таких как конфигурации текстового редактора, VSCODE/или виртуальная среда Python (.venv/). Значение по умолчанию равно false.
scm-do-build-во время развертывания (Необязательно) Выполняет ли сайт развертывания Служба приложений (Kudu) операции предварительного развертывания. Сайт развертывания для приложения-функции можно найти по адресу https://<APP_NAME>.scm.azurewebsites.net/. Измените этот параметр, true чтобы управлять развертываниями в Kudu, а не разрешать зависимости в рабочем процессе GitHub Actions. Значение по умолчанию — false. Дополнительные сведения см. в параметре SCM_DO_BUILD_DURING_DEPLOYMENT .
enable-oryx-build (Необязательно) Разрешает ли сайт развертывания Kudu зависимости проекта с помощью Oryx. Задайте значение true , когда вы хотите использовать Oryx для разрешения зависимостей проекта с помощью удаленной сборки вместо рабочего процесса GitHub Actions. При trueэтом также следует задать значение scm-do-build-during-deploymenttrue. Значение по умолчанию — false.

Рекомендации

При использовании действия Функции Azure следует учитывать следующие рекомендации.

  • При использовании GitHub Actions код развертывается в приложении-функции с помощью zip-развертывания для Функции Azure.

  • Учетные данные, необходимые GitHub для подключения к Azure для развертывания, хранятся в качестве секретов в репозитории GitHub и доступны в развертывании как secrets.<SECRET_NAME>.

  • Самый простой способ проверки подлинности GitHub Actions с помощью Функции Azure для развертывания — использовать профиль публикации. Вы также можете пройти проверку подлинности с помощью субъекта-службы. Дополнительные сведения см. в этом репозитории GitHub Actions.

  • Действия по настройке среды и выполнению сборки создаются из шаблонов и зависят от языка.

  • Шаблоны используют env элементы для определения параметров, уникальных для сборки и развертывания.

Следующие шаги