Distribuire nel servizio app di Azure con Jenkins e l'interfaccia della riga di comando di AzureDeploy to Azure App Service with Jenkins and the Azure CLI

Per distribuire un'app Web di Java in Azure, è possibile usare l'interfaccia della riga di comando di Azure in Jenkins Pipeline.To deploy a Java web app to Azure, you can use Azure CLI in Jenkins Pipeline. In questa esercitazione viene creata una pipeline CI/CD in una macchina virtuale di Azure e viene illustrato come:In this tutorial, you create a CI/CD pipeline on an Azure VM including how to:

  • Creare una macchina virtuale JenkinsCreate a Jenkins VM
  • Configurare JenkinsConfigure Jenkins
  • Creare un'app Web in AzureCreate a web app in Azure
  • Preparare un repository GitHubPrepare a GitHub repository
  • Creare una pipeline JenkinsCreate Jenkins pipeline
  • Eseguire la pipeline e verificare l'app WebRun the pipeline and verify the web app

Questa esercitazione richiede l'interfaccia della riga di comando di Azure 2.0.4 o versioni successive.This tutorial requires the Azure CLI version 2.0.4 or later. Per trovare la versione, eseguire az --version.To find the version, run az --version. Se è necessario eseguire l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure 2.0.If you need to upgrade, see Install Azure CLI 2.0.

Aprire Azure Cloud ShellOpen Azure Cloud Shell

Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo.Azure Cloud Shell is a free, interactive shell that you can use to run the steps in this article. Gli strumenti comuni di Azure sono preinstallati e configurati in Cloud Shell per l'uso con l'account.Common Azure tools are preinstalled and configured in Cloud Shell for you to use with your account. È sufficiente selezionare il pulsante Copia per copiare il codice, incollarlo in Cloud Shell e quindi premere INVIO per eseguirlo.Just select the Copy button to copy the code, paste it in Cloud Shell, and then press Enter to run it. Esistono alcuni modi per aprire Cloud Shell:There are a few ways to open Cloud Shell:

Selezionare Prova nell'angolo superiore destro di un blocco di codice.Select Try It in the upper-right corner of a code block. Cloud Shell in questo articolo
Aprire Cloud Shell nel browser.Open Cloud Shell in your browser. https://shell.azure.com/bash
Selezionare il pulsante Cloud Shell nel menu nell'angolo superiore destro del portale di Azure.Select the Cloud Shell button on the menu in the upper-right corner of the Azure portal. Cloud Shell nel portale

Creare e configurare un'istanza di JenkinsCreate and Configure Jenkins instance

Se si dispone già di un master di Jenkins, iniziare con il modello di soluzione che include il plug-in delle credenziali di Azure richiesto per impostazione predefinita.If you do not already have a Jenkins master, start with the Solution Template, which includes the required Azure Credentials plugin by default.

Il plug-in delle credenziali di Azure consente di archiviare le credenziali dell'entità servizio di Microsoft Azure in Jenkins.The Azure Credential plugin allows you to store Microsoft Azure service principal credentials in Jenkins. Nella versione 1.2 è stato aggiunto il supporto affinché Jenkins Pipeline possa ottenere le credenziali di Azure.In version 1.2, we added the support so that Jenkins Pipeline can get the Azure credentials.

Assicurarsi di disporre della versione 1.2 o versioni successive:Ensure you have version 1.2 or later:

  • Nel dashboard di Jenkins, fare clic su Manage Jenkins -> Plugin Manager -> e cercare Azure Credential.Within the Jenkins dashboard, click Manage Jenkins -> Plugin Manager -> and search for Azure Credential.
  • Se la versione è precedente alla 1.2, aggiornare il plug-in.Update the plugin if the version is earlier than 1.2.

Anche Java JDK e Maven sono necessari nel master di Jenkins.Java JDK and Maven are also required in the Jenkins master. Per l'installazione, accedere al master di Jenkins usando SSH ed eseguire i comandi seguenti:To install, log in to Jenkins master using SSH and run the following commands:

sudo apt-get install -y openjdk-7-jdk
sudo apt-get install -y maven

Aggiungere l'entità servizio di Azure alla credenziale di JenkinsAdd Azure service principal to Jenkins credential

Per eseguire l'interfaccia della riga di comando di Azure è necessaria una credenziale di Azure.An Azure credential is needed to execute Azure CLI.

  • Nel dashboard di Jenkins fare clic su Credentials -> System ->.Within the Jenkins dashboard, click Credentials -> System ->. Fare clic su Global credentials(unrestricted).Click Global credentials(unrestricted).
  • Fare clic su Add Credentials per aggiungere un'entità servizio di Microsoft Azure, immettendo: Subscription ID (ID sottoscrizione), Client ID (ID client), Client Secret (Segreto client) e OAuth 2.0 Token Endpoint (Endpoint di token OAuth 2.0).Click Add Credentials to add a Microsoft Azure service principal by filling out the Subscription ID, Client ID, Client Secret, and OAuth 2.0 Token Endpoint. Indicare un ID per l'uso nel passaggio successivo.Provide an ID for use in subsequent step.

Add Credentials

Creare un servizio app di Azure per la distribuzione dell'app Web di JavaCreate an Azure App Service for deploying the Java web app

Creare un piano di servizio app di Azure con il piano tariffario GRATUITO usando il comando dell'interfaccia della riga di comando az appservice plan create.Create an Azure App Service plan with the FREE pricing tier using the az appservice plan create CLI command. Il piano di servizio app definisce le risorse fisiche usate per ospitare le app.The appservice plan defines the physical resources used to host your apps. Tutte le applicazioni assegnate a un piano di servizio app condividono queste risorse, per poter consentire un risparmio sui costi quando si ospitano più app.All applications assigned to an appservice plan share these resources, allowing you to save cost when hosting multiple apps.

az appservice plan create \
    --name myAppServicePlan \ 
    --resource-group myResourceGroup \
    --sku FREE

Quando il piano è pronto, l'output dell'interfaccia della riga di comando di Azure è simile all'esempio seguente:When the plan is ready, the Azure CLI shows similar output to the following example:

{ 
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "North Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "app",
  "location": "North Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  ...
  < Output has been truncated for readability >
} 

Creare un'app Web di AzureCreate an Azure Web app

Usare il comando dell'interfaccia della riga di comando az webapp create per creare la definizione di un'app Web nel piano di servizio app myAppServicePlan.Use the az webapp create CLI command to create a web app definition in the myAppServicePlan App Service plan. La definizione dell'app Web fornisce un URL con cui accedere all'applicazione e configura diverse opzioni per distribuire il codice in Azure.The web app definition provides a URL to access your application with and configures several options to deploy your code to Azure.

az webapp create \
    --name <app_name> \ 
    --resource-group myResourceGroup \
    --plan myAppServicePlan

Sostituire il segnaposto <app_name> con il nome univoco dell'app.Substitute the <app_name> placeholder with your own unique app name. Questo nome univoco fa parte del nome di dominio predefinito per l'app Web, quindi è necessario che sia univoco rispetto a tutte le app presenti in Azure.This unique name is part of the default domain name for the web app, so the name needs to be unique across all apps in Azure. È possibile eseguire il mapping di una voce di nome di dominio personalizzata all'app Web prima di esporla agli utenti.You can map a custom domain name entry to the web app before you expose it to your users.

Quando la definizione dell'app Web è pronta, l'interfaccia della riga di comando di Azure visualizza informazioni simili all'esempio seguente:When the web app definition is ready, the Azure CLI shows information similar to the following example:

{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app_name>.azurewebsites.net",
  "enabled": true,
   ...
  < Output has been truncated for readability >
}

Configurare JavaConfigure Java

Impostare la configurazione del runtime Java necessaria per l'app con il comando az appservice web config update.Set up the Java runtime configuration that your app needs with the az appservice web config update command.

Il comando seguente configura l'app Web per l'esecuzione in un'istanza recente di Java 8 JDK e in Apache Tomcat 8.0.The following command configures the web app to run on a recent Java 8 JDK and Apache Tomcat 8.0.

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

Preparare un repository GitHubPrepare a GitHub Repository

Aprire il repository Simple Java Web App for Azure.Open the Simple Java Web App for Azure repo. Per creare il fork del repository nel proprio account GitHub, fare clic sul pulsante Fork nell'angolo superiore destro.To fork the repo to your own GitHub account, click the Fork button in the top right-hand corner.

  • Nell'interfaccia utente Web di GitHub, aprire il file Jenkinsfile.In GitHub web UI, open Jenkinsfile file. Fare clic sull'icona della matita per modificare il file per aggiornare il gruppo di risorse e il nome dell'app Web nella riga 20 e 21 rispettivamente.Click the pencil icon to edit this file to update the resource group and name of your web app on line 20 and 21 respectively.
def resourceGroup = '<myResourceGroup>'
def webAppName = '<app_name>'
  • Modificare la riga 23 per aggiornare l'ID delle credenziali nell'istanza di JenkinsChange line 23 to update credential ID in your Jenkins instance
withCredentials([azureServicePrincipal('<mySrvPrincipal>')]) {

Creare una pipeline JenkinsCreate Jenkins pipeline

Aprire Jenkins in un Web browser, fare clic su New Item.Open Jenkins in a web browser, click New Item.

  • Specificare un nome per il processo e selezionare Pipeline.Provide a name for the job and select Pipeline. Fare clic su OK.Click OK.
  • Quindi fare clic sulla scheda Pipeline.Click the Pipeline tab next.
  • Per Definition selezionare Pipeline script from SCM.For Definition, select Pipeline script from SCM.
  • Per SCM selezionare Git.For SCM, select Git.
  • Immettere l'URL di GitHub per il repository con fork: https:<your forked repo>.gitEnter the GitHub URL for your forked repo: https:<your forked repo>.git
  • Fare clic su SaveClick Save

Testare la pipelineTest your pipeline

  • Passare alla pipeline creata e fare clic su Build nowGo to the pipeline you created, click Build Now
  • Una build dovrebbe avere esito positivo in pochi secondi ed è possibile passare alla build e fare clic su Console Output per visualizzare i dettagliA build should succeed in a few seconds, and you can go to the build and click Console Output to see the details

Verificare l'app WebVerify your web app

Per verificare che il file WAR sia stato distribuito correttamente nell'app Web.To verify the WAR file is deployed successfully to your web app. Aprire un Web browser:Open a web browser:

  • Passare a http://<app_name>.azurewebsites.net/api/calculator/pingGo to http://<app_name>.azurewebsites.net/api/calculator/ping
    Verranno visualizzati:You see:

      Welcome to Java Web App!!! This is updated!
      Sun Jun 17 16:39:10 UTC 2017
    
  • Passare a http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> (sostituire <x> e <y> con numeri qualsiasi) per ottenere la somma di x e yGo to http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> (substitute <x> and <y> with any numbers) to get the sum of x and y

Calcolatrice: aggiungi

Distribuire un'app Web di Azure in LinuxDeploy to Azure Web App on Linux

Ora che si è appreso come usare l'interfaccia della riga di comando di Azure nella pipeline di Jenkins, è possibile modificare lo script per la distribuzione di un'app Web di Azure in Linux.Now that you know how to use Azure CLI in your Jenkins pipeline, you can modify the script to deploy to an Azure Web App on Linux.

L'app Web in Linux supporta un modo diverso di esecuzione della distribuzione, che consiste nell'usare Docker.Web App on Linux supports a different way to do the deployment, which is to use Docker. Per la distribuzione è necessario fornire un Dockerfile che include l'app Web in runtime di servizio in un'immagine Docker.To deploy, you need to provide a Dockerfile that packages your web app with service runtime into a Docker image. Il plug-in compilerà l'immagine, la inserirà in un registro Docker e la distribuirà nell'app Web.The plugin will then build the image, push it to a Docker registry and deploy the image to your web app.

  • Seguire i passaggi indicati qui per creare un'app Web di Azure in esecuzione in Linux.Follow the steps here to create an Azure Web App running on Linux.
  • Installare Docker nell'istanza Jenkins seguendo le istruzioni riportate in questo articolo.Install Docker on your Jenkins instance by following the instructions in this article.
  • Creare un registro contenitori nel portale di Azure seguendo i passaggi indicati qui.Create a Container Registry in the Azure portal by using the steps here.
  • Nello stesso repository Simple Java Web App for Azure con fork modificare il file Jenkinsfile2:In the same Simple Java Web App for Azure repo you forked, edit the Jenkinsfile2 file:

    • Riga 18-21, aggiornare rispettivamente i nomi del gruppo di risorse, l'app Web e il record di controllo di accesso.Line 18-21, update to the names of your resource group, web app, and ACR respectively.

      def webAppResourceGroup = '<myResourceGroup>'
      def webAppName = '<app_name>'
      def acrName = '<myRegistry>'
      
    • Riga 24, aggiornare <azsrvprincipal> all'ID delle credenzialiLine 24, update <azsrvprincipal> to your credential ID

      withCredentials([azureServicePrincipal('<mySrvPrincipal>')]) {
      
  • Creare una nuova pipeline Jenkins come per la distribuzione dell'app Web di Azure in Windows; solo questa volta usare invece Jenkinsfile2.Create a new Jenkins pipeline as you did when deploying to Azure web app in Windows, only this time, use Jenkinsfile2 instead.

  • Eseguire il nuovo processo.Run your new job.
  • Per verificare, nell'interfaccia della riga di comando di Azure eseguire:To verify, in Azure CLI, run:

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

    Si ottiene il risultato seguente:You get the following result:

    [
    "calculator"
    ]
    

    Passare a http://<app_name>.azurewebsites.net/api/calculator/ping.Go to http://<app_name>.azurewebsites.net/api/calculator/ping. Viene visualizzato il messaggio:You see the message:

      Welcome to Java Web App!!! This is updated!
      Sun Jul 09 16:39:10 UTC 2017
    

    Passare a http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> (sostituire <x> e <y> con numeri qualsiasi) per ottenere la somma di x e yGo to http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> (substitute <x> and <y> with any numbers) to get the sum of x and y

Passaggi successiviNext steps

In questa esercitazione è stata configurata la pipeline Jenkins che estrae il codice sorgente nel repository GitHub.In this tutorial, you configured a Jenkins pipeline that checks out the source code in GitHub repo. Esegue Maven per compilare un file WAR e quindi usa l'interfaccia della riga di comando di Azure per distribuire nel servizio App di Azure.Runs Maven to build a war file and then uses Azure CLI to deploy to Azure App Service. Si è appreso come:You learned how to:

  • Creare una macchina virtuale JenkinsCreate a Jenkins VM
  • Configurare JenkinsConfigure Jenkins
  • Creare un'app Web in AzureCreate a web app in Azure
  • Preparare un repository GitHubPrepare a GitHub repository
  • Creare una pipeline JenkinsCreate Jenkins pipeline
  • Eseguire la pipeline e verificare l'app WebRun the pipeline and verify the web app