Непрерывная поставка с помощью 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. В портал Azure найдите страницу для приложения-функции, разверните раздел "Параметры>конфигурации" в левом столбце.

  2. На странице "Конфигурация" выберите вкладку "Общие параметры" и убедитесь, что учетные данные публикации SCM Basic Auth включены. Если этот параметр отключен, вы не можете использовать профили публикации, поэтому нажмите кнопку "Вкл." и "Сохранить".

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

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

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

Добавление секрета 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 Имя приложения-функции.
package Это расположение в проекте для публикации. По умолчанию это значение имеет значение ., что означает, что все файлы и папки в репозитории GitHub будут развернуты.

Для плана потребления Flex требуются следующие параметры:

Параметр Описание
sku Установите это значение flexconsumption при проверке подлинности с помощью профиля публикации. При использовании учетных данных RBAC или развертывании в плане потребления, отличном от Flex, действие может разрешить значение, поэтому параметр не требуется включать.
удаленная сборка Задайте для этого значение, чтобы true включить действие сборки из Kudu при развертывании пакета в приложении Flex Consumption. Сборка Oryx всегда выполняется во время удаленной сборки в Flex Consumption; не устанавливайте scm-do-build-во время развертывания или enable-oryx-build. По умолчанию этот параметр имеет значение false.

Следующие параметры относятся к планам потребления, elastic Premium и Служба приложений (выделенный).

Параметр Описание
scm-do-build-во время развертывания (Необязательно) Разрешите сайту Kudu (например https://<APP_NAME>.scm.azurewebsites.net/, выполнять операции перед развертыванием, например удаленные сборки). По умолчанию устанавливается значение false. Задайте для этого true значение, если требуется управлять поведением развертывания с помощью Kudu вместо разрешения зависимостей в рабочем процессе GitHub. Дополнительные сведения см. в параметре SCM_DO_BUILD_DURING_DEPLOYMENT .
enable-oryx-build (Необязательно) Разрешить сайту Kudu разрешать зависимости проекта с помощью Oryx. По умолчанию устанавливается значение false. Если вы хотите использовать Oryx для разрешения зависимостей вместо рабочего процесса GitHub, задайте для параметра scm-do-build-in-deployment и enable-oryx-build значение true.

Необязательные параметры для всех планов приложений-функций:

Параметр Описание
slot-name Это имя слота развертывания для развертывания. По умолчанию это значение пусто, то есть действие GitHub будет развернуто на рабочем сайте. Если этот параметр указывает на непроизводственные слоты, убедитесь , что параметр publish-profile содержит учетные данные для слота вместо рабочего сайта. В настоящее время не поддерживается в Flex Consumption.
publish-profile Имя секрета 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.

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

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

  • При использовании GitHub Actions код развертывается с помощью одного развертывания в приложениях плана потребления Flex и ZIP-файла для приложений в планах потребления, Elastic Premium и Выделенных (Служба приложений). Исключением является использование Linux, где используется URL-адрес внешнего пакета.

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

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

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

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

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