2009-10-18 25 views
5

Come consigliato in a previous SO-Answer Sto eseguendo un'immagine VmWare di secureci come un'infrastruttura di sviluppo preconfigurata contenente maven, nexus, hudson, svn.Come distribuire su nexus (ospitato da secureci)?

Ora voglio configurare Maven sulla mia macchina Windows XP per distribuire i suoi artefatti su nexus. Ma quando ho configurare il mio pom.xml come questo (tratto da Deploying Artifacts to Nexus):

<distributionManagement> 
    <!-- use the following if you're not using a snapshot version. --> 
    <repository> 
     <id>nexus</id> 
     <name>RepositoryProxy</name> 
     <url>scp://192.168.0.197/nexus/content/repositories/releases</url> 
    </repository> 
    <!-- use the following if you ARE using a snapshot version. --> 
    <snapshotRepository> 
     <id>nexus</id> 
     <name>RepositoryProxy</name> 
     <url>scp://192.168.0.197/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 

... mvn deploy stampa il messaggio di errore:

Error deploying artifact: Exit code: 1 - 
    mkdir: cannot create directory `/nexus': Permission denied 

In settings.xml ho configurato username e password in questo modo:

<servers> 
    <server> 
    <id>nexus</id> 
    <username>tangens</username> 
    <password>********</password> 
    </server> 
</servers> 

domanda: Quale configurazione devo utilizzare per la distribuzione di nex noi?


Ho già provato https invece di scp, ma con questo Maven corse in problemi con certificati mancanti.

Ho provato http anziché scp, ma secureci ha installato un firewall per bloccare l'accesso alla porta 80 (http), causando un timeout.

EDIT:

ho scoperto che nesso memorizza i propri manufatti in /root/sonatype-work/nexus/storage/snapshots/. Ma non mi piace l'idea di inserire le credenziali dell'account root nel mio settings.xml.

EDIT:

D: Avete abilitato distribuzione per un repository ospitato sotto Nexus?

Sì, è abilitato per impostazione predefinita.

Q: Nexus sta ascoltando sulla porta 80?

C'è un Apache in esecuzione sulla porta 80. Server: Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 mod_ssl/2.2.8 OpenSSL/0.9.8g mod_wsgi/1.3 Python/2.5.2

D: Se un firewall non sta permettendo HTTP, perché non basta aggiungere un'eccezione per le connessioni HTTP dal " host "IP?

Perché ho assunto che SecureCI sia configurato correttamente e che ci sia un modo per farlo senza modificare l'installazione. Ma forse sono troppo ingenuo qui.

risposta

12

L'errore è chiaro: l'utente tangens non dispone dell'autorizzazione per creare /nexus sulla macchina remota.In realtà, l'url scp non è corretto e non punta alla posizione corretta come lo hai menzionato. Dovresti dare all'utente l'autorizzazione giusta tangens o configurare sshd per consentire a root di connettersi, ma questa non è una buona idea.

Detto questo, non penso che lo scp sia la via da seguire con Nexus. Se si distribuisce utilizzando scp, Nexus non verrà informato della distribuzione e le risorse utente non saranno visibili. In base a Deploying Artifacts to Nexus e al capitolo 9.4.2. Update the POM: Deployment Configuration del libro Nexus, la distribuzione deve essere eseguita con HTTP PUT. In altre parole, la vostra sezione distributionManagement dovrebbe assomigliare a qualcosa di simile:

<distributionManagement> 
    ... 
    <repository> 
     <id>releases</id> 
     <name>Internal Releases</name> 
     <url>http://localhost:8081/nexus/content/repositories/releases</url> 
    </repository> 
    ... 
    </distributionManagement> 

ho notato che hai detto che SecureCI utilizza un firewall configurato per cadere connessioni sulla porta 80. Tuttavia, dato che non sto usando io SecureCI , Ho alcune domande (forse stupide):

  • Hai abilitato la distribuzione per un repository ospitato in Nexus?
  • Nexus sta ascoltando sulla porta 80?
  • Se un firewall non consente HTTP, perché non aggiungere un'eccezione per le connessioni HTTP dall'IP "host"?

EDIT: Secondo le risposte OP, penso che l'utilizzo di HTTPS potrebbe essere davvero il modo "naturale" per andare con SecureCI. Tuttavia, prima di poter caricare tramite HTTPS, è necessario aggiungere il certificato CA di SecureCI (il certificato dell'emittente del certificato) nel JDK. È possibile seguire these instructions per fare questo. Ma prima di andare oltre, la vera domanda è:

  • SecureCI fornisce il certificato CA (il certificato dell'emittente del certificato)?

In caso contrario, non so come rendere possibile l'implementazione senza modificare le regole del firewall.

+0

Ho integrato le tue domande nel mio post. – tangens

+0

Ho forato il firewall come suggerito. Ora posso fare una distribuzione con 'http'. Se non viene visualizzata alcuna altra soluzione che consenta l'implementazione senza modificare l'installazione, accetterò questa risposta. Grazie. – tangens

+0

Ok. Nel frattempo ho aggiunto un altro suggerimento (domanda?). Ma è bello saperlo. –

1

Siamo spiacenti. Ho appena trovato la domanda.

Ci sono due opzioni, come hanno detto altri poster: fornire il certificato a Maven o attivare l'accesso HTTP e aprire la porta 80 (che è chiusa per impostazione predefinita per sicurezza).

Per abilitare l'accesso HTTP, vedere/trac/secureci/wiki/HowTo/EnableHttp in SecureCI (nella documentazione di HowTo sul wiki, Come abilitare l'accesso HTTP?).

Per il certificato, la chiave pubblica e privata si trovano in/etc/apache2/ssl /.

Se si desidera sostituire il certificato predefinito, i documenti per l'installazione del proprio (che possono essere autofirmati o firmati da una CA riconosciuta) si trovano nel wiki SecureCI in/trac/secureci/wiki/HowTo/InstallSslCert (sotto i documenti di HowTo sul wiki, come installo un certificato SSL?). Anche qui viene indicata la posizione del certificato esistente.

Problemi correlati