Condividi tramite


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 e 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 altre azioni che è 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 di applicazioni e quindi distribuire un'applicazione in tale macchina virtuale ogni volta che si esegue il merge in un ramo specifico in GitHub. Per il momento, questo articolo illustra come orientarsi 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 (SPN) con requisiti specifici. In questo articolo si creerà un strumento di esecuzione self-hosted. GitHub consente di usare qualsiasi computer raggiungibile da GitHub in GitHub Actions. È possibile creare una macchina virtuale come strumento di esecuzione in Azure, nell'hub di Azure Stack o altrove.

Questo flusso di lavoro di esempio include:

  • Istruzioni sulla creazione e la convalida del tuo SPN.
  • Configurazione di un computer windows 2016 Server core come strumento di esecuzione self-hosted di GitHub Actions per l'uso con l'hub di Azure Stack.
  • Flusso di lavoro che usa:
    • Azione di accesso di Azure
    • Azione dello script PowerShell

GitHub Actions dell'hub di Azure Stack

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

Azione di GitHub per Azure Stack Hub Parti dell'uso del runner self-hosted:

  • GitHub Actions ospitato su GitHub
  • Agente ospitato autonomamente su Azure
  • Azure Stack Hub

Una limitazione dell'uso di GitHub Actions con l'hub di Azure Stack consiste nel fatto 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à.

Il runner self-hosted può anche utilizzare una rete privata virtuale per connettersi al proprio Azure Stack Hub dietro un firewall, sebbene ciò non rientri nell'ambito di questo articolo.

Ottenere il principale del servizio

Un SPN fornisce credenziali basate sui ruoli per permettere ai processi fuori da Azure di connettersi e interagire con le risorse. È necessario un nome SPN con accesso collaboratore e gli attributi specificati in queste istruzioni da usare con GitHub Actions.

Come utente di Azure Stack Hub, non hai l'autorizzazione per creare il Nome Principale del Servizio (SPN). Sarà necessario richiedere questo principio all'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 nome SPN nel flusso di lavoro fornito da un operatore cloud.

L'operatore cloud dovrà creare il Nome Principale del Servizio usando Azure CLI.

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 sostituirla con un \.

  1. Preparare i valori dei seguenti parametri utilizzati per creare l'SPN:

    Parametro Esempio Descrizione
    endpoint-resource-manager "https://management.orlando.azurestack.corp.microsoft.com"" Endpoint di gestione delle risorse.
    suffisso-archiviazione-endpoint "orlando.azurestack.corp.microsoft.com" Suffisso dell'endpoint per gli account di archiviazione.
    suffisso-keyvault-dns ".vault.orlando.azurestack.corp.microsoft.com" Suffisso DNS del servizio Key Vault.
    endpoint-identificatore-risorsa-grafico-active-directory "https://graph.windows.net/" ID risorsa di Active Directory.
    endpoint-sql-management https://notsupported Endpoint di gestione di SQL Server. Impostare questa opzione su https://notsupported
    profilo 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 register per un nuovo ambiente o il comando update 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. Ottieni l'ID sottoscrizione e il gruppo di risorse che desideri utilizzare per l'SPN.

  5. Creare il 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. Userai l'oggetto JSON per creare il tuo segreto nel tuo repository GitHub che contiene la tua 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 un'entità servizio al repository

È possibile usare i segreti di GitHub per crittografare le informazioni riservate da usare nelle azioni. Creerai un segreto per contenere il tuo SPN in modo che l'azione possa accedere alla tua istanza di Azure Stack Hub.

Avvertimento

GitHub consiglia di non usare runner self-hosted con repository pubblici. I fork del tuo repository pubblico potrebbero eseguire codice pericoloso sul tuo runner self-hosted creando una pull request che esegue il codice in un flusso di lavoro. Per altre informazioni, vedere "Informazioni sui runner autogestiti".

  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. Imposta il repository come privato.
    1. Selezionare Impostazioni>Modifica la visibilità del repository.
    2. Selezionare Rendiprivato.
    3. Digitare il nome del repository.
    4. Seleziona capisco, cambia la visibilità del repository.
  3. Selezionare Impostazioni.
  4. Selezionare Segreti.
  5. Seleziona Nuovo segreto del repository. Aggiungi il segreto GitHub Actions
  6. Dai un nome al tuo segreto AZURE_CREDENTIALS.
  7. Incolla l'oggetto JSON che rappresenta il tuo SPN.
  8. Selezionare Aggiungi segreto.

Creare la macchina virtuale e installare i prerequisiti

  1. Crea il tuo 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 gli strumenti dell'hub di Azure Stack nello strumento di esecuzione 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 è una 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 Azure CLI. Da un prompt di PowerShell con privilegi elevati digitare:

    choco install azure-cli
    
  6. Installare PowerShell per l'hub di Azure Stack. Da una finestra 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. Aggiungi la macchina come esecutore self-hosted al tuo repository GitHub. È possibile trovare istruzioni sull'aggiunta di un runner autogestito nella documentazione di GitHub. Per altre informazioni, vedere Aggiunta di runner autogestiti.

    Runner è in ascolto

  9. Al termine, verificare che il servizio sia in esecuzione e ascolti le richieste del servizio. Verificare due volte eseguendo /run.cmd dalla directory del runner.

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 il proprio flusso di lavoro potrebbe essere necessario usare gli strumenti. Le istruzioni seguenti possono aiutarti a installare gli strumenti sul tuo runner 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 che l'utente abbia installato La gestione pacchetti Chocolatey.

  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 hai bisogno che il runner si connetta all'istanza di Azure Stack Hub, puoi utilizzare PowerShell. È possibile trovare le istruzioni 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 utilizzare un runner self-hosted se si ha un'attività di automazione nel flusso di lavoro che richiede dipendenze estese, requisiti di licenza specifici come un dongle USB per una licenza software, o altre esigenze specifiche per la macchina o il software. Il computer può essere un computer fisico, una macchina virtuale o un contenitore. È possibile posizionare il runner nel datacenter 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 impostare, configurare e connettere il runner self-hosted al tuo repository, consulta la documentazione di GitHub, "Informazioni sui runner self-hosted".

strumento di esecuzione auto-ospitato connesso

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

Aggiungere il flusso di lavoro al repository

Per creare un nuovo flusso di lavoro, utilizza il YAML presente in questa sezione.

  1. Aprire il repository GitHub.

  2. Selezionare Azioni.

  3. Creare un nuovo flusso di lavoro.

    • Se si tratta del primo flusso di lavoro, selezionare configurare 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 un flusso di lavoro.
  4. Nel percorso assegnare al file il nome workflow.yml.

  5. Copiare e incollare il file yml del flusso di lavoro.

    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 , avviare commit.

  7. Aggiungere il titolo del commit e i dettagli facoltativi e quindi selezionare Commit new 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 Azioni.

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

    Verifica riepilogo commit

  4. Selezionare il nome del lavoro azurestack-test.

    Esaminare i dettagli del commit

  5. Espandere le sezioni per esaminare i valori restituiti per i comandi di PowerShell e CLI.

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 utilizza un runner self-hosted configurato nel repository e viene richiamato dall'etichetta del runner nel workflow 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 utilizza le credenziali SPN di Azure Stack per connettersi e aprire una sessione nell'ambiente Azure Stack Hub. Per altre informazioni sull'uso dell'azione in GitHub, Azione di accesso di Azure.
  • La seconda azione usa Azure PowerShell. L'azione usa i moduli Az PowerShell e funziona con i 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 ulteriori 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 ulteriori informazioni sull'utilizzo di GitHub Actions e del runner self-hosted, consulta la documentazione GitHub Actions.

Passaggi successivi