Lernprogramm: Bereitstellen für Azure-App-Dienst mit Jenkins und der Azure CLI

Wichtig

Viele Azure-Dienste verfügen über Jenkins-Plug-Ins. Einige dieser Plug-Ins werden ab dem 29. Februar 2024 nicht mehr unterstützt. Die Azure CLI ist die derzeit empfohlene Methode zur Integration von Jenkins in Azure-Dienste. Weitere Informationen finden Sie im Artikel Jenkins-Plug-Ins für Azure.

Für die Bereitstellung einer Java-Web-App in Azure können Sie die Azure CLI in einer Jenkins-Pipeline nutzen. In diesem Tutorial führen Sie die folgenden Aufgaben aus:

  • eine Jenkins-VM erstellen können
  • Konfigurieren von Jenkins
  • eine Web-App in Azure erstellen
  • ein GitHub-Repository erstellen
  • Erstellen einer Jenkins-Pipeline
  • die Pipeline ausführen und die Web-App überprüfen

Voraussetzungen

  • Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Konfigurieren von Jenkins

In den folgenden Schritten wird gezeigt, wie Sie das erforderliche Java JDK und Maven für den Jenkins-Controller installieren:

  1. Melden Sie sich per SSH beim Jenkins-Controller an.

  2. Führen Sie den Download und die Installation des Azul Zulu-Builds des OpenJDK für Azure über ein „apt-get“-Repository durch:

    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. Führen Sie den folgenden Befehl aus, um Maven zu installieren:

    sudo apt-get install -y maven
    

Hinzufügen des Azure-Dienstprinzipals zu Jenkins-Anmeldeinformationen

In den folgenden Schritten wird gezeigt, wie Sie Ihre Azure-Anmeldeinformationen angeben:

  1. Vergewissern Sie sich, dass das Plug-In für Anmeldeinformationen installiert ist.

  2. Wählen Sie im Jenkins-Dashboard "Anmeldeinformationen -> System"> aus.

  3. Wählen Sie Global credentials (unrestricted) (Globale Anmeldeinformationen (uneingeschränkt)) aus.

  4. Wählen Sie zum Hinzufügen eines Microsoft Azure-Dienstprinzipals die Option Add Credentials (Anmeldeinformationen hinzufügen) aus. Achten Sie darauf, dass als Typ für die Anmeldeinformationen Username with password (Benutzername mit Kennwort) ausgewählt ist, und geben Sie Folgendes ein:

    • Username (Benutzername): Dienstprinzipal appId
    • Kennwort: Dienstprinzipal password
    • ID: Anmeldeinformations-ID (z AzureServicePrincipal. B. )

Erstellen eines Azure App Service für die Bereitstellung der Java-Web-App

Verwenden Sie az appservice plan create, um einen Azure App Service-Plan mit dem Tarif FREE zu erstellen:

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

Die wichtigsten Punkte:

  • Der App Service-Plan definiert die physischen Ressourcen, die zum Hosten Ihrer Apps verwendet werden.
  • Alle einem App Service-Plan zugewiesenen Anwendungen teilen sich diese Ressourcen.
  • App Service-Pläne ermöglichen Kosteneinsparungen beim Hosten mehrerer Apps.

Erstellen einer Azure-Web-App

Verwenden Sie az webapp create, um eine Web-App-Definition im App Service-Plan myAppServicePlan zu erstellen.

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

Die wichtigsten Punkte:

  • 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.
  • Ersetzen Sie den Platzhalter <app_name> durch einen eindeutigen App-Namen.
  • Der App-Name ist Teil des Standarddomänennamens für die Web-App. Daher muss er in Azure für alle Apps eindeutig sein.
  • Sie können der Web-App einen benutzerdefinierten Domänennameneintrag zuordnen, bevor Sie sie für Ihre Benutzer verfügbar machen.

Konfigurieren von Java

Verwenden Sie az appservice web config update, um die Java-Laufzeitkonfiguration für die App einzurichten:

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

ein GitHub-Repository erstellen

  1. Öffnen Sie das Repository Simple Java Web App for Azure (Einfache Java-Web-App für Azure).

  2. Wählen Sie die Schaltfläche Fork (Forken) um das Repository in Ihr eigenes GitHub-Konto zu forken.

  3. Öffnen Sie die Datei Jenkinsfile, indem Sie auf den Dateinamen klicken.

  4. Wählen Sie das Stiftsymbol aus, um die Datei zu bearbeiten.

  5. Aktualisieren Sie die Abonnement- und die Mandanten-ID.

      withEnv(['AZURE_SUBSCRIPTION_ID=<subscription_id>',
            'AZURE_TENANT_ID=<tenant_id>']) 
    
  6. Aktualisieren Sie in den Zeilen 22 und 23 die Ressourcengruppe und den Namen Ihrer Web-App.

    def resourceGroup = '<resource_group>'
    def webAppName = '<app_name>'
    
  7. Aktualisieren Sie die Anmeldeinformationen-ID in Ihrer Jenkins-Instanz.

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

Erstellen einer Jenkins-Pipeline

Gehen Sie zum Erstellen einer Jenkins-Pipeline wie folgt vor:

  1. Öffnen Sie Jenkins in einem Webbrowser.

  2. Wählen Sie Neues Element aus.

  3. Geben Sie einen Namen für den Auftrag ein.

  4. Wählen Sie Pipeline aus.

  5. Klickan Sie auf OK.

  6. Wählen Sie Pipeline aus.

  7. Wählen Sie als Definition die Option Pipeline script from SCM (Pipeline-Skript von SCM) aus.

  8. Wählen Sie als SCM die Option Git aus.

  9. Geben Sie die GitHub-URL für Ihr verzweigtes Repository ein: https:\<forked_repo\>.git.

  10. Wählen Sie Speichern aus.

Testen Ihrer Pipeline

  1. Navigieren Sie zur erstellten Pipeline.

  2. Wählen Sie Build Now (Jetzt erstellen) aus.

  3. Wählen Sie nach Abschluss des Buildvorgangs die Option Console Output (Konsolenausgabe) aus, um die Builddetails anzuzeigen.

Überprüfen Ihrer Web-App

Vergewissern Sie sich, dass die WAR-Datei erfolgreich für Ihre Web-App bereitgestellt wurde:

  1. Navigieren Sie zur folgenden URL: http://&lt;app_name>.azurewebsites.net/api/calculator/ping

  2. Der Text sollte in etwa wie folgt aussehen:

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  3. Navigieren Sie zur folgenden URL (ersetzen <Sie x> und <y> durch zwei zu addierende Werte): http://< app_name.azurewebsites.net/api/calculator/add?x>=<x>&y=<y>.

    Example of running the demo add

Bereitstellen in Azure App Service für Linux

Von App Service können Web-Apps für unterstützte Anwendungsstapel auch nativ unter Linux gehostet werden. Darüber hinaus können benutzerdefinierte Linux-Container ausgeführt werden. (Diese werden auch als Web-App für Container bezeichnet.)

Sie können das Skript ändern, um als Bereitstellungsziel eine Instanz von Azure App Service für Linux zu verwenden. Von App Service für Linux wird Docker unterstützt. Daher stellen Sie eine Dockerfile-Datei bereit, die Ihre Web-App mit Dienstlaufzeit in ein Docker-Image verpackt. Das Plug-In erstellt das Image, übermittelt es per Push an eine Docker-Registrierung und stellt das Image für Ihre Web-App bereit.

  1. Informationen zum Erstellen einer Instanz von Azure App Service für Linux und einer Azure Container Registry-Instanz finden Sie unter Migrieren benutzerdefinierter Software zu Azure App Service mithilfe eines benutzerdefinierten Containers.

        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. Installieren Sie Docker auf Ihrer Jenkins-Instanz.

  3. Vergewissern Sie sich, dass das Docker-Pipeline-Plug-In installiert ist.

  4. Bearbeiten Sie im Repository Simple Java Web App for Azure, das Sie verzweigt haben, die Jenkinsfile2-Datei wie folgt:

    1. Aktualisieren Sie die Abonnement- und die Mandanten-ID.

       withEnv(['AZURE_SUBSCRIPTION_ID=<mySubscriptionId>',
              'AZURE_TENANT_ID=<myTenantId>']) {
      
    2. Aktualisieren Sie die Namen Ihrer Ressourcengruppe, Web-App und ACR-Instanz (ersetzen Sie die Platzhalter durch Ihre Werte).

      def webAppResourceGroup = '<resource_group>'
      def webAppName = '<app_name>'
      def acrName = '<registry>'
      
    3. Aktualisieren Sie <azsrvprincipal\> auf Ihre Anmeldeinformations-ID.

      withCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
      
  5. Erstellen Sie eine neue Jenkins-Pipeline wie bei der Bereitstellung für die Azure-Web-App unter Windows mit Jenkinsfile2.

  6. Führen Sie den neuen Auftrag aus.

  7. Führen Sie zur Überprüfung in der Azure CLI den folgenden Befehl aus:

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

    Die Ergebnisse sollten ähnlich wie hier aussehen:

    [
    "calculator"
    ]
    
  8. Navigieren Sie zu http://<app_name>.azurewebsites.net/api/calculator/ping (Platzhalter ersetzen). Das Ergebnis sollte etwa wie folgt aussehen:

    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). Die Werte, die Sie für x und y angeben, werden summiert und angezeigt.

Nächste Schritte