Usare l'azione di accesso di Azure con l'interfaccia della riga di comando di Azure e PowerShell nell'hub di Azure Stack

È possibile configurare GitHub Actions per accedere all'istanza dell'hub di Azure Stack, eseguire PowerShell e quindi eseguire uno script dell'interfaccia della riga di comando di Azure. È possibile usarlo come base di un flusso di lavoro di integrazione continua, distribuzione continua (CI/CD) per la soluzione con l'hub di Azure Stack. Con questo flusso di lavoro è possibile automatizzare la compilazione, il test e la distribuzione della soluzione in modo che sia possibile concentrarsi sulla scrittura di codice. Ad esempio, aggiungendo alcune altre azioni, è possibile usare questo flusso di lavoro insieme a un modello di Azure Resource Manager per effettuare il provisioning di una macchina virtuale, convalidare un repository dell'applicazione e quindi distribuire un'applicazione nella macchina virtuale ogni volta che si esegue il merge in un ramo specifico in GitHub. Per il momento, questo articolo consente di ottenere l'orientamento con GitHub Actions e l'hub di Azure Stack.

GitHub Actions sono flussi di lavoro costituiti da azioni che consentono l'automazione direttamente all'interno del repository di codice. È possibile attivare i flussi di lavoro con eventi nel processo di sviluppo di GitHub. È possibile eseguire attività comuni di automazione DevOps, ad esempio test, distribuzione e integrazione continua.

Per usare GitHub Actions con l'hub di Azure Stack, è necessario usare un'entità servizio con requisiti specifici. In questo articolo verrà creato un runner self-hosted. GitHub consente di usare qualsiasi computer raggiungibile da GitHub nel GitHub Actions. È possibile creare una macchina virtuale (VM) come runner in Azure, nell'hub di Azure Stack o altrove.

Questo flusso di lavoro di esempio include:

  • Istruzioni sulla creazione e la convalida del nome SPN.
  • Configurazione di un computer core di Windows 2016 Server come GitHub Actions runner self-hosted per usare l'hub di Azure Stack.
  • Flusso di lavoro che usa:
    • Azione di accesso di Azure
    • Azione script di PowerShell

GitHub Actions dell'hub di Azure Stack

Il diagramma seguente illustra i diversi ambienti e le relative relazioni.

Azione Github dell'hub di Azure Stack Parti dell'uso del runner self-hosted:

  • GitHub Actions ospitata in GitHub
  • Runner self-hosted ospitato in Azure
  • Hub di Azure Stack

Una limitazione dell'uso di GitHub Actions con l'hub di Azure Stack è che il processo richiede l'uso di un hub di Azure Stack connesso al Web. Il flusso di lavoro viene attivato in un repository GitHub. È possibile usare sia Microsoft Entra ID che Active Directory Federated Services (AD FS) come provider di identità.

Anche se questo è fuori dall'ambito di questo articolo, il runner self-hosted può anche usare una rete privata virtuale per connettersi all'hub di Azure Stack dietro un firewall.

Ottenere l'entità servizio

Un SPN fornisce credenziali basate sul ruolo in modo che i processi esterni ad Azure possano connettersi e interagire con le risorse. È necessario un SPN con accesso ai collaboratori e gli attributi specificati in queste istruzioni da usare con il GitHub Actions.

L'utente dell'hub di Azure Stack non dispone dell'autorizzazione per creare il nome SPN. È necessario richiedere questo principio dall'operatore cloud. Le istruzioni vengono fornite qui in modo da poter creare il nome SPN se si è un operatore cloud oppure è possibile convalidare il nome SPN se si è uno sviluppatore usando un SPN nel flusso di lavoro fornito da un operatore cloud.

L'operatore cloud dovrà creare il nome SPN usando l'interfaccia della riga di comando di Azure.

I frammenti di codice seguenti vengono scritti per un computer Windows usando il prompt di PowerShell con l'interfaccia della riga di comando di Azure. Se si usa l'interfaccia della riga di comando in un computer Linux e bash, rimuovere l'estensione della riga o sostituirle con un \oggetto .

  1. Preparare i valori dei parametri seguenti usati per creare il nome SPN:

    Parametro Esempio Descrizione
    endpoint-resource-manager "https://management.orlando.azurestack.corp.microsoft.com" Endpoint di gestione delle risorse.
    suffisso-storage-endpoint "orlando.azurestack.corp.microsoft.com" Suffisso endpoint per gli account di archiviazione.
    suffisso-keyvault-dns ".vault.orlando.azurestack.corp.microsoft.com" Suffisso dns del servizio Key Vault.
    endpoint-active-directory-graph-resource-id "https://graph.windows.net/" ID risorsa di Active Directory.
    endpoint-sql-management https://notsupported Endpoint di gestione di SQL Server. Impostare il valore su https://notsupported
    profile 2020-09-01-ibrido Profilo da usare per questo cloud.
  2. Aprire lo strumento da riga di comando, ad esempio Windows PowerShell o Bash e accedere. Usare il comando seguente:

    az login
    
  3. Usare il comando per un nuovo ambiente o il registerupdate comando se si usa un ambiente esistente. Usare il comando seguente.

    az cloud register `
        -n "AzureStackUser" `
        --endpoint-resource-manager "https://management.<local>.<FQDN>" `
        --suffix-storage-endpoint ".<local>.<FQDN>" `
        --suffix-keyvault-dns ".vault.<local>.<FQDN>" `
        --endpoint-active-directory-graph-resource-id "https://graph.windows.net/" `
        --endpoint-sql-management https://notsupported  `
        --profile 2020-09-01-hybrid
    
  4. Ottenere l'ID sottoscrizione e il gruppo di risorse da usare per il nome SPN.

  5. Creare il nome SPN con il comando seguente con l'ID sottoscrizione e il gruppo di risorse:

    az ad sp create-for-rbac --name "myApp" --role contributor `
        --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} `
        --sdk-auth
    
  6. Controllare l'oggetto JSON risultante. Si userà l'oggetto JSON per creare il segreto nel repository GitHub che contiene l'azione. L'oggetto JSON deve avere gli attributi seguenti:

    {
      "clientId": <Application ID for the SPN>,
      "clientSecret": <Client secret for the SPN>,
      "subscriptionId": <Subscription ID for the SPN>,
      "tenantId": <Tenant ID for the SPN>,
      "activeDirectoryEndpointUrl": "https://login.microsoftonline.com/",
      "resourceManagerEndpointUrl": "https://management.<FQDN>",
      "activeDirectoryGraphResourceId": "https://graph.windows.net/",
      "sqlManagementEndpointUrl": "https://notsupported",
      "galleryEndpointUrl": "https://providers.<FQDN>:30016/",
      "managementEndpointUrl": "https://management.<FQDN>"
    }
    

Aggiungere l'entità servizio al repository

È possibile usare i segreti di GitHub per crittografare le informazioni riservate da usare nelle azioni. Verrà creato un segreto per contenere il nome SPN in modo che l'azione possa accedere all'istanza dell'hub di Azure Stack.

Avviso

GitHub consiglia di non usare i runner self-hosted con repository pubblici Forks del repository pubblico potrebbe eseguire codice pericoloso nel computer runner self-hosted creando una richiesta pull che esegue il codice in un flusso di lavoro. Per altre informazioni, vedere "Informazioni sui runner self-hosted".

  1. Aprire o creare un repository GitHub. Se sono necessarie indicazioni sulla creazione di un repository in GitHub, è possibile trovare istruzioni nella documentazione di GitHub.
  2. Impostare il repository su privato.
    1. Selezionare Impostazioni>Modifica visibilità del repository.
    2. Selezionare Crea privato.
    3. Digitare il nome del repository.
    4. Selezionare Informazioni dettagliate, modificare la visibilità del repository.
  3. Selezionare Impostazioni.
  4. Selezionare Segreti.
  5. Selezionare New repository secret (Nuovo segreto del repository). Aggiungere il segreto GitHub Actions
  6. Assegnare un nome al segreto AZURE_CREDENTIALS.
  7. Incollare l'oggetto JSON che rappresenta il nome SPN.
  8. Selezionare Aggiungi segreto.

Creare la macchina virtuale e installare i prerequisiti

  1. Creare il runner self-hosted.

    Queste istruzioni creano un runner come macchina virtuale Windows in Azure. Se è necessario connettersi all'hub di Azure Stack ospitato in un data center, potrebbe essere necessaria una connessione VPN. È possibile trovare istruzioni sull'abilitazione della connessione nella sezione Installare Strumenti dell'hub di Azure Stack nel runner self-hosted che potrebbe richiedere una connessione VPN.

  2. Usare una connessione remota per connettersi al server Windows 2016 usando l'indirizzo IP del server, il nome utente e la password definiti durante la creazione del computer.

  3. Installare Chocolatey. Chocolatey è uno strumento di gestione pacchetti per Windows che è possibile usare per installare e gestire le dipendenze dalla riga di comando. Da un prompt di PowerShell con privilegi elevati digitare:

    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    
  4. Installare PowerShell Core. Da un prompt di PowerShell con privilegi elevati digitare:

    choco install powershell-core
    
  5. Installare l'interfaccia della riga di comando di Azure. Da un prompt di PowerShell con privilegi elevati digitare:

    choco install azure-cli
    
  6. Installare PowerShell per l'hub di Azure Stack. Da un prompt di PowerShell con privilegi elevati digitare:

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    
    Install-Module -Name Az.BootStrapper -Force -AllowPrerelease
    Install-AzProfile -Profile 2020-09-01-hybrid -Force
    Install-Module -Name AzureStack -RequiredVersion 2.0.2-preview -AllowPrerelease
    

    Per altre informazioni sull'uso dei moduli Az dell'hub di Azure Stack, vedere Installare il modulo Az di PowerShell per l'hub di Azure Stack.

  7. Riavviare il computer. Da un prompt di PowerShell con privilegi elevati digitare:

    shutdown /r
    
  8. Aggiungere il computer come strumento di esecuzione self-hosted al repository GitHub. Le istruzioni sull'aggiunta di uno strumento di esecuzione self-hosted sono disponibili nella documentazione di GitHub. Per altre informazioni, vedere Aggiunta di strumenti di esecuzione self-hosted.

    Runner è in ascolto

  9. Al termine, verificare che il servizio sia in esecuzione e in ascolto del servizio. Controllare due volte eseguendo /run.cmd dalla directory dello strumento di esecuzione.

Facoltativo: installare gli strumenti dell'hub di Azure Stack nello strumento di esecuzione self-hosted

Le istruzioni in questo articolo non richiedono l'accesso agli strumenti dell'hub di Azure Stack, ma quando si sviluppa un flusso di lavoro personalizzato potrebbe essere necessario usare gli strumenti. Le istruzioni seguenti consentono di installare gli strumenti nello strumento di esecuzione self-hosted di Windows. Per altre informazioni sugli strumenti dell'hub di Azure Stack, vedere Scaricare gli strumenti dell'hub di Azure Stack da GitHub. Queste istruzioni presuppongono l'installazione di Chocolatey per la gestione pacchetti.

  1. Installare Git.

    choco install git
    
  2. Da un prompt di PowerShell con privilegi elevati digitare:

    # Change directory to the root directory.
    cd \
    
    # Download the tools archive.
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 
    invoke-webrequest `
      https://github.com/Azure/AzureStack-Tools/archive/az.zip `
      -OutFile az.zip
    
    # Expand the downloaded files.
    expand-archive az.zip `
      -DestinationPath . `
      -Force
    
    # Change to the tools directory.
    cd AzureStack-Tools-az
    
  3. Se è necessario che lo strumento di esecuzione si connetta all'istanza dell'hub di Azure Stack, è possibile usare PowerShell. Le istruzioni sono disponibili nell'articolo Connettersi all'hub di Azure Stack con PowerShell.

Creare uno strumento di esecuzione self-hosted

È possibile configurare uno strumento di esecuzione self-hosted nella documentazione di GitHub. Uno strumento di esecuzione self-hosted può essere eseguito in qualsiasi computer in grado di connettersi a GitHub. È possibile scegliere di usare uno strumento di esecuzione self-hosted se si dispone di un'attività di automazione nel flusso di lavoro che richiede dipendenze estese, requisiti di licenza specifici, ad esempio un dongle USB per una licenza software o un altro computer o esigenze specifiche del software. Il computer può essere un computer fisico, una macchina virtuale o un contenitore. È possibile posizionare lo strumento di esecuzione nel data center o nel cloud.

In questo articolo si userà una macchina virtuale Windows ospitata in Azure che verrà configurata con requisiti specifici di PowerShell per l'hub di Azure Stack.

Per istruzioni su come configurare, configurare e connettere lo strumento di esecuzione self-hosted al repository, vedere la documentazione di GitHub " Informazioni sugli strumenti di esecuzione self-hosted".

Strumento di esecuzione self-hosted connesso

Prendere nota del nome e dei tag dello strumento di esecuzione self-hosted. Il flusso di lavoro in questo articolo lo chiamerà usando il tag self-hosted.

Aggiungere il flusso di lavoro al repository

Creare un nuovo flusso di lavoro usando yaml in questa sezione per creare il flusso di lavoro.

  1. Aprire il repository GitHub.

  2. Selezionare Actions.

  3. Creare un nuovo flusso di lavoro.

    • Se si tratta del primo flusso di lavoro, selezionare Configura manualmente un flusso di lavoro in Scegliere un modello di flusso di lavoro.
    • Se sono presenti flussi di lavoro esistenti, selezionare Nuovo flusso di lavoro>Configurare manualmente un flusso di lavoro.
  4. Nel percorso assegnare al file workflow.ymlil nome .

  5. Copiare e incollare il flusso di lavoro yml.

    on: [push]
    
    env:
      ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
    
    jobs: 
      azurestack-test:
        runs-on: self-hosted
        steps:
    
          - name: Login to AzureStack with Az Powershell
            uses: azure/login@releases/v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
              environment: 'AzureStack'
              enable-AzPSSession: true
    
          - name: Run Az PowerShell Script Against AzureStack
            uses: azure/powershell@v1
            with:
              azPSVersion: '3.1.0'
              inlineScript: |
                hostname
                Get-AzContext
                Get-AzResourceGroup
    
          - name: Login to AzureStack with CLI
            uses: azure/login@releases/v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
              environment: 'AzureStack'
              enable-AzPSSession: false
    
          - name: Run Azure CLI Script Against AzureStack
            run: |
              hostname
              az group list --output table
    
  6. Selezionare Start commit (Avvia commit).

  7. Aggiungere il titolo del commit e i dettagli facoltativi e quindi selezionare Commit new file (Esegui commit nuovo file).

Quando l'azione viene eseguita, verificare che sia stata eseguita correttamente.

  1. Aprire il repository GitHub. È possibile attivare il flusso di lavoro eseguendo il push nel repository.

  2. Selezionare Actions.

  3. Selezionare il nome del commit in Tutti i flussi di lavoro.

    Esaminare il riepilogo del commit

  4. Selezionare il nome del processo , azurestack-test.

    Esaminare i dettagli del commit

  5. Espandere le sezioni per esaminare i valori restituiti per i comandi di PowerShell e dell'interfaccia della riga di comando.

Note sul file del flusso di lavoro e sull'azione:

  • Il flusso di lavoro contiene un singolo processo denominato azurestack-test.
  • Un evento push attiva il flusso di lavoro.
  • L'azione usa uno strumento di esecuzione self-hosted configurato nel repository e viene chiamato dall'etichetta dello strumento di esecuzione nel flusso di lavoro con la riga : runs on: self-hosted.
  • Il flusso di lavoro contiene tre azioni.
  • La prima azione chiama l'azione di accesso di Azure per accedere con PowerShell con GitHub Actions per Azure, è possibile creare flussi di lavoro che è possibile configurare nel repository per compilare, testare, creare pacchetti, rilasciare e distribuire in Azure. Questa azione usa le credenziali spn di Azure Stack per connettersi e aprire una sessione all'ambiente dell'hub di Azure Stack. Altre informazioni sull'uso dell'azione sono disponibili in GitHub, Azione di accesso di Azure.
  • La seconda azione usa Azure PowerShell. L'azione usa i moduli Az PowerShell e funziona con cloud dell'hub di Azure Stack e per enti pubblici. Dopo aver eseguito questo flusso di lavoro, esaminare il processo per verificare che lo script abbia raccolto i gruppi di risorse nell'ambiente dell'hub di Azure Stack. Per altre informazioni, vedere Azure PowerShell Action
  • La terza azione usa l'interfaccia della riga di comando di Azure per accedere e connettersi all'hub di Azure Stack per raccogliere i gruppi di risorse. Per altre informazioni, vedere Azione dell'interfaccia della riga di comando di Azure.
  • Per altre informazioni sull'uso di GitHub Actions e runner self-hosted, vedere la documentazione di GitHub Actions.

Passaggi successivi