Blog

Hochladen einer benutzerdefinierten build.vNext-Aufgabe

Kees Verhaar

Kees Verhaar

Aktualisiert Oktober 22, 2025
4 Minuten

[Update 2015-08-12] Microsoft hat soeben ein neues Befehlszeilendienstprogramm namens "tfx-cli" zur Verfügung gestellt, mit dem Sie Build-Tasks erstellen, hochladen, löschen und auflisten können. Sie können es anstelle des in diesem Beitrag beschriebenen "TaskUploader" verwenden. Ich lasse diesen Beitrag hier stehen, da der Teil über die Erstellung der Aufgaben immer noch nützlich ist. "tfx-cli" wird über npm vertrieben und kann hier gefunden werden. Eine schöne Anleitung von Jeff Bramwell finden Sie in seinem Blog hier.

Mit der Einführung des neuen build.vNext-Build-Systems in Visual Studio Online und TFS 2015 (derzeit in RC) ist die Erstellung einer Build-Definition viel einfacher geworden. Es gibt bereits eine ganze Reihe von Aufgaben, mit denen Sie Ihre Software über die Build-Engine erstellen, testen und bereitstellen können. Aber es gibt noch mehr: Was, wenn Sie Ihre eigene benutzerdefinierte Aufgabe implementieren möchten? Zum Glück ist das möglich! Sie können Ihre eigene Aufgabe als Node.js-Anwendung schreiben und diese in VSO oder Ihrem TFS 2015 Server vor Ort verfügbar machen.

Im vso-agent-tasks Repository auf GitHub finden Sie den Quellcode der Aufgaben, die von Microsoft zur Verfügung gestellt werden. Auf dieser Grundlage können Sie auch Ihre eigene Aufgabe erstellen!

Dieser Beitrag zeigt Ihnen, wie Sie eine benutzerdefinierte Aufgabe erstellen und in VSO oder TFS hochladen können. Für diesen Beitrag verwenden wir die Aufgabe "SonarQubePostTest", die noch nicht öffentlich auf VSO verfügbar ist. Der Code befindet sich jedoch bereits im Git-Repository.

Voraussetzungen

Wie üblich müssen Sie zunächst einige Voraussetzungen schaffen. Sie müssen Node.js und npm von Node.js installieren. Stellen Sie nach der Installation sicher, dass Sie mindestens Node 0.10 und npm 1.4 haben:

Bild

Ich habe Node 0.12.7 und npm 2.11.3, ich bin also startklar!

Installieren Sie nun gulp, indem Sie "npm install gulp -g" eingeben.

Bild

Stellen Sie schließlich sicher, dass Sie einen Git-Client installiert haben. Ich verwende den integrierten Client von Visual Studio 2015, aber Sie können jeden beliebigen Git-Client verwenden.

Klonen des Repositorys

Sie benötigen eine lokale Kopie des vso-agent-tasks Git-Repository. Diese können Sie erhalten, indem Sie das Repository von GitHub klonen. Wenn Sie Visual Studio 2013 oder 2015 verwenden, können Sie dies tun, indem Sie im Team Explorer auf die Registerkarte "Verbinden" gehen. Klicken Sie dann auf die Schaltfläche "Klonen" und geben Sie die URL für das Git-Repository und einen lokalen Ordner ein. Wenn Sie auf die Schaltfläche "Klonen" klicken, erhalten Sie eine lokale Kopie des Repositorys.

Bild

In meinem Fall habe ich das Repository nach "C:vso-agent-tasks" geklont.

Erstellen der Aufgaben

Bevor Sie die Aufgaben hochladen können, müssen Sie sie erstellen. Und natürlich müssen wir zuerst einige Abhängigkeiten beschaffen. Gehen Sie dazu mit "cd" zum Stammverzeichnis des Repositorys ("C:vso-agent-tasks") und führen Sie "npm install" aus.

Bild

Führen Sie dann, wiederum vom Stammverzeichnis des Repositorys aus, "gulp" aus, um die Aufgaben zu erstellen.

Bild

Es dauert ein paar Sekunden und sollte erfolgreich abgeschlossen werden.

Bild

Sie erhalten dann ein Verzeichnis "_build", das die erstellten Aufgaben enthält.

Bild

Hochladen der Aufgabe

Dies ist der lustige Teil, der nicht wirklich gut dokumentiert ist. Im vso-agent-tasks Repository gibt es ein kleines Dienstprogramm namens "TaskUploader", mit dem Sie eine Aufgabe in VSO und/oder TFS hochladen können. Zunächst müssen wir es erstellen. Dazu führen Sie "gulp uploader" im Stammverzeichnis des Repositorys aus.

Bild

Sie erhalten eine gebaute Version im Unterverzeichnis "_build".

Bild

Dies ist eine Node.js-Anwendung, mit der Sie eine Aufgabe in VSO und TFS hochladen können. Sie müssen zwei Argumente angeben:

  • Die URL der Sammlung, in die Sie die Aufgabe hochladen möchten
  • Das Verzeichnis der Aufgabe, die Sie hochladen möchten

Für den Moment laden wir die Aufgabe "SonarQubePostTest" aus dem Verzeichnis "_buildTasksSonarQubePostTest" auf mein VSO-Konto hoch. Die vollständige Befehlszeile lautet, ausgehend vom Stammverzeichnis des Repositorys:

node _buildTaskUploadertaskUploader.js <Ihre VSO URL> _buildTasksSonarQubePostTest

Sie werden nach Ihrem Benutzernamen und Ihrem Passwort gefragt. Dies müssen Ihre alternativen Anmeldedaten sein.

Bild

Nach einer Weile sehen Sie eine Reihe von Json-Daten als Antwort des Servers. Darin sollten Sie einen statusCode und eine statusMessage finden, die Ihnen mitteilen, dass die Aufgabe erstellt wurde.

Bild

Wenn Sie nun die Build-Definition erstellen, sollten Sie die neu hochgeladene Aufgabe dort hinzufügen können:

Bild

Was ist mit TFS vor Ort?

Da der taskUploader auf "Basic Authentication" angewiesen ist, müssen Sie diese Funktion im IIS auf Ihrer TFS-Anwendungsebene aktivieren. Standardmäßig ist diese Funktion deaktiviert.

Um "Basic Authentication" zu aktivieren, gehen Sie zu "Rollen und Funktionen hinzufügen" und vergewissern Sie sich, dass "Basic Authentication" installiert ist (unter "Web Server (IIS)", "Web Server", "Sicherheit").

Bild

Gehen Sie dann in den IIS-Manager und navigieren Sie zum Knoten "tfs" unter "Team Foundation Server" und öffnen Sie das Modul "Authentifizierung".

Bild

Aktivieren Sie dann "Basisauthentifizierung":

Bild

Danach können Sie die Aufgabe auf Ihren TFS-Server vor Ort hochladen. Stellen Sie nur sicher, dass Sie die URL für Ihre Sammlung und natürlich einen gültigen Benutzer verwenden.

Bild

Viel Spaß beim Bauen!

Verfasst von

Kees Verhaar

Welcome to my blog! I am an ALM consultant for Xpirit Netherlands B.V. Sounds fancy, doesn’t it? Basically it means I help people to do their work as a software engineer better, faster and easier. In the past couple of years of working in the field, I have encountered many things of which I thought: “I should share this!”. This blog is my way of doing that. You’ll find real life stories, tips & tricks, examples and probably even some code here. Hope you enjoy! If you have any suggestions, please feel free to drop me a line.

Contact

Let’s discuss how we can support your journey.