Uso de Acciones de GitHub para conectarse a Azure SQL DatabaseUse GitHub Actions to connect to Azure SQL Database

Comience a trabajar con Acciones de GitHub mediante un flujo de trabajo para implementar actualizaciones de base de datos en Azure SQL Database.Get started with GitHub Actions by using a workflow to deploy database updates to Azure SQL Database.

Requisitos previosPrerequisites

Necesitará:You will need:

Información general sobre el archivo de flujo de trabajoWorkflow file overview

Un flujo de trabajo de Acciones de GitHub se define mediante un archivo YAML (.yml) en la ruta de acceso /.github/workflows/ de su repositorio.A GitHub Actions workflow is defined by a YAML (.yml) file in the /.github/workflows/ path in your repository. En esta definición se incluyen los diversos pasos y parámetros que componen el flujo de trabajo.This definition contains the various steps and parameters that make up the workflow.

El archivo tiene dos secciones:The file has two sections:

SecciónSection TareasTasks
AutenticaciónAuthentication 1. Defina una entidad de servicio.1. Define a service principal.
2. Cree un secreto de GitHub.2. Create a GitHub secret.
ImplementarDeploy 1. Implemente la base de datos.1. Deploy the database.

Genere las credenciales de implementación.Generate deployment credentials

Puede crear una entidad de servicio mediante el comando az ad sp create-for-rbac de la CLI de Azure.You can create a service principal with the az ad sp create-for-rbac command in the Azure CLI. Puede ejecutar este comando mediante Azure Cloud Shell en Azure Portal o haciendo clic en el botón Probar.Run this command with Azure Cloud Shell in the Azure portal or by selecting the Try it button.

Reemplace los marcadores de posición server-name por el nombre del servidor SQL hospedado en Azure.Replace the placeholders server-name with the name of your SQL server hosted on Azure. Reemplace subscription-id y resource-group por el identificador de suscripción y el grupo de recursos conectado a su servidor SQL.Replace the subscription-id and resource-group with the subscription ID and resource group connected to your SQL server.

   az ad sp create-for-rbac --name {server-name} --role contributor \
                            --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} \
                            --sdk-auth

La salida es un objeto JSON con las credenciales de asignación de roles que proporcionan acceso a la base de datos, de forma parecida a como se muestra en este ejemplo.The output is a JSON object with the role assignment credentials that provide access to your database similar to this example. Copie el objeto JSON de salida para más adelante.Copy your output JSON object for later.

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

Importante

Siempre es recomendable conceder acceso mínimo.It is always a good practice to grant minimum access. El ámbito del ejemplo anterior se limita al servidor específico y no a todo el grupo de recursos.The scope in the previous example is limited to the specific server and not the entire resource group.

Copie la cadena de conexión SQL.Copy the SQL connection string

En Azure Portal, vaya a Azure SQL Database y abra Configuración > Cadenas de conexión.In the Azure portal, go to your Azure SQL Database and open Settings > Connection strings. Copie la cadena de conexión de ADO.NET.Copy the ADO.NET connection string. Reemplace los valores de marcador de posición por your_database y your_password.Replace the placeholder values for your_database and your_password. La cadena de conexión tendrá un aspecto similar a esta salida.The connection string will look similar to this output.

    Server=tcp:my-sql-server.database.windows.net,1433;Initial Catalog={your-database};Persist Security Info=False;User ID={admin-name};Password={your-password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

Usará la cadena de conexión como secreto de GitHub.You'll use the connection string as a GitHub secret.

Configuración de los secretos de GitHubConfigure the GitHub secrets

  1. En GitHub, examine el repositorio.In GitHub, browse your repository.

  2. Seleccione Settings > Secrets > New secret (Configuración > Secretos > Secreto nuevo).Select Settings > Secrets > New secret.

  3. Pegue la salida JSON completa del comando de la CLI de Azure en el campo de valor del secreto.Paste the entire JSON output from the Azure CLI command into the secret's value field. Asigne al secreto el nombre AZURE_CREDENTIALS.Give the secret the name AZURE_CREDENTIALS.

    Cuando configure el archivo de flujo de trabajo más adelante, usará el secreto para la entrada creds de la acción de inicio de sesión de Azure.When you configure the workflow file later, you use the secret for the input creds of the Azure Login action. Por ejemplo:For example:

    - uses: azure/login@v1
    with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}
    
  4. Vuelva a seleccionar Nuevo secreto.Select New secret again.

  5. Pegue el valor de la cadena de conexión en el campo de valor del secreto.Paste the connection string value into the secret's value field. Asigne al secreto el nombre AZURE_SQL_CONNECTION_STRING.Give the secret the name AZURE_SQL_CONNECTION_STRING.

Agregar el flujo de trabajoAdd your workflow

  1. Vaya a Acciones del repositorio de GitHub.Go to Actions for your GitHub repository.

  2. Seleccione Set up your workflow yourself (Configure el flujo de trabajo usted mismo).Select Set up your workflow yourself.

  3. Elimine todo lo que aparezca después de la sección on: del archivo de flujo de trabajo.Delete everything after the on: section of your workflow file. Por ejemplo, el flujo de trabajo restante puede tener el siguiente aspecto.For example, your remaining workflow may look like this.

    name: CI
    
    on:
    push:
        branches: [ master ]
    pull_request:
        branches: [ master ]
    
  4. Cambie el nombre del flujo de trabajo SQL for GitHub Actions y agregue las acciones de restauración e inicio de sesión.Rename your workflow SQL for GitHub Actions and add the checkout and login actions. Estas acciones comprobarán el código del sitio y se autenticarán con Azure mediante el secreto de GitHub AZURE_CREDENTIALS que creó anteriormente.These actions will checkout your site code and authenticate with Azure using the AZURE_CREDENTIALS GitHub secret you created earlier.

    name: SQL for GitHub Actions
    
    on:
    push:
        branches: [ master ]
    pull_request:
        branches: [ master ]
    
    jobs:
    build:
        runs-on: windows-latest
        steps:
        - uses: actions/checkout@v1
        - uses: azure/login@v1
        with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
    
  5. Use la acción de implementación de Azure SQL para conectarse a la instancia de SQL.Use the Azure SQL Deploy action to connect to your SQL instance. Reemplace SQL_SERVER_NAME por el nombre del servidor.Replace SQL_SERVER_NAME with the name of your server. Debe tener un paquete dacpac (Database.dacpac) en el nivel raíz del repositorio.You should have a dacpac package (Database.dacpac) at the root level of your repository.

    - uses: azure/sql-action@v1
      with:
        server-name: SQL_SERVER_NAME
        connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
        sql-file: './Database.dacpac'
    
  6. Complete el flujo de trabajo agregando una acción al cierre de sesión de Azure.Complete your workflow by adding an action to logout of Azure. Este es el flujo de trabajo completado.Here is the completed workflow. El archivo aparecerá en la carpeta .github/workflows del repositorio.The file will appear in the .github/workflows folder of your repository.

    name: SQL for GitHub Actions
    
    on:
    push:
        branches: [ master ]
    pull_request:
        branches: [ master ]
    
    
    jobs:
    build:
        runs-on: windows-latest
        steps:
        - uses: actions/checkout@v1
        - uses: azure/login@v1
        with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
    
    - uses: azure/sql-action@v1
      with:
        server-name: SQL_SERVER_NAME
        connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
        sql-file: './Database.dacpac'
    
        # Azure logout 
    - name: logout
      run: |
         az logout
    

Revisar la implementaciónReview your deployment

  1. Vaya a la opción de Acciones del repositorio de GitHub.Go to Actions for your GitHub repository.

  2. Abra el primer resultado para ver los registros detallados de la ejecución del flujo de trabajo.Open the first result to see detailed logs of your workflow's run.

    Registro de ejecución de las acciones de GitHub

Limpieza de recursosClean up resources

Cuando la base de datos y el repositorio de Azure SQL ya no sean necesarios, limpie los recursos que implementó eliminando el grupo de recursos y el repositorio de GitHub.When your Azure SQL database and repository are no longer needed, clean up the resources you deployed by deleting the resource group and your GitHub repository.

Pasos siguientesNext steps