Guía de inicio rápido: implementación de archivos de Bicep mediante Acciones de GitHub

Acciones de GitHub es un conjunto de características de GitHub que automatizan los flujos de trabajo de desarrollo de software. En esta guía de inicio rápido, puede usar Acciones de GitHub para la implementación de Azure Resource Manager y así automatizar la implementación de un archivo de Bicep en Azure.

Proporciona una breve introducción a las acciones de GitHub y los archivos Bicep. Si quiere ver pasos más detallados sobre cómo configurar el proyecto y Acciones de GitHub, vea Implementación de recursos de Azure mediante Bicep y Acciones de GitHub.

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.
  • Un repositorio de GitHub para almacenar los archivos de Bicep y los archivos del flujo de trabajo. Para crear uno, vea Creación de un repositorio.

Creación de un grupo de recursos

Cree un grupo de recursos. Más adelante en esta guía de inicio rápido, implementará el archivo Bicep en este grupo de recursos.

az group create -n exampleRG -l westus

Genere las credenciales de implementación.

Las Acciones de GitHub se ejecutan en una identidad. Use el comando az ad sp create-for-rbac para crear una entidad de servicio para la identidad. Conceda a la entidad de servicio el rol de colaborador para el grupo de recursos creado en la sesión anterior para que la acción de GitHub con la identidad pueda crear recursos en este grupo de recursos. Se recomienda conceder el acceso mínimo necesario.

az ad sp create-for-rbac --name {app-name} --role contributor --scopes /subscriptions/{subscription-id}/resourceGroups/exampleRG --json-auth

Sustituya el marcador de posición {app-name} por el nombre de aplicación. Reemplace {subscription-id} con el Id. de suscripción.

La salida es un objeto JSON con las credenciales de asignación de roles que proporcionan acceso a la aplicación App Service similar al siguiente.

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    ...
  }

Copie este objeto JSON para más adelante. Solo necesitará las secciones con los valores clientId, clientSecret, subscriptionId y tenantId. Asegúrese de no tener una coma adicional al final de la última línea, por ejemplo, la línea tenantId en el ejemplo anterior o, de lo contrario, dará como resultado un archivo JSON no válido. Recibirá un mensaje de error durante la implementación que indica "Error durante el inicio de sesión con error: el contenido no es un objeto JSON válido. Compruebe si el 'tipo de autenticación' es correcto".

Configuración de los secretos de GitHub

Cree secretos para las credenciales de Azure, el grupo de recursos y las suscripciones. Usará estos secretos en la sección Crear flujo de trabajo.

  1. Vaya al repositorio en GitHub.

  2. Seleccione Configuración > Secretos y variables > Acciones > Nuevo secreto del repositorio.

  3. Pegue la salida JSON completa del comando de la CLI de Azure en el campo de valor del secreto. Asigne al secreto el siguiente nombre: AZURE_CREDENTIALS.

  4. Cree otro secreto denominado AZURE_RG. Agregue el nombre del grupo de recursos al campo de valor del secreto (exampleRG).

  5. Cree otro secreto denominado AZURE_SUBSCRIPTION. Agregue el identificador de la suscripción al campo de valor del secreto (ejemplo: 90fd3f9d-4c61-432d-99ba-1273f236afa2).

Incorporación de un archivo de Bicep

Agregue un archivo de Bicep al repositorio de GitHub. El siguiente archivo de Bicep crea una cuenta de almacenamiento:

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'

param location string = resourceGroup().location

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

El archivo de Bicep requiere un parámetro denominado storagePrefix que tiene entre tres y once caracteres.

Puede colocar el archivo en cualquier parte del repositorio. En el ejemplo de flujo de trabajo de la sección siguiente, se supone que el archivo de Bicep se denomina main.bicep y se almacena en la raíz del repositorio.

Creación del flujo de trabajo

Un flujo de trabajo define los pasos que se ejecutarán cuando se desencadene. Es un archivo YAML (.yml) en la ruta de acceso .github/workflows/ del repositorio. La extensión de archivo de flujo de trabajo puede ser .yml o .yaml.

Para crear un flujo de trabajo, siga estos pasos:

  1. En el repositorio de GitHub, seleccione Actions (Acciones) en el menú superior.

  2. Seleccione New workflow (Nuevo flujo de trabajo).

  3. Seleccione Set up a workflow yourself (Configurar un flujo de trabajo personalmente).

  4. Cambie el nombre del archivo de flujo de trabajo si prefiere otro distinto a main.yml. Por ejemplo: deployBicepFile.yml.

  5. Reemplace el contenido del archivo .yml por el código siguiente:

    name: Deploy Bicep file
    on: [push]
    jobs:
      build-and-deploy:
        runs-on: ubuntu-latest
        steps:
    
        - name: Checkout code
          uses: actions/checkout@main
    
        - name: Log into Azure
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
    
        - name: Deploy Bicep file
          uses: azure/arm-deploy@v1
          with:
            subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
            resourceGroupName: ${{ secrets.AZURE_RG }}
            template: ./main.bicep
            parameters: 'storagePrefix=mystore storageSKU=Standard_LRS'
            failOnStdErr: false
    

    Reemplace mystore por su propio prefijo de nombre de cuenta de almacenamiento.

    Nota:

    En su lugar, puede especificar un archivo de parámetros de formato JSON en la acción de implementación de ARM (ejemplo: .azuredeploy.parameters.json).

    La primera sección del archivo de flujo de trabajo incluye:

    • name: El nombre del flujo de trabajo.
    • on: el nombre de los eventos de GitHub que desencadenan el flujo de trabajo. El flujo de trabajo se desencadena cuando hay un evento de inserción en la rama principal.
  6. Seleccione Commit changes (Confirmar cambios).

  7. Seleccione Commit directly to the main branch (Confirmar directamente en la rama principal).

  8. Seleccione Commit new file (Confirmar nuevo archivo) (o bien Commit changes (Confirmar cambios)).

La actualización del archivo de flujo de trabajo o del archivo de Bicep desencadena el flujo de trabajo. El flujo de trabajo se inicia justo después de confirmar los cambios.

Comprobación del estado del flujo de trabajo

  1. Seleccione la pestaña Actions (Acciones). Verá un flujo de trabajo Crear deployBicepFile.yml. El flujo de trabajo tarda un par de minutos en ejecutarse.
  2. Seleccione el flujo de trabajo para abrirlo y compruebe que Status es Success.

Limpieza de recursos

Cuando el repositorio y el grupo de recursos ya no sean necesarios, limpie los recursos que implementó eliminando el grupo de recursos y el repositorio de GitHub.

az group delete --name exampleRG

Pasos siguientes