Lernprogramm: Verwenden von Azure Storage für Buildartefakte
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.
Dieser Artikel zeigt die Verwendung von Blob-Speicher als Repository von Buildartefakten, die durch eine Jenkins Continuous Integration-Lösung (CI) erstellt wurden, oder als eine Quelle von herunterladbaren Dateien, die in einem Buildvorgang verwendet werden. Diese Lösung ist zum Beispiel dann hilfreich, wenn Sie in einer agilen Entwicklungsumgebung (in Java oder anderen Sprachen) programmieren, Builds auf Basis von Continuous Integration ausgeführt werden, und Sie ein Repository für Ihre Buildartefakte benötigen, sodass Sie sie beispielsweise mit anderen Mitgliedern der Organisation oder Ihren Kunden gemeinsam nutzen oder ein Archiv pflegen können. Ein anderes Szenario liegt vor, wenn für Ihren Buildauftrag an sich andere Dateien erforderlich sind, beispielsweise als Teil der Buildeingabe herunterzuladende Abhängigkeiten.
Voraussetzungen
- Azure-Abonnement: Wenn Sie über kein Azure-Abonnement verfügen, können Sie ein kostenloses Azure-Konto erstellen, bevor Sie beginnen.
- Jenkins-Server: Wenn Sie keinen Jenkins-Server installiert haben, erstellen Sie einen Jenkins-Server in Azure.
- Azure CLI: Installieren Sie Azure CLI (Version 2.0.67 oder höher) auf dem Jenkins-Server.
- Azure-Speicherkonto: Wenn Sie noch kein Speicherkonto besitzen, erstellen Sie ein Speicherkonto.
Hinzufügen erforderlicher Azure-Anmeldeinformationen zum Ausführen der Azure CLI
Navigieren Sie zum Jenkins-Portal.
Wählen Sie im Menü die Option Manage Jenkins (Jenkins verwalten) aus.
Wählen Sie Manage Credentials (Anmeldeinformationen verwalten) aus.
Wählen Sie die globale Domäne aus.
Wählen Sie Add Credentials (Anmeldeinformationen hinzufügen) aus.
Füllen Sie die erforderlichen Felder wie folgt aus:
- Art: Wählen Sie "Benutzername mit Kennwort" aus.
- Benutzername: Geben Sie den
appId
Dienstprinzipal an. - Kennwort: Geben Sie den
password
Dienstprinzipal an. - ID: Geben Sie einen Anmeldeinformationsidentifer an, z
azuresp
. B. . - Beschreibung: Fügen Sie optional eine aussagekräftige Beschreibung für Ihre Umgebung ein.
Wählen Sie OK aus, um die Anmeldeinformationen zu erstellen.
Erstellen eines Pipelineauftrags zum Hochladen von Buildartefakten
In den folgenden Schritten wird gezeigt, wie Sie einen Pipelineauftrag erstellen. Durch den Pipelineauftrag werden mehrere Dateien erstellt und unter Verwendung der Azure CLI in Ihr Speicherkonto hochgeladen.
Wählen Sie auf dem Jenkins-Dashboard die Option New Item (Neues Element) aus.
Nennen Sie den Auftrag myjob, wählen Sie Pipeline aus, und wählen Sie anschließend OK aus.
Wählen Sie im Abschnitt Pipeline der Auftragskonfiguration die Option Pipeline script (Pipelineskript) aus, und fügen Sie unter Script (Skript) Folgendes ein. Legen Sie die Platzhalter auf die entsprechenden Werte für Ihre Umgebung fest.
pipeline { agent any environment { AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999' AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999' AZURE_STORAGE_ACCOUNT='myStorageAccount' } stages { stage('Build') { steps { sh 'rm -rf *' sh 'mkdir text' sh 'echo Hello Azure Storage from Jenkins > ./text/hello.txt' sh 'date > ./text/date.txt' } post { success { withCredentials([usernamePassword(credentialsId: 'azuresp', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) { sh ''' echo $container_name # Login to Azure with ServicePrincipal az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID # Set default subscription az account set --subscription $AZURE_SUBSCRIPTION_ID # Execute upload to Azure az storage container create --account-name $AZURE_STORAGE_ACCOUNT --name $JOB_NAME --auth-mode login az storage blob upload-batch --destination ${JOB_NAME} --source ./text --account-name $AZURE_STORAGE_ACCOUNT # Logout from Azure az logout ''' } } } } } }
Wählen Sie Build Now (Jetzt erstellen) aus, um myjob auszuführen.
Prüfen Sie den Status in der Ausgabe der Konsole. Wenn im Rahmen der Postbuildaktion die Buildartefakte hochgeladen werden, werden Statusmeldungen für Azure Storage in die Konsole geschrieben.
Wenn ein Ähnlicher Fehler auftritt, bedeutet dies, dass Sie zugriff auf Containerebene gewähren müssen:
ValidationError: You do not have the required permissions needed to perform this operation.
Wenn Sie diese Fehlermeldung erhalten, lesen Sie die folgenden Artikel, um dies zu beheben:Untersuchen Sie nach erfolgreichem Abschluss des Auftrags die Buildartefakte, indem Sie das öffentliche Blob öffnen:
- Melden Sie sich beim Azure-Portal an.
- Wählen Sie Speicher aus.
- Wählen Sie den Speicherkontonamen aus, den Sie für Jenkins verwendet haben.
- Wählen Sie Container aus.
- Wählen Sie in der Liste mit den Blobs den Container myjob aus.
- Daraufhin sollten die beiden folgenden Dateien angezeigt werden: hello.txt und date.txt.
- Kopieren Sie die URL für eines dieser Elemente, und fügen Sie sie in Ihrem Browser ein.
- Sie sehen die Textdatei, die als Buildartefakt hochgeladen wurde.
Die wichtigsten Punkte:
- Containernamen und Blob-Namen bestehen im Azure-Speicher aus Kleinbuchstaben (es wird zwischen Groß- und Kleinschreibung unterschieden).
Erstellen eines Pipelineauftrags zum Herunterladen aus Azure Blob Storage
In den folgenden Schritten wird gezeigt, wie Sie einen Pipelineauftrag zum Herunterladen von Elementen aus Azure Blob Storage konfigurieren.
Wählen Sie im Abschnitt Pipeline der Auftragskonfiguration die Option Pipeline script (Pipelineskript) aus, und fügen Sie unter Script (Skript) Folgendes ein. Legen Sie die Platzhalter auf die entsprechenden Werte für Ihre Umgebung fest.
pipeline { agent any environment { AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999' AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999' AZURE_STORAGE_ACCOUNT='myStorageAccount' } stages { stage('Build') { steps { withCredentials([usernamePassword(credentialsId: 'azuresp', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) { sh ''' # Login to Azure with ServicePrincipal az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID # Set default subscription az account set --subscription $AZURE_SUBSCRIPTION_ID # Execute upload to Azure az storage blob download --account-name $AZURE_STORAGE_ACCOUNT --container-name myjob --name hello.txt --file ${WORKSPACE}/hello.txt --auth-mode login # Logout from Azure az logout ''' } } } } }
Überprüfen Sie nach dem Ausführen eines Buildvorgangs die Konsolenausgabe zum Buildverlauf. Alternativ können Sie sich auch Ihren Downloadspeicherort ansehen, um zu ermitteln, ob die erwarteten Blobs erfolgreich heruntergeladen wurden.