Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете использовать рабочий процесс GitHub Actions для автоматического создания и развертывания вашего функционального кода в Azure, используя Azure/functions-action.
Чтобы развернуть с помощью GitHub Actions, выполните следующие три ключевых шага:
- Создайте управляемую личность, назначенную пользователем, в Azure с федеративным учетным данным, который доверяет вашему репозиторию GitHub, и назначьте ей роль участника сайта в вашем функциональном приложении.
- Добавьте идентификатор клиента, идентификатор арендатора и идентификатор подписки в качестве секретов репозитория в GitHub.
- Добавьте в репозиторий YAML-файл рабочего процесса, который использует
azure/loginOpenID Connect (OIDC) для аутентификации, а затем вызываетAzure/functions-actionдля развертывания.
Когда вы используете портал Azure для включения GitHub Actions, Functions автоматически выполняет эти задачи как в вашей подписке Azure, так и в репозитории GitHub.
Create a workflow configuration for Функции Azure
Вы поддерживаете YAML-файл (.yml), который определяет конфигурацию рабочего процесса в пути /.github/workflows/ в вашем репозитории. Это определение содержит действия и параметры, составляющие рабочий процесс, который зависит от языка разработки функций.
Выберите метод создания файла рабочего процесса с помощью селектора в верхней части статьи:
| Метод | лучше всего подходит для | Поддержка OIDC |
|---|---|---|
| Шаблон рабочего процесса | Полный контроль: скопировать шаблон, готовый к OIDC, и настроить его | Требуется конфигурация |
| Портал Azure | Самая простая настройка: портал может создать для вас идентичность, учетные данные и файл рабочего процесса | Настроено для вас |
| Маркетплейс GitHub | GitHub-первым: начните с встроенных шаблонов маркетплейса GitHub | Требуется модификация конфигурации и шаблона |
Обзор проверки подлинности
GitHub Actions должен пройти аутентификацию с помощью Azure для развертывания вашего кода. В этой статье используется OpenID Connect (OIDC), который является рекомендованным методом аутентификации. OIDC использует федеративные учетные данные для создания доверительных отношений между вашим репозиторием GitHub и управляемой идентичностью, назначенной пользователем в Microsoft Entra. В GitHub секреты не хранятся.
Пример аутентификации OIDC
Следующий встроенный пример показывает основной шаблон аутентификации и развертывания OIDC, используемый во всех шаблонах рабочих процессов:
permissions:
id-token: write
contents: read
steps:
- name: 'Login via OIDC'
uses: azure/login@v3
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: 'Deploy to Azure Functions'
uses: Azure/functions-action@v1
with:
app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
GitHub Actions OIDC аутентификации
- OIDC использует федерацию идентификации рабочих нагрузок и поддерживает только управляемые идентификаторы, назначенные пользователями.
- При включении развертывания на базе GitHub Actions в портале Azure по умолчанию используется аутентификация OIDC.
- В OIDC клиентские идентификаторы, арендаторы и подписки управляемых идентификаторов хранятся в виде секретов репозитория GitHub.
- Используйте ролевой контроль доступа Azure (Azure RBAC), чтобы ограничить доступ только ресурсами Azure, необходимыми для вашего развертывания.
Предварительные условия
Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
Учетная запись GitHub. Если у вас ее нет, зарегистрируйтесь бесплатно.
Исходный код Project в репозитории GitHub.
Базовое понимание рабочих процессов GitHub Actions. Если вы новичок в GitHub Actions, смотрите раздел «Понимание GitHub Actions».
Рабочее функциональное приложение, размещённое на Azure (только код или контейнер).
(Только для развертывания контейнеров) Существующий реестр контейнеров, например Реестр контейнеров Azure.
- Azure CLI при локальной разработке. Вы также можете использовать Azure CLI в Azure Cloud Shell.
Создание управляемой идентичности для развертывания GitHub Actions
OpenID Connect (OIDC) — рекомендуемый метод аутентификации для развертывания GitHub Actions в Функции Azure. С помощью OIDC вы настраиваете управляемую идентичность, назначенную пользователем, в Azure и создаёте доверительные отношения с вашим репозиторием GitHub. Затем рабочий процесс может аутентифицироваться с помощью Azure без сохранения учетных данных в виде секретов.
Используйте команду az identity create, чтобы создать управляемое удостоверение, назначаемое пользователем:
az identity create --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> \ --query "{clientId: clientId, tenantId: tenantId}" -o tableЗамените
<RESOURCE_GROUP>именем своей группы ресурсов.На выходе обратите внимание на
clientIdзначения иtenantId. Также получите свой идентификатор подписки:az account show --query "{subId: id}" -o tableЭти три значения понадобятся позже, когда вы добавите учетные данные в GitHub.
Используйте команду назначения роли az create, чтобы назначить
Website Contributorроль управляемому идентификатору, ограниченному вашему функциональному приложению:IDENTITY_PRINCIPAL=$(az identity show --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> --query 'principalId' -o tsv) FUNCTION_APP_ID=$(az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query 'id' -o tsv) az role assignment create --assignee $IDENTITY_PRINCIPAL --role "Website Contributor" --scope $FUNCTION_APP_IDЗамените
<APP_NAME><RESOURCE_GROUP>и на названия вашего приложения и группы ресурсов соответственно.Используйте команду az identity federated-credential create, чтобы создать федеративный учетный код, который доверяет токенам из вашего репозитория GitHub:
az identity federated-credential create \ --identity-name myGitHubDeployIdentity \ --resource-group <RESOURCE_GROUP> \ --name github-deploy-credential \ --issuer https://token.actions.githubusercontent.com \ --subject repo:<GITHUB_ORG>/<REPO_NAME>:ref:refs/heads/<BRANCH_NAME> \ --audiences api://AzureADTokenExchangeЗамените
<RESOURCE_GROUP>,<GITHUB_ORG>,<REPO_NAME>и<BRANCH_NAME>собственными значениями. Субъект должен совпадать с веткой, которая запускает ваш рабочий процесс.(По желанию) Если вы развёртываете контейнер из Реестр контейнеров Azure, также назначьте
acrpullроль управляемой идентичности:IDENTITY_PRINCIPAL=$(az identity show --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> --query 'principalId' -o tsv) az role assignment create --assignee $IDENTITY_PRINCIPAL --role acrpull \ --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ContainerRegistry/registries/<REGISTRY_NAME>Замените
<SUBSCRIPTION_ID>,<RESOURCE_GROUP>и<REGISTRY_NAME>значениями.
Добавить учетные данные в GitHub
Используйте значения, скопированные при создании управляемой идентичности.
В GitHub перейдите в репозиторий.
Перейдите в раздел Настройки>Секреты и переменные>Действия.
На вкладке «Секреты » выберите «Новый секрет репозитория».
Создайте каждый из следующих секретов:
Name Ценность AZURE_CLIENT_IDУправляемая clientIdидентичностьAZURE_TENANT_IDУправляемая tenantIdидентичностьAZURE_SUBSCRIPTION_IDИдентификатор подписки, содержащий ваше функциональное приложение
Для развертывания контейнеров из приватного реестра также нужны секреты, специфичные для реестра. Для получения дополнительной информации смотрите раздел Docker Login Action.
Создание рабочего процесса из шаблона
Лучший способ вручную создать конфигурацию рабочего процесса — начать с официально поддерживаемого шаблона.
Выберите Windows или Linux, чтобы убедиться, что вы получите шаблон для правильной операционной системы.
Используйте языкоспецифичный шаблон OIDC workflow из репозитория действий Функции Azure. Скопируйте полное содержимое файла в новый файл с именем
.github/workflows/deploy-function-app.ymlв вашем репозитории:name: Build and deploy .NET project to Azure Function App using OIDC on: push: branches: [ main ] workflow_dispatch: env: AZURE_FUNCTIONAPP_NAME: 'APP_NAME' # Set this to your function app name on Azure AZURE_FUNCTIONAPP_PROJECT_PATH: '.' # Set this to the path to your function app project, defaults to the repository root. The deploy action will package the contents of this path. DOTNET_VERSION: '10.0.x' # Set this to the .NET version of your project BUILD_ARTIFACT_NAME: 'released-package' # Set this according to your team's naming convention jobs: build: runs-on: windows-latest # Assumes your target function app is Windows-based permissions: id-token: write # Required for OIDC contents: read # Required for actions/checkout defaults: run: shell: bash working-directory: ${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }} steps: - name: 'Checkout repository' uses: actions/checkout@v6 - name: 'Set up .NET version: ${{ env.DOTNET_VERSION }}' uses: actions/setup-dotnet@v5 with: dotnet-version: ${{ env.DOTNET_VERSION }} # Perform additional steps such as running tests, if needed - name: 'Build and prepare .NET project for deployment' run: dotnet publish --configuration Release --output ./output - name: Upload artifact for the deployment job uses: actions/upload-artifact@v7 with: name: ${{ env.BUILD_ARTIFACT_NAME }} path: ${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }}/output include-hidden-files: true # Required for .NET projects deploy: runs-on: windows-latest # Assumes your target function app is Windows-based needs: build permissions: id-token: write # Required for OIDC steps: - name: 'Download artifact from build job' uses: actions/download-artifact@v8 with: name: ${{ env.BUILD_ARTIFACT_NAME }} path: '${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }}/downloaded-artifact' - name: 'Log in to Azure with AZ CLI' uses: azure/login@v3 with: client-id: ${{ vars.AZURE_CLIENT_ID }} tenant-id: ${{ vars.AZURE_TENANT_ID }} subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }} - name: 'Run the Azure Functions action' uses: Azure/functions-action@v1 id: deploy-to-function-app with: app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }} package: '${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }}/downloaded-artifact'В шаблоне обновите
env:переменные для вашего проекта. Для каждого шаблона требуетсяAZURE_FUNCTIONAPP_NAME. Остальные переменные зависят от вашего языка:Переменная Required Description AZURE_FUNCTIONAPP_NAMEYes Your function app name in Azure DOTNET_VERSIONYes Версия вашего проекта в .NET (например, 10.0.x)AZURE_FUNCTIONAPP_PROJECT_PATHнет Путь к папке проекта. По умолчанию: .(корень репозитория)Шаблоны OIDC уже включают шаг
azure/loginс аутентификацией OIDC. Проверьте, чтоsecrets.AZURE_CLIENT_ID,secrets.AZURE_TENANT_IDиsecrets.AZURE_SUBSCRIPTION_IDссылки совпадают с созданными вами секретами репозитория.Добавьте этот новый файл YAML в
/.github/workflows/путь в репозитории.
Создание конфигурации рабочего процесса на портале
Когда вы используете портал для включения GitHub Actions, Functions автоматически выполняет всю настройку. Вам не нужно вручную создавать управляемую личность, настраивать учетные данные или писать файл рабочего процесса. Функции выполняют следующие задачи за вас:
В вашей подписке Azure:
- Создаёт управляемую личность, назначенную пользователем, и назначает ей роль участника сайта в вашем функциональном приложении.
- Добавляет федеративный учетный код к управляемой идентичности для аутентификации OIDC GitHub.
В вашем репозитории GitHub:
- Добавляет значения клиента, подписки и арендатора как секреты GitHub Actions.
- Создаёт файл рабочего процесса на основе стека приложений и коммитирует его в
.github/workflows.
Во время создания приложения-функции
Вы можете быстро приступить к работе с GitHub Actions с помощью вкладки развертывания при создании функции на портале Azure. Чтобы добавить рабочий процесс GitHub Actions при создании нового приложения-функции:
На портале Azure выберите Deployment в потоке Create Function App.
Включите Континетное развертывание если требуется, чтобы каждое обновление кода активировало отправку кода на портал Azure.
В настройках GitHub выберите «Авторизировать» для подключения аккаунта GitHub. Войдите в аккаунт GitHub, который имеет доступ к записи в ваш репозиторий.
Введите организацию, репозиторий и ветку GitHub.
По желанию выберите «Предварительный просмотр файла », чтобы увидеть, как выглядит файл рабочего процесса до его генерации и добавления в ваш репозиторий.
Завершите настройку функционального приложения. Теперь репозиторий GitHub включает новый файл рабочего процесса в
/.github/workflows/.
Для существующего функционального приложения
Чтобы добавить рабочий процесс GitHub Actions в существующее функциональное приложение:
Перейдите в своё функциональное приложение в портале Azure и выберите Deployment>Deployment Center.
Выберите непрерывное развертывание (CI/CD). Для источника выберите GitHub. Если вы не видите сообщение по умолчанию Building with GitHub Actions, выберите Change provider, выберите GitHub Actions и OK.
Если вы ещё не авторизовали доступ к GitHub, выберите «Авторизировать». Укажите учетные данные GitHub и выберите Sign in. Чтобы авторизовать другую учетную запись GitHub, выберите Change Account и войдите с помощью другой учетной записи.
Выберите GitHub Organization, Repository и Branch. Чтобы развернуть с помощью GitHub Actions, необходимо иметь доступ к записи в этот репозиторий.
Для опции «Рабочий процесс» выберите « Добавить рабочий процесс». Эта опция создаёт новый файл рабочего процесса в
/.github/workflows/. Чтобы использовать существующий рабочий процесс, выберите «Использовать доступный рабочий процесс » и выберите файл рабочего процесса.В настройках аутентификации выберите User-assigned identity, чтобы использовать OpenID Connect (OIDC), что рекомендуется, так как он не требует хранения секретов в GitHub. Выберите свою подписку и (новое) рекомендуемое имя личности. Создаётся новая управляемая личность, назначенная пользователем, которая предоставляет доступ к роли участника сайта . Если вы используете существующую личность, сначала необходимо предоставить ей доступ к роли участника сайта .
Внимание
При выборе Basic аутентификации ваш профиль публикации, содержащий общие секреты, хранится в GitHub Secrets. Также необходимо включить базовую аутентификацию SCM, что снижает безопасность вашего приложения.
Выберите файл Preview, чтобы просмотреть файл рабочего процесса, который добавляется в репозиторий GitHub в
.github/workflows/.Нажмите кнопку "Сохранить", чтобы добавить файл рабочего процесса в репозиторий. Выберите вкладку «Журналы », чтобы просмотреть статус текущих и предыдущих развертываний.
Создание файла конфигурации рабочего процесса
Вы можете создать файл конфигурации рабочего процесса GitHub Actions из шаблонов Функции Azure непосредственно из репозитория GitHub.
В GitHub перейдите в репозиторий.
Выберите действия и новый рабочий процесс.
Поиск функций.
В функциональных рабочих процессах приложения, созданных Microsoft Azure, найдите тот, который соответствует языку вашего кода, и выберите Настроить.
В созданном файле YAML обновите параметр
env.AZURE_FUNCTIONAPP_NAMEс именем ресурса приложения-функции в Azure. Возможно, вам также потребуется обновить параметр, который задаёт версию языка, используемую вашим приложением, напримерDOTNET_VERSION, для C# илиPYTHON_VERSIONдля приложений на Python.Шаблоны по умолчанию могут использовать аутентификацию профиля публикации вместо рекомендованной OIDC. Чтобы перейти на OIDC и согласовать поведение портала, внесите следующие изменения:
Удалите параметры
publish-profile,scm-do-build-during-deployment, и из .enable-oryx-buildAzure/functions-actionУберите
environmentэту настройку из задания (если она присутствует), так как субъект федеративного подтверждения должен совпадать с триггером ветки.Добавьте
azure/loginшаг перед шагомAzure/functions-action:- name: 'Login via OIDC' uses: azure/login@v3 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: 'Run Azure Functions Action' uses: Azure/functions-action@v1 with: app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }} package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}Добавьте следующие права на задание:
permissions: id-token: write contents: read
Убедитесь, что новый файл рабочего процесса сохранён с соответствующим именем в ,
/.github/workflows/и выберите Commit changes.
действие Функции Azure
Действие Функции Azure (Azure/functions-action) определяет способ публикации кода в существующем приложении-функции в Azure или в определенный слот в приложении.
Параметры
В следующей таблице описываются входные параметры, поддерживаемые Azure/functions-action:
| Параметр | Description |
|---|---|
| app-name | (Обязательно) Название вашего функционального приложения в Azure. |
| package | (Обязательно) Путь к вашему проекту для публикации. По умолчанию: . (все файлы в репозитории). |
| Удалённое строительство | Настроено на true включение действия сборки из Kudu при развертывании в приложении Flex Consumption. Билд Орикс выполняется всегда; Не устанавливайте также SCM-do-build-во время развертывания или enable-oryx-build. По умолчанию: false. |
| SCM-сделать-собирать-во время-развертывания | Разрешить сайту Kudu выполнять операции предварительного развертывания, такие как удалённые сборки. Настройте Kudu true на создание вашего проекта во время развертывания. По умолчанию: false. Дополнительные сведения см. в разделе SCM_DO_BUILD_DURING_DEPLOYMENT. |
| enable-oryx-build | Позвольте Kudu разрешать зависимости проектов с помощью Oryx. Настройте и это, и scm-do-build-during-deployment так true , чтобы использовать Oryx вместо рабочего процесса. По умолчанию: false. Только для Linux. |
| slot-name | Слот для развертывания. По умолчанию: слот для продакшена. |
| publish-profile | Имя секретного параметра GitHub, содержащего профиль публикации. Не требуется при использовании рекомендованной аутентификации OIDC. |
| SKU | Настройте режим flexconsumption при аутентификации с помощью publish-profile на плане Flex Consumption. Для аутентификации OIDC или других хостинговых планов это не нужно. |
| respect-pom-xml | (Java только) Установлен на true получение артефакта развертывания из pom.xml. Когда true, установите пакет на .. По умолчанию: false. |
| respect-funcignore | Настройте на true сохранение вашего файла .funcignore и исключение перечисленных путей. По умолчанию: false. |
Следующая таблица показывает, какие параметры поддерживаются для каждого плана хостинга:
| Параметр | Flex Consumption | Эластик Премиум | Dedicated | Потребление |
|---|---|---|---|---|
| app-name | Required | Required | Required | Required |
| package | Required | Required | Required | Required |
| Удалённое строительство | Optional | — | — | — |
| SCM-сделать-собирать-во время-развертывания | — | Optional | Optional | Optional |
| enable-oryx-build | — | Опционально (Linux) | Опционально (Linux) | Опционально (Linux) |
| slot-name | Не поддерживаются | Optional | Optional | Optional |
| publish-profile | Не рекомендуется | Не рекомендуется | Не рекомендуется | Не рекомендуется |
| SKU | Только publysh-профиль | — | — | — |
| respect-pom-xml | Optional (Java) | Optional (Java) | Optional (Java) | Optional (Java) |
| respect-funcignore | Optional | Optional | Optional | Optional |
Методы развертывания
При использовании GitHub Actions метод развертывания зависит от вашего плана хостинга:
| План размещения | Метод развертывания |
|---|---|
| Использование Flex | Одно развертывание |
| Elastic Premium | Развертывание ZIP-файла |
| Выделенный (Служба приложений) | Развертывание ZIP-файла |
| Потребление | Windows: развертывание из ZIP-архива Linux: URL-адрес внешнего пакета* |
* Возможность запуска приложений в Linux в плане потребления планируется для выхода на пенсию. Дополнительные сведения см. в разделе Функции Azure размещение плана потребления.
Для получения дополнительной информации см. раздел Технологии развертывания в Функции Azure.