Nawiązywanie połączenia GitHub Actions z Azure SQL DatabaseUse GitHub Actions to connect to Azure SQL Database

Rozpoczynanie pracy z GitHub Actions przy użyciu przepływu pracy w celu wdrożenia aktualizacji bazy danych w Azure SQL Database.Get started with GitHub Actions by using a workflow to deploy database updates to Azure SQL Database.

Wymagania wstępnePrerequisites

Potrzebne elementy:You will need:

Omówienie pliku przepływu pracyWorkflow file overview

Przepływ GitHub Actions jest definiowany przez plik YAML (yml) w /.github/workflows/ ścieżce w repozytorium.A GitHub Actions workflow is defined by a YAML (.yml) file in the /.github/workflows/ path in your repository. Ta definicja zawiera różne kroki i parametry, które składa się na przepływ pracy.This definition contains the various steps and parameters that make up the workflow.

Plik ma dwie sekcje:The file has two sections:

SekcjaSection ZadaniaTasks
AuthenticationAuthentication 1. Definiowanie jednostki usługi.1. Define a service principal.
2. Utwórz klucz tajny usługi GitHub.2. Create a GitHub secret.
WdrażanieDeploy 1. Wdrażanie bazy danych.1. Deploy the database.

Generowanie poświadczeń wdrożeniaGenerate deployment credentials

Jednostkę usługi można utworzyć za pomocą polecenia az ad sp create-for-rbac w interfejsie wiersza polecenia platformy Azure.You can create a service principal with the az ad sp create-for-rbac command in the Azure CLI. Uruchom to polecenie, Azure Cloud Shell w Azure Portal lub wybierając przycisk Wypróbuj.Run this command with Azure Cloud Shell in the Azure portal or by selecting the Try it button.

Zastąp symbole zastępcze server-name nazwą serwera SQL hostowaną na platformie Azure.Replace the placeholders server-name with the name of your SQL server hosted on Azure. Zastąp i subscription-id resource-group identyfikatorem subskrypcji i grupą zasobów połączeni z serwerem 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

Dane wyjściowe to obiekt JSON z poświadczeniami przypisania roli, które zapewniają dostęp do bazy danych, podobnie jak w tym przykładzie.The output is a JSON object with the role assignment credentials that provide access to your database similar to this example. Skopiuj wyjściowy obiekt JSON na później.Copy your output JSON object for later.

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

Ważne

Zawsze dobrym rozwiązaniem jest przyznanie minimalnego dostępu.It is always a good practice to grant minimum access. Zakres w poprzednim przykładzie jest ograniczony do określonego serwera, a nie do całej grupy zasobów.The scope in the previous example is limited to the specific server and not the entire resource group.

Kopiowanie parametrów połączenia SQLCopy the SQL connection string

W Azure Portal przejdź do swojego Azure SQL Database i otwórz pozycję Parametry > połączenia ustawień.In the Azure portal, go to your Azure SQL Database and open Settings > Connection strings. Skopiuj parametry połączenia ADO.NET.Copy the ADO.NET connection string. Zastąp wartości symboli zastępczych your_database dla i your_password .Replace the placeholder values for your_database and your_password. Ciąg połączenia będzie wyglądać podobnie do tych danych wyjściowych.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;

Użyjesz parametrów połączenia jako tajnego repozytorium GitHub.You'll use the connection string as a GitHub secret.

Konfigurowanie wpisów tajnych usługi GitHubConfigure the GitHub secrets

  1. W usłudze GitHubprzejrzyj repozytorium.In GitHub, browse your repository.

  2. Wybierz pozycję Ustawienia > wpisy tajne > nowy wpis tajny.Select Settings > Secrets > New secret.

  3. Wklej całe dane wyjściowe JSON z polecenia interfejsu wiersza polecenia platformy Azure do pola wartości we kluczu tajnym.Paste the entire JSON output from the Azure CLI command into the secret's value field. Nadaj kluczowi tajnego nazwę AZURE_CREDENTIALS .Give the secret the name AZURE_CREDENTIALS.

    Podczas późniejszego konfigurowania pliku przepływu pracy użyjesz tajnego hasła dla danych creds wejściowych akcji logowania platformy Azure.When you configure the workflow file later, you use the secret for the input creds of the Azure Login action. Na przykład:For example:

    - uses: azure/login@v1
    with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}
    
  4. Wybierz ponownie pozycję Nowy klucz tajny.Select New secret again.

  5. Wklej wartość parametrów połączenia w polu wartości we kluczu tajnym.Paste the connection string value into the secret's value field. Nadaj kluczowi tajnego nazwę AZURE_SQL_CONNECTION_STRING .Give the secret the name AZURE_SQL_CONNECTION_STRING.

Dodawanie przepływu pracyAdd your workflow

  1. Przejdź do akcji repozytorium GitHub.Go to Actions for your GitHub repository.

  2. Wybierz pozycję Skonfiguruj przepływ pracy samodzielnie.Select Set up your workflow yourself.

  3. Usuń wszystko po on: sekcji pliku przepływu pracy.Delete everything after the on: section of your workflow file. Na przykład pozostały przepływ pracy może wyglądać tak.For example, your remaining workflow may look like this.

    name: CI
    
    on:
    push:
        branches: [ master ]
    pull_request:
        branches: [ master ]
    
  4. Zmień nazwę SQL for GitHub Actions przepływu pracy i dodaj akcje wyewidencjonowania i logowania.Rename your workflow SQL for GitHub Actions and add the checkout and login actions. Te akcje wyewidencjonowają kod witryny i uwierzytelnią się na platformie Azure przy użyciu AZURE_CREDENTIALS utworzonego wcześniej tajnego kodu usługi GitHub.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. Użyj akcji Azure SQL Deploy, aby nawiązać połączenie z wystąpieniem SQL.Use the Azure SQL Deploy action to connect to your SQL instance. Zastąp SQL_SERVER_NAME nazwą serwera.Replace SQL_SERVER_NAME with the name of your server. Pakiet dacpac () powinien być na poziomie głównym Database.dacpac repozytorium.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 }}
        dacpac-package: './Database.dacpac'
    
  6. Ukończ przepływ pracy, dodając akcję w celu wylogowania się z platformy Azure.Complete your workflow by adding an action to logout of Azure. Oto ukończony przepływ pracy.Here is the completed workflow. Plik zostanie wyświetlony w .github/workflows folderze repozytorium.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 }}
        dacpac-package: './Database.dacpac'
    
        # Azure logout 
    - name: logout
      run: |
         az logout
    

Przeglądanie wdrożeniaReview your deployment

  1. Przejdź do akcji repozytorium GitHub.Go to Actions for your GitHub repository.

  2. Otwórz pierwszy wynik, aby wyświetlić szczegółowe dzienniki przebiegów przepływu pracy.Open the first result to see detailed logs of your workflow's run.

    Uruchamianie dziennika akcji usługi GitHub

Czyszczenie zasobówClean up resources

Gdy baza Azure SQL i repozytorium nie są już potrzebne, wyczyść wdrożone zasoby, usuwając grupę zasobów i repozytorium 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.

Następne krokiNext steps