2010-11-22 5 views
2

SynopsisEinstellung Hudsons Prozess Benutzer auf Mac + Tomcat

Ich habe Hudson gründen auf unserem Mac OS Server (Snow Leopard 10.6.5), unter dem Standard Tomcat läuft (so, Tomcat 6), die aktiviert ist Verwenden der Server-Admin-Anwendung.

Ich möchte meine Hudson-Skripte als Unix-Benutzer/Login ausführen, die nicht die Tomcat-Anmeldung ist.

Einzelheiten

Mein Hudson Job ist ein Freestyle-Projekt, das Bash-Skripte ausgeführt wird, die xcodebuild aufrufen (es ist ein iPhone-Projekt) zu reinigen und die Build zu bauen.

Das Problem ist, dass Hudson (soweit ich sehen kann) mit diesem Standard-Setup mit Tomcat Unix-Benutzer, der _appserver ist.

Dies bedeutet, dass _appserver der Benutzer ist, der xcodebuild und alle Skripte aufruft, aus denen der Job besteht.

Ich würde für Hudson lieber seinen eigenen Unix-Login haben, komplett mit Home-Verzeichnis etc. Abgesehen davon, ein wenig glücklicher über die Berechtigungen usw. des Logins zu sein, der versucht, den Build zu machen, scheint Xcode selbst das zu bevorzugen Benutzer ein Home-Verzeichnis haben, und die Build-Protokolle werden mit Warnungen gefüllt wie:

2010-11-11 17: 29: 11,729 Interface Builder Cocoa touch Tool [58771: 1903] CFPreferences: Benutzerverzeichnis an file: // localhost/var/empty/Bibliothek/Anwendung% 20Support/iPhone% 20Simulator/Benutzer/ist nicht verfügbar. Benutzerdomänen sind volatil.

und

konnte nicht geöffnet werden gemeinsam genutzten Funktionen Speicher GSCapabilities (Keine solche Datei oder das Verzeichnis)

Plus I die Provisioning-Profile vermuten immer Gerät zu bauen arbeiten baut eine wäre viel einfacher, wenn die Anmeldung ein Standard-Login war, der die Ziele von Xcode erstellen kann.

ABER ich kann absolut keine Möglichkeit finden, das Login-Konto zu setzen! Es scheint genau die Art von Sache zu sein, die Sie tun möchten, aber haben das Netz nach Informationen vergeblich gesucht. Die tomcat-users.xml fühlte sich an, als ob es nützlich sein könnte, schien aber nicht mit einem "echten" (Unix) Benutzer zu verknüpfen?

Ein anderer Ansatz könnte sein, mit Hudson zu leben, der _appserver ist, aber die Skripts selbst als mein Erstellungsbenutzer laufen lassen. Dies scheint auf sudo zu zeigen, aber alles scheint so gesperrt zu sein Ich kann keinen Weg finden, ein Skript als ein anderer Benutzer auszuführen, sogar einen, den ich sperren kann, um minimalen Sicherheitszugriff zu haben ...?

Hoffen Sie, dass Sie Leuten helfen können!

Antwort

1

Die einfachste Art und Weise zu erreichen, was Sie wollen (und der einzige Weg, ich weiß, wie) wäre:

einen neuen Sklaven in Hudson erstellen und sie an den Server Hudson Punkt (Ihr Master-System wird auch jetzt ein neuer Sklave); Logge dich mit SSH ein, aber mit den Benutzerdaten, die du für den Build verwenden willst (sagen wir 'Hudson').

Richten Sie Ihr Projekt auf den Slave. Auf diese Weise hängt Ihr Job nicht von Tomcat (oder seinem Benutzer) ab, sondern vom Slave-Login.

In den Schritten:

1) Click on 'Build Executor Status' 
2) On the left sidebar, click on New Node 
3) Give the slave a name, click "Dumb Slave", and "OK" 
4) Number of executors = 1 
5) remote FS root = /home/<hudson_user> 
6) Launch method = UNIX SSH or JNLP 
7) If launch = SSH: host = ip address of master, 
    username = hudson, password =  hatever_password 
8) If launch = JNLP, log in as the hudson user, go to hudson and start 
    the web service from your hudson site 
9) Configure your job to use your slave (restrict where this project can be run) 
9a) Possibly, under configuration, turn off all executors on your master, 
    and use the new slave for anything you need to build. 

Ich weiß, dass es ein bisschen verworren klingt, aber wenn Sie mehr Erklärung benötigen oder Fragen haben, lassen Sie es mich wissen.

+0

Der Vorteil ist, dass Sie nicht mit Tomcat-Konfiguration herumspielen müssen – Sagar

+0

Der Nachteil ist, dass Sie ziemlich viel Aufwand hinzufügen, besonders wenn Sie große Artefakte archivieren. Außerdem muss das Build-Protokoll vom Slave zum Master kopiert werden. –

+0

Wie so? Unter der Annahme, dass der Build direkt auf dem Master stattfand (was in diesem Fall der Fall ist), müsste das Artefakt immer noch vom Arbeitsbereich in das Archivverzeichnis kopiert werden. Der einzige Unterschied besteht hier darin, dass das Kopieren aus dem Arbeitsbereich des Masters in das Archivverzeichnis des Masters vom Arbeitsbereich des Slaves kopiert wird - der Slave und der Master * sind das gleiche System *, also kein zusätzlicher Overhead. – Sagar

Verwandte Themen