Tutorial: Bereitstellen an Azure App Service mit Jenkins und der Azure CLITutorial: Deploy to Azure App Service with Jenkins and the Azure CLI

Für die Bereitstellung einer Java-Web-App in Azure können Sie die Azure CLI in einer Jenkins-Pipeline nutzen.To deploy a Java web app to Azure, you can use Azure CLI in a Jenkins Pipeline. In diesem Tutorial führen Sie die folgenden Aufgaben aus:In this tutorial, you do the following tasks:

  • eine Jenkins-VM erstellen könnenCreate a Jenkins VM
  • Konfigurieren von JenkinsConfigure Jenkins
  • eine Web-App in Azure erstellenCreate a web app in Azure
  • ein GitHub-Repository erstellenPrepare a GitHub repository
  • Erstellen einer Jenkins-PipelineCreate Jenkins pipeline
  • die Pipeline ausführen und die Web-App überprüfenRun the pipeline and verify the web app

Erstellen und Konfigurieren einer Jenkins-InstanzCreate and configure Jenkins instance

Wenn Sie noch nicht über einen Jenkins-Master verfügen, können Sie die Jenkins-Lösungsvorlage für die Installation verwenden.If you do not already have a Jenkins master, install with the Jenkins solution template. Standardmäßig wird mit der Vorlage das erforderliche Plug-In für die Azure-Anmeldeinformationen installiert.By default, the template installs the required Azure Credentials plug-in.

Das Azure-Anmeldeinformationen-Plug-In ermöglicht Ihnen das Speichern von Anmeldeinformationen des Microsoft Azure-Dienstprinzipals in Jenkins.The Azure Credential plug-in allows you to store Microsoft Azure service principal credentials in Jenkins. In Version 1.2 haben wir Support hinzugefügt, durch den die Jenkins-Pipeline die Azure-Anmeldeinformationen abrufen kann.In version 1.2, we added the support so that Jenkins Pipeline can get the Azure credentials.

Stellen Sie sicher, dass Sie über Version 1.2 oder höher verfügen:Ensure you have version 1.2 or later:

  • Klicken Sie im Jenkins-Dashboard auf Manage Jenkins -> Plugin Manager -> (Jenkins verwalten -> Plug-In-Manager ->), und suchen Sie nach Azure-Anmeldeinformationen.Within the Jenkins dashboard, click Manage Jenkins -> Plugin Manager -> and search for Azure Credential.
  • Aktualisieren Sie das Plug-In, wenn die Version älter als 1.2 ist.Update the plug-in if the version is earlier than 1.2.

Java JDK und Maven werden auch im Jenkins-Master benötigt.Java JDK and Maven are also required in the Jenkins master. Melden Sie sich zum Installieren mithilfe von SSH beim Jenkins-Master an, und führen Sie die folgenden Befehle aus:To install, sign 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

Hinzufügen des Azure-Dienstprinzipals zu Jenkins-AnmeldeinformationenAdd Azure service principal to a Jenkins credential

Eine Azure-Anmeldeinformation ist erforderlich, um die Azure CLI auszuführen.An Azure credential is needed to execute Azure CLI.

  • Klicken Sie im Jenkins-Dashboard auf Credentials -> System -> (Anmeldeinformationen -> System ->).Within the Jenkins dashboard, click Credentials -> System ->. Klicken Sie auf Global credentials (unrestricted) (Globale Anmeldeinformationen (uneingeschränkt)).Click Global credentials(unrestricted).
  • Klicken Sie auf Add Credentials (Anmeldeinformationen hinzufügen), um einen Microsoft Azure-Dienstprinzipal hinzuzufügen, indem Sie die Abonnement-ID, die Client-ID, den geheimen Clientschlüssel und den OAuth 2.0-Token-Endpunkt hinzufügen.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. Stellen Sie eine ID zur Verwendung im nächsten Schritt bereit.Provide an ID for use in subsequent step.

Hinzufügen von Anmeldeinformationen

Erstellen eines Azure App Service für die Bereitstellung der Java-Web-AppCreate an Azure App Service for deploying the Java web app

Erstellen Sie mit dem CLI-Befehl az appservice plan create einen Azure App Service-Plan mit dem Tarif FREE.Create an Azure App Service plan with the FREE pricing tier using the az appservice plan create CLI command. Der App Service-Plan definiert die physischen Ressourcen, die zum Hosten Ihrer Apps verwendet werden.The appservice plan defines the physical resources used to host your apps. Alle einem App Service-Plan zugewiesenen Anwendungen teilen sich diese Ressourcen. Das spart Kosten, wenn Sie mehrere Apps hosten.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

Wenn der Plan fertig ist, zeigt die Azure CLI eine ähnliche Ausgabe wie im folgenden Beispiel: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 >
} 

Erstellen einer Azure-Web-AppCreate an Azure web app

Erstellen Sie mit dem CLI-Befehl az webapp create eine Web-App-Definition im App Service-Plan myAppServicePlan.Use the az webapp create CLI command to create a web app definition in the myAppServicePlan App Service plan. Die Web-App-Definition enthält eine URL für den Zugriff auf Ihre Anwendung und konfiguriert verschiedene Optionen zum Bereitstellen Ihres Codes 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

Ersetzen Sie den Platzhalter <app_name> durch Ihren eigenen eindeutigen App-Namen.Substitute the <app_name> placeholder with your own unique app name. Dieser eindeutige Name ist Teil des Standarddomänennamens für die Web-App. Daher muss er für alle Apps in Azure eindeutig sein.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. Sie können der Web-App einen benutzerdefinierten Domänennameneintrag zuordnen, bevor Sie sie für Ihre Benutzer verfügbar machen.You can map a custom domain name entry to the web app before you expose it to your users.

Wenn die Web-App-Definition fertig ist, zeigt die Azure CLI Informationen wie im folgenden Beispiel an: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 >
}

Konfigurieren von JavaConfigure Java

Richten Sie mit dem Befehl az appservice web config update die für Ihre App erforderliche Java-Laufzeitkonfiguration ein.Set up the Java runtime configuration that your app needs with the az appservice web config update command.

Der folgende Befehl konfiguriert die Web-App für die Ausführung mit einer aktuellen Java 8 JDK-Version und 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

ein GitHub-Repository erstellenPrepare a GitHub repository

  1. Öffnen Sie das Repository Simple Java Web App for Azure (Einfache Java-Web-App für Azure).Open the Simple Java Web App for Azure repo. Klicken Sie auf die Schaltfläche Fork (Verzweigen) in der rechten oberen Ecke, um das Repository in Ihr GitHub-Konto zu verzweigen.To fork the repo to your own GitHub account, click the Fork button in the top right-hand corner.

  2. Öffnen Sie in der GitHub-Webbenutzeroberfläche die Jenkinsfile-Datei.In GitHub web UI, open Jenkinsfile file. Klicken Sie auf das Stiftsymbol, um diese Datei zu bearbeiten und die Ressourcengruppe und den Namen Ihrer Web-App in Zeile 20 bzw. 21 zu aktualisieren.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>'
    
  3. Ändern Sie Zeile 23, um die Anmeldeinformationen-ID in Ihrer Jenkins-Instanz zu aktualisieren.Change line 23 to update credential ID in your Jenkins instance

    withCredentials([azureServicePrincipal('<mySrvPrincipal>')]) {
    

Erstellen einer Jenkins-PipelineCreate Jenkins pipeline

Öffnen Sie Jenkins in einem Webbrowser, und klicken Sie auf New Item (Neues Element).Open Jenkins in a web browser, click New Item.

  1. Geben Sie einen Namen für den Auftrag ein.Enter a name for the job.
  2. Wählen Sie Pipeline aus.Select Pipeline.
  3. Klicken Sie auf OK.Select OK.
  4. Wählen Sie Pipeline aus.Select Pipeline.
  5. Wählen Sie als Definition die Option Pipeline script from SCM (Pipeline-Skript von SCM) aus.For Definition, select Pipeline script from SCM.
  6. Wählen Sie als SCM die Option Git aus.For SCM, select Git.
  7. Geben Sie die GitHub-URL für Ihr verzweigtes Repository ein: https:\<your forked repo\>.git.Enter the GitHub URL for your forked repo: https:\<your forked repo\>.git
  8. Wählen Sie Speichern aus.Select Save

Testen Ihrer PipelineTest your pipeline

  1. Navigieren Sie zur erstellten Pipeline.Go to the pipeline you created
  2. Klicken Sie auf Build now (Jetzt erstellen).Click Build Now
  3. Wählen Sie nach Abschluss des Buildvorgangs die Option Console Output (Konsolenausgabe) aus, um die Builddetails anzuzeigen.After the build completes, select Console Output to see build details.

Überprüfen Ihrer Web-AppVerify your web app

Gehen Sie wie unten angegeben vor, um zu überprüfen, ob die Bereitstellung der WAR-Datei für Ihre Web-App erfolgreich war.Do the following to verify the WAR file is deployed successfully to your web app.

  1. öffnen Sie einen Webbrowser:Open a web browser:

  2. Navigieren Sie zu http://&lt;app_name>.azurewebsites.net/api/calculator/ping.Browse to http://&lt;app_name>.azurewebsites.net/api/calculator/ping

  3. Der Text sollte in etwa wie folgt aussehen:You should see text similar to the following:

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  4. Gehen Sie zu http://<App_Name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> (ersetzen Sie <x> und <y> durch beliebige Zahlen), um die Summe aus x und y zu erhalten.Go 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

    Rechner: Addieren

Bereitstellen an Azure-Web-App unter LinuxDeploy to Azure Web App on Linux

Wenn Sie die Nutzung der Azure CLI in Ihrer Jenkins-Pipeline eingerichtet haben, können Sie das Skript zur Bereitstellung für eine Azure-Web-App unter Linux ändern.Once you use Azure CLI in your Jenkins pipeline, modify the script to deploy to an Azure Web App on Linux. Für Web-Apps unter Linux wird Docker unterstützt.Web Apps on Linux supports Docker. Daher stellen Sie eine Dockerfile-Datei bereit, die Ihre Web-App mit Dienstlaufzeit in ein Docker-Image verpackt.As such, you provide a Dockerfile that packages your web app with service runtime into a Docker image. Das Plug-In erstellt das Image, übermittelt es per Push an eine Docker-Registrierung und stellt das Image für Ihre Web-App bereit.The plug-in builds the image, pushes it to a Docker registry, and deploys the image to your web app.

  1. Erstellen Sie eine Azure-Web-App, die unter Linux ausgeführt wird.Create an Azure Web App running on Linux.

  2. Installieren Sie Docker auf Ihrer Jenkins-Instanz.Install Docker on your Jenkins.

  3. Erstellen Sie eine Containerregistrierung im Azure-Portal.Create a Container Registry in the Azure portal.

  4. Bearbeiten Sie im Repository Simple Java Web App for Azure, das Sie verzweigt haben, die Jenkinsfile2-Datei wie folgt:In the same Simple Java Web App for Azure repo you forked, edit the Jenkinsfile2 file as follows:

    1. Aktualisieren Sie die Namen Ihrer Ressourcengruppe, Web-App und ACR-Instanz (ersetzen Sie die Platzhalter durch Ihre Werte).Update to the names of your resource group, web app, and ACR (replacing the placeholders with your values).

      def webAppResourceGroup = '<myResourceGroup>'
      def webAppName = '<app_name>'
      def acrName = '<myRegistry>'
      
    2. Aktualisieren Sie <azsrvprincipal\> auf Ihre Anmeldeinformations-ID.Update <azsrvprincipal\> to your credential ID

      withCredentials([azureServicePrincipal('<mySrvPrincipal>')]) {
      
  5. Erstellen Sie eine neue Jenkins-Pipeline wie bei der Bereitstellung für die Azure-Web-App unter Windows mit Jenkinsfile2.Create a new Jenkins pipeline as you did when deploying to Azure web app in Windows using Jenkinsfile2.

  6. Führen Sie den neuen Auftrag aus.Run your new job.

  7. Führen Sie zur Überprüfung in der Azure CLI den folgenden Befehl aus:To verify, in Azure CLI, run the following command:

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

    Die Ergebnisse sollten ähnlich wie hier aussehen:You should see results similar to the following:

    [
    "calculator"
    ]
    
  8. Navigieren Sie zu http://<app_name>.azurewebsites.net/api/calculator/ping (Platzhalter ersetzen).Browse to http://<app_name>.azurewebsites.net/api/calculator/ping (replacing the placeholder). Das Ergebnis sollte etwa wie folgt aussehen:You should see similar results to the following:

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  9. Navigieren Sie zu http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> (Platzhalter ersetzen).Browse to http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> (replacing the placeholders). Die Werte, die Sie für x und y angeben, werden summiert und angezeigt.The values you specify for x and y are summed and displayed.

Nächste SchritteNext steps