Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puedes usar un flujo de trabajo de Acciones de GitHub para compilar y desplegar automáticamente tu código de función en Azure usando el Azure/functions-actionarchivo .
Para desplegar usando Acciones de GitHub, completa estos tres pasos clave:
- Crea una identidad gestionada asignada por el usuario en Azure con una credencial federada que confíe en tu repositorio de GitHub, y asigna el rol de Colaborador del Sitio Web en tu aplicación funcional.
- Añade el ID de cliente, el ID de inquilino y el ID de suscripción de la identidad como secretos del repositorio en GitHub.
- Añade un archivo YAML de flujo de trabajo a tu repositorio que se utilice
azure/logincon OpenID Connect (OIDC) para autenticar y luego llamarAzure/functions-actionpara desplegar.
Cuando usas el portal de Azure para habilitar Acciones de GitHub, Functions realiza estas tareas automáticamente, tanto en tu suscripción de Azure como en tu repositorio de GitHub.
Crea una configuración de flujo de trabajo para Azure Functions
Mantienes un archivo YAML (.yml) que define la configuración del flujo de trabajo en la /.github/workflows/ ruta de tu repositorio. Esta definición contiene las acciones y parámetros que componen el flujo de trabajo, que es específico del lenguaje de desarrollo de las funciones.
Elige un método para crear tu archivo de flujo de trabajo usando el selector al principio del artículo:
| Method | Más adecuado para | Soporte OIDC |
|---|---|---|
| Plantilla de flujo de trabajo | Control total: copiar una plantilla lista para OIDC y personalizarla | Requiere configuración |
| Portal de Azure | Configuración más sencilla: portal puede crear la identidad, las credenciales y el archivo de flujo de trabajo por ti | Configurado para ti |
| Mercado de GitHub | GitHub-first: empieza por las plantillas integradas del marketplace de GitHub | Requiere modificación de configuración y plantilla |
Información general sobre la autenticación
Acciones de GitHub debe autenticarse con Azure para desplegar tu código. Este artículo utiliza OpenID Connect (OIDC), que es el método de autenticación recomendado. OIDC utiliza credenciales federadas para crear una relación de confianza entre tu repositorio de GitHub y una identidad gestionada asignada por el usuario en Microsoft Entra. No hay secretos almacenados en GitHub.
Ejemplo de autenticación OIDC
El siguiente ejemplo en línea muestra el patrón central de autenticación y despliegue OIDC utilizado en todas las plantillas de flujo de trabajo:
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 }}
Consideraciones de autenticación OIDC de Acciones de GitHub
- OIDC utiliza la federación de identidad de carga de trabajo y solo soporta identidades gestionadas asignadas por los usuarios.
- Cuando activas un despliegue basado en Acciones de GitHub en el portal de Azure, la autenticación OIDC se utiliza por defecto.
- Con OIDC, el ID de cliente, el ID de tenant y el ID de suscripción de la identidad gestionada se almacenan como secretos del repositorio de GitHub.
- Utiliza el control de acceso basado en roles de Azure (Azure RBAC) para limitar el acceso solo a los recursos de Azure necesarios para tu despliegue.
Requisitos previos
Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
Una cuenta de GitHub. Si no tiene ninguna, regístrese gratis.
Código fuente del Project en un repositorio de GitHub.
Una comprensión básica de los flujos de trabajo de Acciones de GitHub. Si eres nuevo en Acciones de GitHub, consulta Understanding Acciones de GitHub.
Una aplicación de funciones funcional alojada en Azure (solo código o basada en contenedores).
(Solo despliegues de contenedores) Un registro de contenedores existente, como Azure Container Registry.
- CLI de Azure, al desarrollar localmente. También puede usar el CLI de Azure en Azure Cloud Shell.
Crea una identidad gestionada para el despliegue de Acciones de GitHub
OpenID Connect (OIDC) es el método de autenticación recomendado para despliegues de Acciones de GitHub en Azure Functions. Con OIDC, configuras una identidad gestionada asignada por el usuario en Azure y creas una relación de confianza con tu repositorio de GitHub. El flujo de trabajo puede autenticarse con Azure sin almacenar credenciales como secretos.
Utiliza el comando az identity create para crear una identidad gestionada asignada al usuario.
az identity create --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> \ --query "{clientId: clientId, tenantId: tenantId}" -o tableReemplace
<RESOURCE_GROUP>por el nombre del grupo de recursos.En la salida, anota los
clientIdvalores de ytenantId. También consigue tu ID de suscripción:az account show --query "{subId: id}" -o tableNecesitas estos tres valores más adelante cuando añadas credenciales a GitHub.
Utiliza el comando create de asignación de rol az para asignar el
Website Contributorrol a la identidad gestionada, con el alcance de tu aplicación de función: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_IDSustituye
<APP_NAME>y<RESOURCE_GROUP>por los nombres de tu app y grupo de recursos, respectivamente.Utiliza el comando de creación de credenciales federadas de identidad de az para crear una credencial federada que confíe en los tokens de tu repositorio de 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://AzureADTokenExchangeReemplace
<RESOURCE_GROUP>,<GITHUB_ORG>,<REPO_NAME>y<BRANCH_NAME>por sus valores. El sujeto debe coincidir con la rama que activa tu flujo de trabajo.(Opcional) Si despliegas un contenedor desde Azure Container Registry, también asigna el
acrpullrol a la identidad gestionada: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>Reemplace
<SUBSCRIPTION_ID>,<RESOURCE_GROUP>y<REGISTRY_NAME>por sus valores.
Añadir credenciales a GitHub
Utiliza los valores que copiaste cuando creaste la identidad gestionada.
En GitHub, vaya al repositorio.
Ve a Ajustes>Secretos y variables>Acciones.
En la pestaña de Secretos , selecciona Nuevo secreto de repositorio.
Crea cada uno de los siguientes secretos:
Nombre Value AZURE_CLIENT_IDLa clientIdde la identidad gestionadaAZURE_TENANT_IDLa tenantIdde la identidad gestionadaAZURE_SUBSCRIPTION_IDEl ID de suscripción que contiene tu aplicación de función
Para despliegues de contenedores desde un registro privado, también necesitas secretos específicos de cada registro. Para más información, véase Acción de inicio de sesión en Docker.
Crear un flujo de trabajo a partir de una plantilla
La mejor manera de crear manualmente una configuración de flujo de trabajo es empezar a partir de la plantilla compatible oficialmente.
Elija Windows o Linux para asegurarse de que obtiene la plantilla para el sistema operativo correcto.
Utiliza la plantilla de flujo de trabajo OIDC específica del lenguaje del repositorio de acciones de Azure Functions. Copia el contenido completo del archivo en un nuevo archivo llamado
.github/workflows/deploy-function-app.ymlen tu repositorio: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'En la plantilla, actualiza las
env:variables de tu proyecto. Cada plantilla requiereAZURE_FUNCTIONAPP_NAME. Las otras variables dependen de tu lenguaje:Variable Obligatorio Description AZURE_FUNCTIONAPP_NAMESí Nombre de tu aplicación de función en Azure DOTNET_VERSIONSí La versión .NET de tu proyecto (por ejemplo, 10.0.x)AZURE_FUNCTIONAPP_PROJECT_PATHNo Ruta hacia la carpeta de tu proyecto. Por defecto: .(raíz del repositorio)Las plantillas OIDC ya incluyen el
azure/loginpaso con autenticación OIDC. Verifica que lassecrets.AZURE_CLIENT_IDreferencias ,secrets.AZURE_TENANT_ID, ysecrets.AZURE_SUBSCRIPTION_IDcoincidan con los secretos del repositorio que creaste.Agregue este nuevo archivo YAML en la ruta de acceso
/.github/workflows/del repositorio.
Creación de la configuración del flujo de trabajo en el portal
Cuando usas el portal para habilitar Acciones de GitHub, Functions se encarga de toda la configuración automáticamente. No necesitas crear manualmente una identidad gestionada, configurar credenciales ni escribir un archivo de flujo de trabajo. Functions realiza estas tareas por ti:
En tu suscripción a Azure:
- Crea una identidad gestionada asignada por el usuario y le asigna el rol de Colaborador del sitio web en tu aplicación funcional.
- Añade una credencial federada a la identidad gestionada para la autenticación OIDC de GitHub.
En tu repositorio de GitHub:
- Añade los valores del ID del cliente, ID de suscripción y ID de tenant como secretos de Acciones de GitHub.
- Crea un archivo de flujo de trabajo basado en tu pila de aplicaciones y lo hace commit en
.github/workflows.
Durante la creación de la aplicación de funciones
Puede empezar a trabajar rápidamente con Acciones de GitHub a través de la pestaña Implementación al crear una función en Azure portal. Para agregar un flujo de trabajo de Acciones de GitHub al crear una nueva aplicación de funciones:
En el portal Azure, seleccione Deployment en el flujo Crear aplicación de funciones.
Habilite Continuous Deployment si desea que cada actualización de código desencadene una inserción de código en Azure portal.
En la configuración de GitHub, selecciona Autorizar para conectar tu cuenta de GitHub. Inicia sesión con la cuenta de GitHub que tiene acceso de escritura a tu repositorio.
Escriba la organización, el repositorio y la rama de GitHub.
Opcionalmente, selecciona Archivo de Vista previa para ver cómo se ve el archivo de flujo de trabajo antes de que se genere y añada a tu repositorio.
Complete la configuración de la aplicación de funciones. El repositorio de GitHub ahora incluye un nuevo archivo de flujo de trabajo en
/.github/workflows/.
Para una aplicación de funciones existente
Para agregar un flujo de trabajo de Acciones de GitHub a una aplicación de funciones existente:
Ve a tu aplicación de funciones en el portal de Azure y seleccionaCentro de despliegue de >.
Seleccione Despliegue Continuo (CI/CD). En Origen, seleccione GitHub. Si no ves la creación de mensajes por defecto con Acciones de GitHub, selecciona el proveedor de cambios, selecciona Acciones de GitHub y selecciona OK.
Si aún no has autorizado el acceso a GitHub, selecciona Autorizar. Proporcione sus credenciales de GitHub y seleccione Sign in. Para autorizar una cuenta de GitHub diferente, seleccione Change Account e inicie sesión con otra cuenta.
Seleccione su organización de GitHub, repositorio y rama. Para desplegar usando Acciones de GitHub, debes tener acceso de escritura a este repositorio.
Para la opción Flujo de trabajo, selecciona Añadir un flujo de trabajo. Esta opción crea un nuevo archivo de flujo de trabajo en
/.github/workflows/. Para usar un flujo de trabajo existente, selecciona Usar flujo de trabajo disponible y elige tu archivo de flujo de trabajo.En la configuración de autenticación, elige Identidad asignada por el usuario para usar OpenID Connect (OIDC), lo cual se recomienda porque no requiere almacenar secretos en GitHub. Selecciona tu suscripción y el nombre de identidad (Nuevo) sugerido. Se crea una nueva identidad gestionada asignada por el usuario y se concede acceso al rol de Contribuidor del Sitio Web . Si utilizas una identidad existente, primero debes concederle acceso al rol de Colaborador del Sitio Web .
Importante
Cuando seleccionas Autenticación Básica, tu perfil de publicación, que contiene secretos compartidos, se almacena en GitHub Secrets. También debes activar la autenticación SCM básica, lo que hace que tu aplicación sea menos segura.
Seleccione Vista previa del archivo para ver el archivo de flujo de trabajo que se agrega al repositorio de GitHub en
.github/workflows/.Seleccione Guardar para agregar el archivo de flujo de trabajo al repositorio. Seleccione la pestaña Registros para ver el estado de los despliegues actuales y anteriores.
Creación del archivo de configuración de flujo de trabajo
Puede crear el archivo de configuración de flujo de trabajo de Acciones de GitHub desde las plantillas de Azure Functions directamente desde el repositorio de GitHub.
En GitHub, vaya al repositorio.
Seleccione Acciones y Nuevo flujo de trabajo.
Busque funciones.
En los flujos de trabajo de la aplicación de funciones mostrados creados por Microsoft Azure, busque el que coincida con el lenguaje de código y seleccione Configure.
En el archivo YAML recién creado, actualice el parámetro
env.AZURE_FUNCTIONAPP_NAMEcon el nombre del recurso de la aplicación de funciones en Azure. También puede que necesites actualizar el parámetro que establece la versión del lenguaje que usa tu app, comoDOTNET_VERSIONpara C# oPYTHON_VERSIONaplicaciones de Python.Las plantillas predeterminadas podrían usar la autenticación de publicar el perfil en lugar del OIDC recomendado. Para cambiar a OIDC y alinearse con los comportamientos del portal, realiza los siguientes cambios:
Elimina los
publish-profileparámetros ,scm-do-build-during-deployment, yenable-oryx-builddeAzure/functions-action.Elimina la
environmentconfiguración del puesto (si existe), ya que el sujeto de credencial federada debe coincidir con el disparador de la rama.Añade un
azure/loginpaso antes delAzure/functions-actionpaso:- 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 }}Añade los siguientes permisos al trabajo:
permissions: id-token: write contents: read
Verifica que el nuevo archivo de flujo de trabajo esté guardado con un nombre apropiado y
/.github/workflows/selecciona Commit cambios.
Acción de Azure Functions
La acción Azure Functions (Azure/functions-action) define cómo se publica el código en una aplicación de funciones existente en Azure o en una ranura específica de la aplicación.
Parámetros
La siguiente tabla describe los parámetros de entrada soportados por Azure/functions-action:
| Parámetro | Description |
|---|---|
| app-name | (Obligatorio) El nombre de tu aplicación de funciones en Azure. |
| package | (Obligatorio) El camino para que tu proyecto lo publiques. Por defecto: . (todos los archivos del repositorio). |
| Construcción remota | Configura para true habilitar una acción de compilación desde Kudu al desplegar en una app de Flex Consumption. La construcción de oryx siempre se realiza; No pongas también scm-do-build-during-deployment o enable-oryx-build. Valor predeterminado: false. |
| scm-do-build-during-deployment | Permite que el sitio de Kudu realice operaciones previas al despliegue, como compilaciones remotas. Configura para true que Kudu construya tu proyecto durante el despliegue. Valor predeterminado: false. Para obtener más información, consulte SCM_DO_BUILD_DURING_DEPLOYMENT. |
| enable-oryx-build | Permite que Kudu resuelva dependencias de proyectos usando Oryx. Configura tanto esto como scm-do-build-during-deployment para true usar Oryx en lugar del flujo de trabajo. Valor predeterminado: false. Solo Linux. |
| slot-name | La ranura de despliegue a la que se debe desplegar. Por defecto: ranura de producción. |
| publish-profile | Nombre del secreto en GitHub que contiene tu perfil de publicación. No es necesario cuando se usa la autenticación OIDC recomendada. |
| Sku | Configurado para flexconsumption al autenticar con publicsh-profile en un plan Flex Consumption. No es necesario con la autenticación OIDC u otros planes de alojamiento. |
| respect-pom-xml | (solo Java) Establecer para true derivar el artefacto de despliegue de pom.xml. Cuando true, establece el paquete en .. Valor predeterminado: false. |
| respectar-función | Configura para true honrar tu archivo .funcignore y excluir las rutas listadas. Valor predeterminado: false. |
La siguiente tabla muestra qué parámetros se soportan para cada plan de alojamiento:
| Parámetro | Flex Consumption | Elastic Premium | Dedicated | Consumo |
|---|---|---|---|---|
| app-name | Obligatorio | Obligatorio | Obligatorio | Obligatorio |
| package | Obligatorio | Obligatorio | Obligatorio | Obligatorio |
| Construcción remota | Optional | — | — | — |
| scm-do-build-during-deployment | — | Optional | Optional | Optional |
| enable-oryx-build | — | Opcional (Linux) | Opcional (Linux) | Opcional (Linux) |
| slot-name | No soportado | Optional | Optional | Optional |
| publish-profile | No se recomienda | No se recomienda | No se recomienda | No se recomienda |
| Sku | Solo publicar perfil | — | — | — |
| respect-pom-xml | Opcional (Java) | Opcional (Java) | Opcional (Java) | Opcional (Java) |
| respectar-función | Optional | Optional | Optional | Optional |
Métodos de implementación
Cuando usas Acciones de GitHub, el método de despliegue depende de tu plan de alojamiento:
| Plan de hospedaje | Método de implementación |
|---|---|
| Consumo flexible | Una implementación |
| Elastic Premium | Implementación de Zip |
| Dedicado (App Service) | Implementación de Zip |
| Consumo | Windows: Implementación Zip Linux: dirección URL del paquete externo* |
La capacidad de ejecutar las aplicaciones en Linux en un Plan de consumo está planeada para su retirada. Para obtener más información, consulte Azure Functions Plan de consumo de hospedaje.
Para obtener más información, consulte Tecnologías de implementación en Azure Functions.