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.
- Jenkins - Installieren von Jenkins auf einer Linux-VM
- Azure CLI: Installieren Sie Azure CLI (Version 2.0.67 oder höher) auf dem Jenkins-Server.
Konfigurieren von Jenkins
In den folgenden Schritten wird gezeigt, wie Sie das erforderliche Java JDK und Maven für den Jenkins-Controller installieren:
Melden Sie sich per SSH beim Jenkins-Controller an.
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
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:
Vergewissern Sie sich, dass das Plug-In für Anmeldeinformationen installiert ist.
Wählen Sie im Jenkins-Dashboard "Anmeldeinformationen -> System"> aus.
Wählen Sie Global credentials (unrestricted) (Globale Anmeldeinformationen (uneingeschränkt)) aus.
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. )
- Username (Benutzername): Dienstprinzipal
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
Öffnen Sie das Repository Simple Java Web App for Azure (Einfache Java-Web-App für Azure).
Wählen Sie die Schaltfläche Fork (Forken) um das Repository in Ihr eigenes GitHub-Konto zu forken.
Öffnen Sie die Datei Jenkinsfile, indem Sie auf den Dateinamen klicken.
Wählen Sie das Stiftsymbol aus, um die Datei zu bearbeiten.
Aktualisieren Sie die Abonnement- und die Mandanten-ID.
withEnv(['AZURE_SUBSCRIPTION_ID=<subscription_id>', 'AZURE_TENANT_ID=<tenant_id>'])
Aktualisieren Sie in den Zeilen 22 und 23 die Ressourcengruppe und den Namen Ihrer Web-App.
def resourceGroup = '<resource_group>' def webAppName = '<app_name>'
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:
Öffnen Sie Jenkins in einem Webbrowser.
Wählen Sie Neues Element aus.
Geben Sie einen Namen für den Auftrag ein.
Wählen Sie Pipeline aus.
Klickan Sie auf OK.
Wählen Sie Pipeline aus.
Wählen Sie als Definition die Option Pipeline script from SCM (Pipeline-Skript von SCM) aus.
Wählen Sie als SCM die Option Git aus.
Geben Sie die GitHub-URL für Ihr verzweigtes Repository ein:
https:\<forked_repo\>.git
.Wählen Sie Speichern aus.
Testen Ihrer Pipeline
Navigieren Sie zur erstellten Pipeline.
Wählen Sie Build Now (Jetzt erstellen) aus.
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:
Navigieren Sie zur folgenden URL:
http://<app_name>.azurewebsites.net/api/calculator/ping
Der Text sollte in etwa wie folgt aussehen:
Welcome to Java Web App!!! This is updated! Today's date
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>.
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.
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
Vergewissern Sie sich, dass das Docker-Pipeline-Plug-In installiert ist.
Bearbeiten Sie im Repository Simple Java Web App for Azure, das Sie verzweigt haben, die Jenkinsfile2-Datei wie folgt:
Aktualisieren Sie die Abonnement- und die Mandanten-ID.
withEnv(['AZURE_SUBSCRIPTION_ID=<mySubscriptionId>', 'AZURE_TENANT_ID=<myTenantId>']) {
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>'
Aktualisieren Sie
<azsrvprincipal\>
auf Ihre Anmeldeinformations-ID.withCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
Erstellen Sie eine neue Jenkins-Pipeline wie bei der Bereitstellung für die Azure-Web-App unter Windows mit
Jenkinsfile2
.Führen Sie den neuen Auftrag aus.
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" ]
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
Navigieren Sie zu
http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y>
(Platzhalter ersetzen). Die Werte, die Sie fürx
undy
angeben, werden summiert und angezeigt.