2010-07-12 1 views
-1

Je cours le serveur CI hudson sur une machine win32. Après la construction réussie je veux que l'exe créé soit mis sur un site Web public. Les plugins hudon pour SCP et ftp ne fonctionnaient pas comme je le voulais (surtout parce qu'il choisit des répertoires bizarres pour les placer) donc j'ai créé mon propre script pour une ligne de commande scp que hudson appelle.Comment puis-je obtenir SCP et ftp (à partir de la ligne de commande, pas de plugin) fonctionnant dans hudson

Pour une raison quelconque, le fichier scp bat se bloque lorsqu'il est exécuté sous l'environnement hudson. Cela fonctionne bien quand je l'appelle à partir d'une ligne de commande mais sur la même machine.

Apparemment, cela échoue également lors de l'exécution à partir du planificateur de tâches.

Quelqu'un peut-il penser à une raison pour laquelle cela ne fonctionnerait pas dans un environnement hudson ou scheduler?

pscp.exe -batch -q -pw mypassword ..\..\installers\Output\myfilename [email protected]:domains/domain.com/html/downloads 

(Notez que « domain.com » est un remplacement pour mon nom de domaine ...)

Encore une fois, quand je l'appelle le fichier de chauve-souris de la ligne de commande, il fonctionne très bien. Notez également - la raison pour laquelle j'appelle un fichier bat est que je remplace le nom de fichier par une commande svn WCREV - puisque hudson est mort cérébrale et ne peut pas faire ce remplacement dans les plugins scp ou ftp ou sur la ligne de commande appels. Cette méthode devrait fonctionner fin mais elle se bloque.

pscp is a command line ssh program associated with Putty. Un problème supplémentaire que j'ai est que ce projet accède à deux référentiels svn donc hudson est confus et ne peut pas fournir le numéro svn rev à volonté dans des endroits où je pense qu'il sera disponible. (Un repo est pour les choses de tiers et l'autre est notre base de code) Nous utilisons le svn rev de notre base de code dans le cadre de l'identifiant pour nommer le programme d'installation qui est créé. Je serais heureux d'utiliser le ftp ou scp à partir de hudson (Les plugins), mais ils ne semblent pas fonctionner pour moi du tout étant donné les emplacements que hudson décide de mettre des fichiers (en utilisant les numéros de build - je ne veux pas utiliser les numéros de build de hudson pour identifier les builds - je préfère la révision svn) - donc j'utilise les versions en ligne de commande mais ça ne marche pas non plus - ils bloquent le processus de construction de hudson.

Répondre

3

J'ai moi-même rencontré le même problème. Le problème est que pscp (comme tout PuTTY) nécessite que la clé d'hôte pour le serveur que vous connectez soit chargée dans le registre (en HKEY_CURRENT_USER). Sans la hostkey, pscp rejettera l'hôte comme invalide (il devrait y avoir un message d'erreur apparaissant dans la sortie de la console à moins que vous ne l'ayez surexprimé d'une manière ou d'une autre), mais cela doit être fait pour chaque utilisateur la commande

C'est le processus de base que j'utilise:..

  1. se connecter au serveur et le port en utilisant PuTTY Acceptez le hostkey lorsque vous êtes invité.
  2. Run regedit.exe
  3. Parcourir pour HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  4. Export de la hostkey correspondant à un fichier .reg (clic droit sur SshHostKeys et sélectionnez l'exportation)
  5. Connectez-vous en tant qu'utilisateur Hudson fonctionne comme une importation l'exportation .reg fichier

Si Hudson est exécuté en tant que système local, vous pouvez utiliser PsExec ou la technique décrite on this MSDN blog pour exécuter une commande en tant que compte système local.

Une fois que vous avez fait cela une fois, la commande devrait fonctionner sous Hudson.

Modifier

Les deux liens ne sont que des moyens pour exécuter une invite de commande que le système local. Vous pouvez indiquer l'identifiant de l'utilisateur Hudson en ouvrant le panneau de configuration Services (services.msc) et en recherchant le service Hudson et en vérifiant ce qu'il indique dans la colonne Ouvrir une session sous.

S'il ne s'agit pas d'un système local, vous devriez pouvoir vous connecter à Windows en tant qu'utilisateur et importer le fichier reg. S'il est exécuté en tant que système local (par défaut), vous ne pouvez pas vous connecter à Windows et devez utiliser PsExec ou la technique décrite sur le blog MSDN pour importer le fichier de registre dans l'arborescence HKEY_CURRENT_USER du système local.

+0

Merci. Ça a du sens. J'ai supprimé la sortie - mais je peux le regarder je suppose. Je cours hudson fonctionne comme un service sur cette machine. Je n'arrive pas vraiment à comprendre comment ces deux liens que vous indiquez m'aideront. – Tim

+0

@Tim voir ma vérification ci-dessus. Peut-être que cela clarifie les choses? – ig0774

+0

Hmm. J'ai compris tout cela - je pense que ma confusion est dans le deuxième lien (je cours en tant que service sous l'hôte local). L'url que vous avez posté ne semble pas parler d'un registre ... Mais peut-être qu'il me manque quelque chose. – Tim

1

Comment mettre à jour votre mastic avec Quest PuTTY. Il est basé sur PuTTY et offre le paramètre -auto_store_key_in_cache. Cela devrait résoudre votre problème.

Voir également un similar question on SuperUser.

+0

merci - Je vais regarder dans ce – Tim

+0

Qu'est-ce que je fais exactement avec PLink? J'ai une ligne de commande pscp que j'utilise. Est-ce que j'utilise simplement plink pour créer la clé, puis utiliser pscp ou est-ce que j'utilise plink au lieu de pscp? – Tim

+0

plink = putty - GUI, cela signifie que vous avez seulement une ligne de commande où vous pouvez passer vos commandes à partir du fichier. Puisque vous voulez faire un transfert de fichier, vous devez utiliser scp. cela vient avec la version Quest de putty. Quest PuTTY est une version améliorée des derniers outils PuTTY. –

0

J'ai résolu mon problème en utilisant un compte capable de lancer les commandes scp à partir de la ligne de commande. Plus précisément, dans la configuration des services, j'ai défini le service hudson pour utiliser un autre utilisateur que j'avais configuré et non le compte système.

Ce n'est probablement pas la meilleure façon de résoudre le problème, mais cela a fonctionné pour moi à court terme.

Questions connexes