Esternalizzazione delle credenziali SCM con Maven

Esiste un metodo per esternalizzare le credenziali SCM in modo che non vengano archiviate nel POM del progetto? Il problema è che se sono contenuti nel POM del progetto, saranno visibili a tutti quando verrà distribuito il progetto.

Questo può essere fatto per molti dei fornitori di SCM, presumo Subversion come l’implementazione basata sul tuo tag.

Puoi definire le tue impostazioni di Subversion in $ user.home / .scm / svn-settings.xml (o [maven home] /conf/.scm/svn-settings.xml, anche se questo significa che saranno ancora visibili agli utenti di il sistema)

In quel file è ansible impostare il nome utente e la password per il server Subversion. Il contenuto del file dovrebbe assomigliare a questo:

 [svn user] [svn password]  

È ansible definire altre proprietà in quel file di configurazione. Per ulteriori dettagli, consultare la sezione “Configurazione del provider” della pagina SCM di Subversion .

Altri provider SCM hanno un approccio simile, ad esempio in CVS le impostazioni sono memorizzate in cvs-settings.xml nella stessa posizione (la cartella .scm), vedere la pagina SCM CVS per i dettagli.

Per alcuni provider SCM è ansible specificare le proprie credenziali nella sezione di settings.xml . Come usa il nome di dominio del tuo repository. Questo funziona per me con mercurio. Anche SubVersion funziona.

Ad esempio, dato il mio pom.xml contiene:

  scm:hg:http://jukito.googlecode.com/hg/ scm:hg:https://jukito.googlecode.com/hg/ http://code.google.com/p/jukito/source/browse/  

Quindi posso specificare le mie credenziali in settings.xml come tale:

  jukito.googlecode.com philippe.beaudoin 1234567890ABC  

Mi rendo conto che questa domanda è vecchia e le risposte sono accettate, ma per completezza vorrei fornire la seguente alternativa, che potrebbe essere preferita in alcuni casi.

Motivazione

A volte capita che lo stesso server venga utilizzato per diversi scopi, il che richiede credenziali utente diverse. Ad esempio, viene utilizzato per ospitare il repository Maven gestito da Nexus e un server SVN con credenziali diverse per lo stesso utente. In questi casi, occorrono diverse voci con lo stesso id e username , ma password diverse. Questo, tuttavia, non è fattibile.

Soluzione

Il plugin di rilascio di Maven supporta i username e le password flag che possono essere forniti come parte della release:prepare e release:perform comandi. I valori per username e password devono corrispondere alle rispettive credenziali SVN.

 mvn release:prepare -Dusername=[username] -Dpassword=[password] 

Sono riuscito a farlo funzionare utilizzando la soluzione fornita sopra, ad esempio aggiungendo una nuova configurazione del server al mio settings.xml e dando il nome del dominio come id.

  domain.name:port [username] [password]  

Oltre alla risposta precedente, se si specifica una porta nel proprio URL, è necessario includere anche il server.id. Un’altra stranezza che ho trovato è che è necessario inserire la password tra virgolette se contiene caratteri che potrebbero interferire con la chiamata da riga di comando.

Non è ansible utilizzare quanto segue in $ user.home / .scm / svn-settings.xm poiché non è valido! Non ci sono elementi come e sotto (come specificato qui )

  [svn user] [svn password]