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

Hinzufügen erforderlicher Azure-Anmeldeinformationen zum Ausführen der Azure CLI

  1. Navigieren Sie zum Jenkins-Portal.

  2. Wählen Sie im Menü die Option Manage Jenkins (Jenkins verwalten) aus.

  3. Wählen Sie Manage Credentials (Anmeldeinformationen verwalten) aus.

  4. Wählen Sie die globale Domäne aus.

  5. Wählen Sie Add Credentials (Anmeldeinformationen hinzufügen) aus.

  6. 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.
  7. 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.

  1. Wählen Sie auf dem Jenkins-Dashboard die Option New Item (Neues Element) aus.

  2. Nennen Sie den Auftrag myjob, wählen Sie Pipeline aus, und wählen Sie anschließend OK aus.

  3. 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
                '''
              }
            }
          }
        }
      }
    }
    
  4. Wählen Sie Build Now (Jetzt erstellen) aus, um myjob auszuführen.

  5. 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.

  6. 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:

  7. Untersuchen Sie nach erfolgreichem Abschluss des Auftrags die Buildartefakte, indem Sie das öffentliche Blob öffnen:

    1. Melden Sie sich beim Azure-Portal an.
    2. Wählen Sie Speicher aus.
    3. Wählen Sie den Speicherkontonamen aus, den Sie für Jenkins verwendet haben.
    4. Wählen Sie Container aus.
    5. Wählen Sie in der Liste mit den Blobs den Container myjob aus.
    6. Daraufhin sollten die beiden folgenden Dateien angezeigt werden: hello.txt und date.txt.
    7. Kopieren Sie die URL für eines dieser Elemente, und fügen Sie sie in Ihrem Browser ein.
    8. 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.

  1. 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
              '''   
            }
          }
        }
      }
    }
    
  2. Ü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.

Nächste Schritte