Wie sichere ich die TeamCity-Bereitstellung über den Web Deploy-Dienst?

7

Mein Team nutzt TeamCity für die kontinuierliche Integration. Es werden Webanwendungen über Web Deploy für Entwickler- und QA-Webserver erstellt , getestet und bereitgestellt . Der schwierige Teil ist die Bereitstellung auf einem Produktionswebserver. Unsere Richtlinie schreibt vor, dass Entwickler nicht für die Produktion bereitstellen können, sondern nur für einen Systemadministrator.

Unser aktueller Ansatz besteht darin, TeamCity ein Webbereitstellungspaket erstellen zu lassen, das der Administrator herunterladen und auf dem Produktionswebserver installieren kann. Wir möchten ihnen jedoch erlauben, in einer Build-Konfiguration einfach auf "Ausführen" zu klicken, sind uns jedoch nicht sicher, wie diese Schaltfläche gesichert werden soll.

Wir könnten ein TeamCity-Projekt erstellen, auf das nur Administratoren Zugriff haben, aber wir müssen uns auch mit der Sicherheit von Web Deploy befassen. Der Web Deploy-Dienst muss mit einem lokalen Administratorkonto auf dem Produktionsserver authentifiziert werden. Wir möchten nicht, dass Entwickler in einem Build-Skript Zugriff auf den Benutzernamen / das Kennwort haben, und wir möchten auch nicht, dass jeder Build-Agent als dieses Konto ausgeführt wird, da Entwickler einen Build erstellen können, der ihn für die Bereitstellung in der Produktion verwendet.

Ich hatte nicht viel Glück, Ressourcen zu Best Practices für TeamCity-Sicherheit / -Bereitstellung zu finden, aber ich kann mir nicht vorstellen, dass wir das einzige Unternehmen in dieser Situation sind. Wie verwalten andere die automatisierte Bereitstellungssicherheit?

jrummell
quelle

Antworten:

5

Mithilfe der Rollen und Berechtigungen in Teamcity können Sie über ein Projekt verfügen, auf das nur Ihr Bereitstellungsteam Zugriff hat. Es kann eine Artefaktabhängigkeit vom Haupt-Build haben, und Sie können sogar den "zuletzt angehefteten Build" verwenden, damit Entwickler steuern können, was überhaupt verfügbar ist.

Ich würde einen Build-Agenten installieren, der auf den Zielsystemen bereitgestellt werden kann , und dann die Funktion "Kompatible Builds" dieses Agenten in der TeamCity-Benutzeroberfläche verwenden, um ihn nur mit Ihrem Build für die Produktionsbereitstellung kompatibel zu machen. (Natürlich möchten Sie auch sicherstellen, dass Ihre Entwickler keine Berechtigungen zum Ändern der Agentenkonfiguration haben.)

Dies ist ein Nachteil von Teamcity bei der Verwendung von Agenten-kompatiblen Konfigurationsoptionen: Wenn Sie Ihre anderen Build-Agenten als mit allen Builds kompatibel belassen, wird die Produktionsbereitstellung möglicherweise von einem dieser Builds aus versucht, sofern dies kostenlos ist. Die einzige mir bekannte Problemumgehung besteht darin, sie alle so einzustellen, dass nur "angegebene Builds" ausgeführt werden und alle anderen Builds zu den anderen Agenten hinzugefügt werden. Der Schmerz ist, wenn Sie einen neuen Build hinzufügen, kann er nirgendwo ausgeführt werden, bis Sie ihn speziell als kompatibel hinzufügen.


Es gibt noch einige andere Möglichkeiten, den Build so einzuschränken, dass er nur auf bestimmten Agenten ausgeführt wird, indem die Agentenanforderungen in der Build-Konfiguration verwendet werden.

Eine besteht darin, eine Anforderung hinzuzufügen, teamcity.agent.namedie dem Agentennamen entspricht, auf dem sie ausgeführt werden soll. (oder umgekehrt, entspricht nicht dem, auf dem es nicht ausgeführt werden soll).

Eine andere Möglichkeit besteht darin, eine Anforderung für eine Umgebungsvariable hinzuzufügen (vorhanden oder mit einem bestimmten Wert) und diese Umgebungsvariable dann nur für die Agenten festzulegen, für die Sie diesen Build ausführen möchten.


Eine andere mögliche Lösung besteht darin, zwei Installationen von Teamcity durchzuführen, da Sie effektiv zwei verschiedene Benutzergruppen haben. Sie können natürlich keine Artefaktabhängigkeit verwenden, aber Sie können immer mit einer URL wie der folgenden auf die neuesten Artefakte eines bestimmten Builds zugreifen: *http://teamcity.server/repository/download/bt41/latest.lastSuccessful/setupfile.exe

wo:

  • bt41 ist die Build-ID in Teamcity (Sie finden sie in der URL, wenn Sie zu einem Build navigieren).
  • latest.lastSuccessful kann auch lastest.lastPinned"latest.lastFinished" oder die genaue Build-Nummer sein
  • setupfile.exe ist die Datei, die Sie aus der Artefaktausgabe abrufen möchten (dies kann auch ein Pfad sein, wenn er nicht in der obersten Ebene veröffentlicht wurde).
Gregmac
quelle
Ich wusste nichts über die Agentenoption "Nur ausgewählte Konfigurationen ausführen". Das wird nützlich sein, aber wie Sie sagten, ärgerlich zu pflegen. Ich glaube, ich habe einen Artikel über das Teilen von Build-Abhängigkeiten zwischen Servern gesehen. Ich werde sehen, ob ich ihn wieder finde.
Jrummell
Ich erinnerte mich an eine andere Möglichkeit, die Verwendung von Agenten einzuschränken, und bearbeitete meine Antwort. Ich habe gerade erst gelernt, wie man agent.name als Voraussetzung verwendet. Ich denke, ich kann meine Teamcity-Konfiguration tatsächlich ändern.
Gregmac
Wir haben eine Kombination aus kompatiblen Builds und Agentennamenanforderungen durchgeführt, sodass der Agent nur Builds für die Produktionsbereitstellung ausführen kann und diese Builds nur auf diesem Agenten ausgeführt werden können.
Jrummell
Ein interessanter Hinweis: TeamCity hat festgestellt, dass der Agent alle unsere .NET-Builds ausführen kann, obwohl er kein VS- oder Windows SDK enthält. Deshalb brauchten wir beide Methoden zur Einschränkung von Agenten.
Jrummell
@jrummell - es ist "fähig", weil es keine definierten Bedingungen gibt, die etwas anderes aussagen. Es gibt integrierte Variablen, die Sie verwenden können, z. B. "VS2008", "VS2010", "DotNetFrameworkSDK4.0_x86", und Sie können diese als Anforderungen (mithilfe von "existiert") für den Build definieren.
Gregmac
2

Wenn Sie sich in einer Domäne befinden, können Sie zum Sichern des Webbereitstellungsprozesses die Webbereitstellung so einrichten, dass die Windows-Authentifizierung akzeptiert wird. Anschließend wird der Teamcity-Build-Agent als Domänenbenutzer ausgeführt, der über die Berechtigung zum Bereitstellen in IIS verfügt. Ich habe die Dinge auf diese Weise eingerichtet, und Sie benötigen keine Kennwörter im Webbereitstellungsskript.

Einrichten der Windows-Authentifizierung für die Webbereitstellung: http://blogs.iis.net/carlosag/archive/2011/12/13/using-windows-authentication-with-web-deploy-and-wmsvc.aspx

Blake B.
quelle
Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Scott Pack