Tutorial: Bereitstellen eines virtuellen Linux-Computers mit Jenkins und Azure DevOps ServicesTutorial: Deploy to Linux virtual machine using Jenkins and Azure DevOps Services

Continuous Integration (CI) und Continuous Deployment (CD) bilden eine Pipeline, über die Sie Ihren Code erstellen, freigeben und bereitstellen können.Continuous integration (CI) and continuous deployment (CD) form a pipeline by which you can build, release, and deploy your code. Azure DevOps Services umfasst eine vollständige Gruppe von CI/CD-Automatisierungstools mit vollem Funktionsumfang für die Bereitstellung in Azure.Azure DevOps Services provides a complete, fully featured set of CI/CD automation tools for deployment to Azure. Jenkins ist ein gängiges serverbasiertes CI/CD-Drittanbietertool, das auch CI/CD-Automatisierung beinhaltet.Jenkins is a popular third-party CI/CD server-based tool that also provides CI/CD automation. Sie können Azure DevOps Services und Jenkins zusammen verwenden und so die Bereitstellung Ihrer Cloud-Apps oder Clouddienste anpassen.You can use Azure DevOps Services and Jenkins together to customize how you deliver your cloud app or service.

In diesem Tutorial erstellen Sie mithilfe von Jenkins eine Node.js-Web-App.In this tutorial, you use Jenkins to build a Node.js web app. Anschließend stellen Sie diese mit Azure DevOpsYou then use Azure DevOps to deploy it

für eine Bereitstellungsgruppe bereit, die virtuelle Linux-Computer (VMs) enthält.to a deployment group that contains Linux virtual machines (VMs). Folgendes wird vermittelt:You learn how to:

  • Abrufen der Beispiel-AppGet the sample app.
  • Konfigurieren von Jenkins-Plug-InsConfigure Jenkins plug-ins.
  • Konfigurieren eines Jenkins Freestyle-Projekts für Node.jsConfigure a Jenkins Freestyle project for Node.js.
  • Konfigurieren von Jenkins für die Azure DevOps Services-IntegrationConfigure Jenkins for Azure DevOps Services integration.
  • Erstellen eines Jenkins-DienstendpunktsCreate a Jenkins service endpoint.
  • Erstellen einer Bereitstellungsgruppe für die virtuellen Azure-ComputerCreate a deployment group for the Azure virtual machines.
  • Erstellen einer Azure Pipelines-Releasepipeline.Create an Azure Pipelines release pipeline.
  • Ausführen manueller und durch CI ausgelöster BereitstellungenExecute manual and CI-triggered deployments.

VoraussetzungenBefore you begin

Abrufen der Beispiel-AppGet the sample app

Für die Bereitstellung benötigen Sie eine in einem Git-Repository gespeicherte App.You need an app to deploy, stored in a Git repository. Für dieses Tutorial empfiehlt sich diese über GitHub verfügbare Beispiel-App.For this tutorial, we recommend that you use this sample app available from GitHub. Dieses Tutorial enthält ein Beispielskript, das verwendet wird, um Node.js und eine Anwendung zu installieren.This tutorial contains a sample script that's used for installing Node.js and an application. Wenn Sie Ihr eigenes Repository verwenden möchten, sollten Sie ein ähnliches Beispiel konfigurieren.If you want to work with your own repository, you should configure a similar sample.

Erstellen Sie einen Fork dieser App, und notieren Sie den Speicherort (URL) zur Verwendung in nachfolgenden Schritten in diesem Tutorial.Create a fork of this app and take note of the location (URL) for use in later steps of this tutorial. Weitere Informationen finden Sie unter Fork a repo (Forken eines Repositorys).For more information, see Fork a repo.

Hinweis

Die App wurde über Yeoman erstellt.The app was built through Yeoman. Sie verwendet Express, Bower und Grunt.It uses Express, bower, and grunt. Darüber hinaus verfügt sie über einige npm-Pakete als Abhängigkeiten.And it has some npm packages as dependencies. Die Beispiel-App enthält zudem ein Skript, über das Nginx eingerichtet und die App bereitgestellt wird.The sample also contains a script that sets up Nginx and deploys the app. Es wird auf den virtuellen Computern ausgeführt.It is executed on the virtual machines. Das Skript führt folgende Aktionen aus:Specifically, the script:

  1. Es installiert Node, Nginx und PM2.Installs Node, Nginx, and PM2.
  2. Es konfiguriert Nginx und PM2.Configures Nginx and PM2.
  3. Es startet die Node-App.Starts the Node app.

Konfigurieren von Jenkins-Plug-InsConfigure Jenkins plug-ins

Als Erstes müssen zwei Jenkins-Plug-Ins konfiguriert werden: NodeJS und VS Team Services Continuous Deployment.First, you must configure two Jenkins plug-ins: NodeJS and VS Team Services Continuous Deployment.

  1. Öffnen Sie Ihr Jenkins-Konto, und klicken Sie auf Manage Jenkins (Jenkins verwalten) aus.Open your Jenkins account and select Manage Jenkins.
  2. Klicken Sie auf der Seite Manage Jenkins (Jenkins verwalten) auf Manage Plugins (Plug-Ins verwalten).On the Manage Jenkins page, select Manage Plugins.
  3. Filtern Sie die Liste, um das Plug-In NodeJS zu finden, und klicken Sie anschließend auf Install without restart (Ohne Neustart installieren).Filter the list to locate the NodeJS plug-in, and select the Install without restart option. Hinzufügen des NodeJS-Plug-Ins zu JenkinsAdding the NodeJS plugin to Jenkins
  4. Filtern Sie die Liste, um das Plug-In VS Team Services Continuous Deployment zu finden, und klicken Sie anschließend auf Install without restart (Ohne Neustart installieren).Filter the list to find the VS Team Services Continuous Deployment plug-in and select the Install without restart option.
  5. Navigieren Sie wieder zum Jenkins-Dashboard, und klicken Sie auf Manage Jenkins (Jenkins verwalten).Go back to the Jenkins dashboard and select Manage Jenkins.
  6. Klicken Sie auf Global Tool Configuration (Globale Toolkonfiguration).Select Global Tool Configuration. Suchen Sie nach NodeJS, und klicken Sie auf NodeJS installations (NodeJS-Installationen).Find NodeJS and select NodeJS installations.
  7. Klicken Sie auf Install automatically (Automatisch installieren), und geben Sie einen Wert für Name ein.Select the Install automatically option, and then enter a Name value.
  8. Wählen Sie Speichern aus.Select Save.

Konfigurieren eines Jenkins Freestyle-Projekts für Node.jsConfigure a Jenkins Freestyle project for Node.js

  1. Wählen Sie Neues Element aus.Select New Item. Geben Sie einen Elementnamen ein.Enter an item name.
  2. Klicken Sie auf Freestyle Project (Freestyle-Projekt).Select Freestyle project. Klicken Sie auf OK.Select OK.
  3. Wählen Sie auf der Registerkarte Source Code Management (Quellcodeverwaltung) die Option Git aus, und geben Sie die Repositorydetails sowie den Branch mit Ihrem App-Code ein.On the Source Code Management tab, select Git and enter the details of the repository and the branch that contain your app code.
    Hinzufügen eines Repositorys zum BuildAdd a repo to your build
  4. Wählen Sie auf der Registerkarte Build Triggers (Buildtrigger) die Option Poll SCM (SCM abrufen) aus, und geben Sie den Zeitplan H/03 * * * * ein, um alle drei Minuten Änderungen im Git-Repository abzurufen.On the Build Triggers tab, select Poll SCM and enter the schedule H/03 * * * * to poll the Git repository for changes every three minutes.
  5. Wählen Sie auf der Registerkarte Build Environment (Buildumgebung) die Option Provide Node & npm bin/folder PATH (Knoten angeben & npm bin/PATH-Ordner) und dann den Wert für NodeJS Installation (NodeJS-Installation) aus.On the Build Environment tab, select Provide Node & npm bin/ folder PATH and select the NodeJS Installation value. Behalten Sie für npmrc file (NPMRC-Datei) die Einstellung use system default (Systemstandard verwenden) bei.Leave npmrc file set to use system default.
  6. Wählen Sie auf der Registerkarte Build die Option Execute shell (Shell ausführen) aus, und geben Sie den Befehl npm install ein, um sicherzustellen, dass alle Abhängigkeiten aktualisiert werden.On the Build tab, select Execute shell and enter the command npm install to ensure that all dependencies are updated.

Konfigurieren von Jenkins für die Azure DevOps Services-IntegrationConfigure Jenkins for Azure DevOps Services integration

Hinweis

Stellen sie sicher, dass das für die folgenden Schritte verwendete persönliche Zugriffstoken (Personal Access Token, PAT) die Berechtigung Release (Lesen, Schreiben, Ausführen und Verwalten) in Azure DevOps Services enthält.Ensure that the personal access token (PAT) you use for the following steps contains the Release (read, write, execute and manage) permission in Azure DevOps Services.

  1. Erstellen Sie ein persönliches Zugriffstoken in Ihrer Azure DevOps Services-Organisation, wenn Sie noch keines besitzen.Create a PAT in your Azure DevOps Services organization if you don't already have one. In Jenkins sind diese Informationen für den Zugriff auf Ihre Azure DevOps Services-Organisation erforderlich.Jenkins requires this information to access your Azure DevOps Services organization. Speichern Sie die Tokeninformationen für die folgenden Schritte in diesem Abschnitt.Be sure to store the token information for upcoming steps in this section.

    Informationen zum Generieren eines Tokens finden Sie unter Authentifizieren Zugriffs mit persönlichen Zugriffstoken für Azure DevOps Services.To learn how to generate a token, read How do I create a personal access token for Azure DevOps Services?.

  2. Klicken Sie auf der Registerkarte Post-build Actions (Postbuildaktionen) auf Add post-build action (Postbuildaktion hinzufügen).In the Post-build Actions tab, select Add post-build action. Klicken Sie auf Archive the artifacts (Artefakte archivieren).Select Archive the artifacts.

  3. Geben Sie für Files to archive (Dateien zur Archivierung) den Wert **/* ein, um alle Dateien einzuschließen.For Files to archive, enter **/* to include all files.

  4. Klicken Sie zum Erstellen einer weiteren Aktion auf Add post-build action (Postbuildaktion hinzufügen).To create another action, select Add post-build action.

  5. Klicken Sie auf Trigger release in TFS/Team Services (Release in TFS/Team Services auslösen).Select Trigger release in TFS/Team Services. Geben Sie den URI für Ihre Azure DevOps Services-Organisation ein wie z.B. https://{your-organization-name}.visualstudio.com.Enter the URI for your Azure DevOps Services organization, such as https://{your-organization-name}.visualstudio.com.

  6. Geben Sie den Projektnamen ein.Enter the Project name.

  7. Wählen Sie einen Namen für die Releasepipeline aus.Choose a name for the release pipeline. (Sie können diese Releasepipeline später in Azure DevOps Services erstellen.)(You create this release pipeline later in Azure DevOps Services.)

  8. Wählen Sie die Anmeldeinformationen für die Verbindung mit Ihrer Azure DevOps Services- oder Azure DevOps Server-Umgebung aus:Choose credentials to connect to your Azure DevOps Services or Azure DevOps Server environment:

    • Lassen Sie bei Verwendung von Azure DevOps Services das Feld Benutzername leer.Leave Username blank if you are using Azure DevOps Services.
    • Geben Sie bei Verwendung einer lokalen Version von Azure DevOps Server einen Benutzernamen und ein Kennwort ein.Enter a username and password if you are using an on-premises version of Azure DevOps Server.
      Konfigurieren von Jenkins-Postbuildaktionen
  9. Speichern Sie das Jenkins-Projekt.Save the Jenkins project.

Erstellen eines Jenkins-DienstendpunktsCreate a Jenkins service endpoint

Über einen Dienstendpunkt kann eine Verbindung zwischen Azure DevOps Services und Jenkins hergestellt werden.A service endpoint allows Azure DevOps Services to connect to Jenkins.

  1. Öffnen Sie in Azure DevOps Services die Seite Dienste, öffnen Sie die Liste Neuer Dienstendpunkt, und wählen Sie Jenkins aus.Open the Services page in Azure DevOps Services, open the New Service Endpoint list, and select Jenkins. Hinzufügen eines Jenkins-EndpunktsAdd a Jenkins endpoint
  2. Geben Sie einen Namen für die Verbindung ein.Enter a name for the connection.
  3. Geben Sie die URL Ihres Jenkins-Servers ein, und klicken Sie auf die Option Nicht vertrauenswürdige SSL-Zertifikate annehmen.Enter the URL of your Jenkins server, and select the Accept untrusted SSL certificates option. Beispiel-URL: http://{Ihre Jenkins-URL}.westcentralus.cloudapp.azure.comAn example URL is http://{YourJenkinsURL}.westcentralus.cloudapp.azure.com.
  4. Geben Sie den Benutzernamen und das Kennwort für Ihr Jenkins-Konto ein.Enter the username and password for your Jenkins account.
  5. Klicken Sie auf Verbindung überprüfen, um zu überprüfen, ob die Informationen korrekt sind.Select Verify connection to check that the information is correct.
  6. Klicken Sie auf OK, um den Dienstendpunkt zu erstellen.Select OK to create the service endpoint.

Erstellen einer Bereitstellungsgruppe für virtuelle Azure-ComputerCreate a deployment group for Azure virtual machines

Sie benötigen eine Bereitstellungsgruppe für die Registrierung des Azure DevOps Services-Agents, damit die Releasepipeline auf dem virtuellen Computer bereitgestellt werden kann.You need a deployment group to register the Azure DevOps Services agent so the release pipeline can be deployed to your virtual machine. Mit Bereitstellungsgruppen können Sie komfortabel logische Gruppen von Zielcomputern für die Bereitstellung definieren und den erforderlichen Agent auf den einzelnen Computern installieren.Deployment groups make it easy to define logical groups of target machines for deployment, and to install the required agent on each machine.

Hinweis

Achten Sie bei der folgenden Prozedur darauf, die erforderlichen Komponenten zu installieren und das Skript nicht mit sudo-Berechtigungen auszuführen.In the following procedure, be sure to install the prerequisites and don't run the script with sudo privileges.

  1. Öffnen Sie die Registerkarte Releases des Hubs Build & Release, und klicken Sie auf der Registerkarte Bereitstellungsgruppen auf + Neu.Open the Releases tab of the Build & Release hub, open Deployment groups, and select + New.
  2. Geben Sie einen Namen und eine optionale Beschreibung für die Bereitstellungsgruppe ein.Enter a name for the deployment group, and an optional description. Klicken Sie anschließend auf Erstellen.Then select Create.
  3. Wählen Sie das Betriebssystem für den virtuellen Zielcomputer der Bereitstellung aus.Choose the operating system for your deployment target virtual machine. Wählen Sie also beispielsweise Ubuntu 16.04+ aus.For example, select Ubuntu 16.04+.
  4. Klicken Sie auf Verwenden Sie für die Authentifizierung ein persönliches Zugriffstoken im Skript.Select Use a personal access token in the script for authentication.
  5. Wählen Sie den Link Systemvoraussetzungen aus.Select the System prerequisites link. Installieren Sie die erforderlichen Komponenten für Ihr Betriebssystem.Install the prerequisites for your operating system.
  6. Klicken Sie auf Skript in die Zwischenablage kopieren, um das Skript zu kopieren.Select Copy script to clipboard to copy the script.
  7. Melden Sie sich bei dem virtuellen Zielcomputer der Bereitstellung an, und führen Sie das Skript aus.Log in to your deployment target virtual machine and run the script. Führen Sie das Skript nicht mit sudo-Berechtigungen aus.Don't run the script with sudo privileges.
  8. Nach der Installation werden Sie aufgefordert, Bereitstellungsgruppenmarkierungen anzugeben.After the installation, you are prompted for deployment group tags. Übernehmen Sie die Standardeinstellungen.Accept the defaults.
  9. Suchen Sie den neu registrierten virtuellen Computer in Azure DevOps Services unter Bereitstellungsgruppen (in Ziele).In Azure DevOps Services, check for your newly registered virtual machine in Targets under Deployment Groups.

Erstellen einer Azure Pipelines-ReleasepipelineCreate an Azure Pipelines release pipeline

Eine Releasepipeline gibt den Prozess an, der in Azure Pipelines zum Bereitstellen der App verwendet wird.A release pipeline specifies the process that Azure Pipelines uses to deploy the app. In diesem Beispiel führen Sie ein Shellskript aus.In this example, you execute a shell script.

So erstellen Sie die Releasepipeline in Azure Pipelines:To create the release pipeline in Azure Pipelines:

  1. Öffnen Sie die Registerkarte Releases des Hubs Build & Release, und klicken Sie auf Releasepipeline erstellen.Open the Releases tab of the Build & Release hub, and select Create release pipeline.
  2. Wählen Sie die Vorlage Leer aus, indem Sie mit einem leeren Prozess starten.Select the Empty template by choosing to start with an Empty process.
  3. Klicken Sie im Abschnitt Artefakte auf + Artefakt hinzufügen, und wählen Sie unter Quelltyp die Option Jenkins aus.In the Artifacts section, select + Add Artifact and choose Jenkins for Source type. Wählen Sie Ihre Jenkins-Dienstendpunktverbindung aus.Select your Jenkins service endpoint connection. Wählen Sie dann den Jenkins-Quellauftrag aus, und klicken Sie auf Hinzufügen.Then select the Jenkins source job and select Add.
  4. Klicken Sie auf die Auslassungspunkte neben Umgebung 1.Select the ellipsis next to Environment 1. Klicken Sie auf Bereitstellungsgruppenphase hinzufügen.Select Add deployment group phase.
  5. Wählen Sie Ihre Bereitstellungsgruppe aus.Choose your deployment group.
  6. Klicken Sie auf + , um Bereitstellungsgruppenphase eine Aufgabe hinzuzufügen.Select + to add a task to Deployment group phase.
  7. Wählen Sie die Aufgabe Shellskript aus, und klicken Sie anschließend auf Hinzufügen.Select the Shell Script task and select Add. Die Aufgabe Shellskript gibt die Konfiguration für ein Skript an, das auf jedem Server ausgeführt wird, um Node.js zu installieren und die App zu starten.The Shell Script task provides the configuration for a script to run on each server in order to install Node.js and start the app.
  8. Geben Sie für Skriptpfad Folgendes ein: $(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh.For Script Path, enter $(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh.
  9. Klicken Sie auf Erweitert, und aktivieren Sie dann Arbeitsverzeichnis angeben.Select Advanced, and then enable Specify Working Directory.
  10. Geben Sie für Arbeitsverzeichnis Folgendes ein: $(System.DefaultWorkingDirectory)/Fabrikam-Node.For Working Directory, enter $(System.DefaultWorkingDirectory)/Fabrikam-Node.
  11. Ändern Sie den Namen der Releasepipeline in den Namen, den Sie auf der Registerkarte Postbuildaktionen des Builds in Jenkins angegeben haben.Edit the name of the release pipeline to the name that you specified on the Post-build Actions tab of the build in Jenkins. Dieser Name ist in Jenkins erforderlich, damit eine neue Freigabe ausgelöst werden kann, wenn die Quellartefakte aktualisiert werden.Jenkins requires this name to be able to trigger a new release when the source artifacts are updated.
  12. Klicken Sie auf Speichern und dann auf OK, um die Releasepipeline zu speichern.Select Save and select OK to save the release pipeline.

Ausführen manueller und durch CI ausgelöster BereitstellungenExecute manual and CI-triggered deployments

  1. Klicken Sie auf + Release und anschließend auf Release erstellen.Select + Release and select Create Release.
  2. Wählen Sie in der hervorgehobenen Dropdownliste den abgeschlossenen Build aus, und klicken Sie anschließend auf Warteschlange.Select the build that you completed in the highlighted drop-down list, and select Queue.
  3. Klicken Sie in der Popupmeldung auf den Releaselink.Choose the release link in the pop-up message. Beispiel: „Release Release-1 wurde erstellt.“For example: "Release Release-1 has been created."
  4. Öffnen Sie die Registerkarte Protokolle, um die Konsolenausgabe der Freigabe anzuzeigen.Open the Logs tab to watch the release console output.
  5. Öffnen Sie im Browser die URL für einen der Server, die Sie der Bereitstellungsgruppe hinzugefügt haben.In your browser, open the URL of one of the servers that you added to your deployment group. Geben Sie dazu beispielsweise http://{IP-Adresse des Servers} ein.For example, enter http://{your-server-ip-address}.
  6. Wechseln Sie zum Git-Quellrepository, und ändern Sie den Inhalt der Überschrift h1 in der Datei „app/views/index.jade“ durch geänderten Text.Go to the source Git repository and modify the contents of the h1 heading in the file app/views/index.jade with some changed text.
  7. Committen Sie die Änderung.Commit your change.
  8. Nach einigen Minuten wird auf der Seite Releases von Azure DevOps eine neu erstellte Freigabe angezeigt.After a few minutes, you will see a new release created on the Releases page of Azure DevOps. Öffnen Sie die Freigabe, um anzuzeigen, wie die Bereitstellung durchgeführt wird.Open the release to see the deployment taking place. Glückwunsch!Congratulations!

Problembehandlung beim Jenkins-Plug-InTroubleshooting the Jenkins plugin

Wenn bei den Jenkins-Plug-Ins Fehler auftreten, melden Sie das Problem auf der Jenkins-JIRA-Seite für die jeweilige Komponente.If you encounter any bugs with the Jenkins plugins, file an issue in the Jenkins JIRA for the specific component.

Nächste SchritteNext steps

In diesem Tutorial haben Sie die Bereitstellung einer App in Azure mit Jenkins (für den Build) und Azure DevOps (für das Release) automatisiert.In this tutorial, you automated the deployment of an app to Azure by using Jenkins for build and Azure DevOps Services for release. Sie haben Folgendes gelernt:You learned how to:

  • Erstellen der App in JenkinsBuild your app in Jenkins.
  • Konfigurieren von Jenkins für die Azure DevOps Services-IntegrationConfigure Jenkins for Azure DevOps Services integration.
  • Erstellen einer Bereitstellungsgruppe für die virtuellen Azure-ComputerCreate a deployment group for the Azure virtual machines.
  • Erstellen einer Azure Pipeline-Instanz zum Konfigurieren der virtuellen Computer und zum Bereitstellen der App.Create an Azure Pipeline that configures the VMs and deploys the app.

Informationen zur Verwendung von Azure Pipelines für Build- und Releaseschritte finden Sie hier.To learn about how to use Azure Pipelines for both Build and Release steps, refer to this.

Informationen zum Erstellen einer YAML-basierten CI/CD-Pipeline für die Bereitstellung auf virtuellen Computern finden Sie im nächsten Tutorial.To learn about how to author a YAML based CI/CD pipeline to deploy to VMs, advance to the next tutorial.