Esercitazione: Eseguire la distribuzione nel servizio app Azure con Jenkins e l'interfaccia della riga di comando di Azure

Importante

Molti servizi di Azure dispongono di plug-in Jenkins. Alcuni di questi plug-in non saranno supportati a partire dal 29 febbraio 2024. L'interfaccia della riga di comando di Azure è il modo attualmente consigliato per integrare Jenkins con i servizi di Azure. Per altre informazioni, vedere l'articolo Plug-in Jenkins per Azure.

Per distribuire un'app Web di Java in Azure, è possibile usare l'interfaccia della riga di comando di Azure in Jenkins Pipeline. In questa esercitazione si eseguiranno le attività seguenti:

  • Creare una macchina virtuale Jenkins
  • Configurare Jenkins
  • Creare un'app Web in Azure
  • Preparare un repository GitHub
  • Creare una pipeline Jenkins
  • Eseguire la pipeline e verificare l'app Web

Prerequisiti

  • Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
  • Jenkins - Installare Jenkins in una VM Linux
  • Interfaccia della riga di comando di Azure: installare l'interfaccia della riga di comando di Azure (versione 2.0.67 o successiva) nel server Jenkins.

Configurare Jenkins

I passaggi seguenti illustrano come installare java JDK e Maven necessari nel controller Jenkins:

  1. Accedere al controller Jenkins usando SSH.

  2. Scaricare e installare la build Azul Zulu di OpenJDK per Azure da un repository apt-get:

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
    sudo apt-add-repository "deb http://repos.azul.com/azure-only/zulu/apt stable main"
    sudo apt-get -q update
    sudo apt-get -y install zulu-8-azure-jdk
    
  3. Eseguire il comando seguente per installare Maven:

    sudo apt-get install -y maven
    

Aggiungere l'entità servizio di Azure a una credenziale di Jenkins

La procedura seguente illustra come specificare le credenziali di Azure:

  1. Assicurarsi che il plug-in Credenziali sia installato.

  2. Nel dashboard di Jenkins selezionare Credenziali -> Sistema -> .

  3. Selezionare Global credentials (unrestricted) (Credenziali globali - senza restrizioni).

  4. Selezionare Add Credentials (Aggiungi credenziali) per aggiungere un'entità servizio di Microsoft Azure. Assicurarsi che il tipo di credenziale sia Username with password (Nome utente con password ) e immettere gli elementi seguenti:

    • Nome utente: entità servizio appId
    • Password: entità servizio password
    • ID: identificatore delle credenziali (ad esempio AzureServicePrincipal)

Creare un servizio app di Azure per la distribuzione dell'app Web di Java

Usare il comando az appservice plan create per creare un piano di servizio app di Azure con il piano tariffario GRATUITO:

az appservice plan create \
    --name <app_service_plan> \ 
    --resource-group <resource_group> \
    --sku FREE

Punti principali:

  • Il piano di servizio app definisce le risorse fisiche usate per ospitare le app.
  • Tutte le applicazioni assegnate a un piano di servizio app condividono queste risorse.
  • I piani di servizio app consentono di risparmiare sui costi in caso di hosting di più app.

Creare un'app Web di Azure

Usare il comando az webapp create per creare una definizione di app Web nel piano di servizio app myAppServicePlan.

az webapp create \
    --name <app_name> \ 
    --resource-group <resource_group> \
    --plan <app_service_plan>

Punti principali:

  • La definizione dell'app Web fornisce un URL con cui accedere all'applicazione e configura diverse opzioni per distribuire il codice in Azure.
  • Sostituire il segnaposto <app_name> con un nome univoco per l'app.
  • Il nome dell'app fa parte del nome di dominio predefinito dell'app Web. Deve pertanto essere univoco in tutte le app di Azure.
  • È possibile eseguire il mapping di una voce di nome di dominio personalizzata all'app Web prima di esporla agli utenti.

Configurare Java

Usare il comando az appservice web config update per impostare la configurazione del runtime Java per l'app:

az webapp config set \ 
    --name <app_name> \
    --resource-group <resource_group> \ 
    --java-version 1.8 \ 
    --java-container Tomcat \
    --java-container-version 8.0

Preparare un repository GitHub

  1. Aprire il repository Simple Java Web App for Azure.

  2. Selezionare il pulsante Fork per creare una copia tramite fork del repository nel proprio account GitHub.

  3. Aprire il file Jenkinsfile facendo clic sul relativo nome.

  4. Selezionare l'icona della matita per modificare il file.

  5. Aggiornare l'ID sottoscrizione e l'ID tenant.

      withEnv(['AZURE_SUBSCRIPTION_ID=<subscription_id>',
            'AZURE_TENANT_ID=<tenant_id>']) 
    
  6. Aggiornare il gruppo di risorse e il nome dell'app Web nella riga 22 e 23 rispettivamente.

    def resourceGroup = '<resource_group>'
    def webAppName = '<app_name>'
    
  7. Aggiornare l'ID delle credenziali nell'istanza di Jenkins

    withCredentials([usernamePassword(credentialsId: '<service_princial>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
    

Creare una pipeline Jenkins

Per creare una pipeline di Jenkins, seguire questa procedura:

  1. Aprire Jenkins in un Web browser.

  2. Selezionare Nuovo elemento.

  3. Immettere un nome per il processo.

  4. Selezionare Pipeline.

  5. Seleziona OK.

  6. Selezionare Pipeline.

  7. Per Definition selezionare Pipeline script from SCM.

  8. Per SCM selezionare Git.

  9. Immettere l'URL di GitHub per il repository copiato tramite con fork: https:\<forked_repo\>.git

  10. Seleziona Salva

Testare la pipeline

  1. Passare alla pipeline creata

  2. Selezionare Build now (Compila)

  3. Al termine della compilazione, selezionare Output console per visualizzare i relativi dettagli.

Verificare l'app Web

Per verificare che il file WAR sia stato distribuito correttamente nell'app Web, seguire questa procedura:

  1. Passare all'URL seguente: http://&lt;app_name>.azurewebsites.net/api/calculator/ping

  2. L'output dovrebbe essere simile al testo seguente:

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  3. Passare all'URL seguente (sostituire <x> e <y> con due valori da sommare): http://< app_name.azurewebsites.net/api/calculator/add?x>=<x>&y=<y>.

    Example of running the demo add

Eseguire la distribuzione nel Servizio app di Azure in Linux

Il servizio app può anche ospitare le app Web in modo nativo in Linux per gli stack di applicazioni supportate. Può anche eseguire contenitori Linux personalizzati, noti anche come app Web per contenitori.

È possibile modificare lo script per eseguire la distribuzione in un servizio app di Azure in Linux. Il Servizio app di Azure in Linux supporta Docker. Di conseguenza, specificare un Dockerfile che assembla l'app Web con il runtime del servizio in un'immagine Docker. Il plug-in crea l'immagine, ne esegue il push in un registro Docker e la distribuisce nell'app Web.

  1. Per informazioni su come creare un servizio app di Azure in Linux e un registro Azure Container, vedere Eseguire la migrazione di un software personalizzato al Servizio app di Azure usando un contenitore personalizzato.

        az group create --name myResourceGroup2 --location westus2
        az acr create --name myACRName --resource-group myResourceGroup2 --sku Basic --admin-enabled true
        az appservice plan create --name myAppServicePlan --resource-group  myResourceGroup2 --is-linux
        az webapp create --resource-group myResourceGroup2 --plan myAppServicePlan --name myApp --deployment-container-image-name myACRName.azurecr.io/calculator:latest
    
  2. Installare Docker in Jenkins.

  3. Assicurarsi che sia installato il plug-in Docker Pipeline.

  4. Nello stesso repository Simple Java Web App for Azure copiato tramite fork modificare il file Jenkinsfile2 come segue:

    1. Aggiornare l'ID sottoscrizione e l'ID tenant.

       withEnv(['AZURE_SUBSCRIPTION_ID=<mySubscriptionId>',
              'AZURE_TENANT_ID=<myTenantId>']) {
      
    2. Aggiornare i nomi del gruppo di risorse, dell'app Web e di Registro Azure Container, sostituendo i segnaposto con i propri valori.

      def webAppResourceGroup = '<resource_group>'
      def webAppName = '<app_name>'
      def acrName = '<registry>'
      
    3. Aggiornare <azsrvprincipal\> in base all'ID credenziali

      withCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
      
  5. Creare una nuova pipeline Jenkins come è già stato fatto per la distribuzione dell'app Web di Azure in Windows usando Jenkinsfile2.

  6. Eseguire il nuovo processo.

  7. Per verifica, eseguire il comando seguente nell'interfaccia della riga di comando di Azure:

    az acr repository list -n <myRegistry> -o json
    

    Verranno visualizzati risultati simili ai seguenti:

    [
    "calculator"
    ]
    
  8. Passare a http://<app_name>.azurewebsites.net/api/calculator/ping (sostituendo il segnaposto). I risultati visualizzati saranno simili ai seguenti:

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  9. Passare a http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> (sostituendo i segnaposto). I valori specificati per x e y vengono sommati e visualizzati.

Passaggi successivi