2011-01-25 3 views
11

ho già istituito un sistema di controllo di versione (Subversion), che sta per essere utilizzato dagli sviluppatori per realizzare e aggiornare il proprio codice (diciamo che il suo indirizzo è https://server/svn/project). Solo per menzionare che solo gli utenti autenticati potranno accedere allo svn del progetto.trigger Hudson generazione quando svn commit

D'altra parte, ho installato Hudson server come server di integrazione continua del progetto (l'indirizzo del progetto è server:8080/job/project) e vorrei il seguente:

  • Hudson costruisce deve essere attivato automaticamente quando v'è un svn commit.
  • mail da inviare ai rispettivi sviluppatori (quelli che hanno commesso codice) quando il loro codice di impegno non costruisce. (Il che significa che quando l'utente si impegna Un codice che non costruire, solo l'utente A per ottenere e-mail con la notifica)

Basta parlare del fatto che ho impostato l'autorizzazione a matrice per gli utenti Hudson, perché io non voglio essere aperto a chiunque.

ho visto alcuni suggerimenti per post-commit ganci, ma nessuno di loro ha lavorato fino ad ora.

Qualcuno mi può suggerire cosa fare in entrambe le questioni? i passaggi specifici sarebbero apprezzati.

+2

Penso che hudson abbia bisogno di accedere in lettura al repository. ICBWT. – sbi

+1

Perché il [post-commit hook] (http://wiki.hudson-ci.org/display/HUDSON/Building+a+software+project#Buildingasoftwareproject-BuildsbychangesinSubversion%2FCVS) funziona? Autenticazione? È inoltre possibile impostarlo per eseguire periodicamente il polling del repository per le modifiche. – Rup

+0

quando si esegue il codice di esempio in svn, un "hook post-commit" non è riuscito con l'output dell'errore "restituito. – canadiangeo

risposta

7

Secondo "Building a software project # Builds by changes in Subversion/CVS", Hudson deve eseguire il polling del repository SVN per rilevare le modifiche e attivare la generazione.

Tuttavia, che può essere avviata su ogni commit dall'SVN, come in this thread.
Lo script ufficiale è nella pagina Subversion Plugin.

REPOS="$1" 
REV="$2" 
UUID=`svnlook uuid $REPOS` 
/usr/bin/wget \ 
    --header "Content-Type:text/plain;charset=UTF-8" \ 
    --post-data "`svnlook changed --revision $REV $REPOS`" \ 
    --output-document "-" \ 
    --timeout=2 \ 
    http://server/hudson/subversion/${UUID}/notifyCommit?rev=$REV 

Ma si precisa:

Per far funzionare tutto questo, tua Hudson deve consentire anonimi l'accesso in lettura al sistema.
Se il controllo di accesso al tuo Hudson è più restrittiva, potrebbe essere necessario specificare il nome utente e la password, a seconda di come l'autenticazione è configurato.

+0

quindi nel mio caso, la parte "server/hudson/subversion" dell'URL nell'ultima riga, quale sarebbe? – canadiangeo

+0

ho anche provato questo suggerimento (http://borys.name/blog/build_with_hudson_on_subversion_commit.html) che si adatta al mio caso, ma non ha funzionato neanche. forse sto scherzando con ciò che deve essere sostituito nell'URL fornito. – canadiangeo

+0

@canadiangeo: Se leggo http://wiki.hudson-ci.org/display/HUDSON/Subversion+Plugin, si sostituisce 'server' solo dal server (nel tuo caso:' http: // server: 8080'), ma si mantiene '/ hudson/subversion/...' – VonC

1

Ecco i passaggi necessari:

  • creare un utente SVN che Hudson può utilizzare per ottenere l'accesso in sola lettura al repository
  • Configurare Hudson utilizzare questo utente SVN quando si accede al repository
  • creare un nuovo lavoro per utilizzare il repository ad un indirizzo specificato (cioè un ramo specifico)
  • Configurare il vostro lavoro per interrogare il repository almeno una volta al minuto per tutte le modifiche
  • Configura y il nostro lavoro per costruire ciò che è richiesto
  • Configurare il compito di inviare una e-mail in caso di fallimento di compilazione

Suggerirei e-mailing a tutti gli sviluppatori in modo che siano informati che l'accumulo è instabile, non solo il colpevole.Ciò non solo fornisce maggiore visibilità, ma motiverà il colpevole a risolvere immediatamente il problema o ad accettare una sgridata dai propri colleghi sviluppatori. Fidati di me, questo è efficace.

+0

grazie per la risposta. forse hai ragione che sarebbe più efficace se ogni sviluppatore venisse avvisato in build instabili. tuttavia, penso che il tuo suggerimento nel passaggio 3 sia facile. :) Mi piacerebbe che la build fosse attivata quando c'è qualcosa che è stato commesso in svn, invece di eseguire il polling del repository ogni minuto. Immagino che in questo caso sarebbe necessario molto tempo e potrebbero sorgere possibili conflitti (quando 2 sviluppatori si impegnano a scrivere il loro codice allo stesso tempo). o mi sbaglio? – canadiangeo

+0

Continuo a suggerire di configurare Hudson per eseguire il polling del repository. In questo modo, controlli e configura le tue build in un unico posto. Se vuoi, puoi aggiungere ganci post-commit a SVN, ma non ho riscontrato problemi con l'utilizzo dei passaggi sopra descritti. – Bernard

4

per innescare una generazione quando c'è un impegno in SVN devi (1) impostare il lavoro per costruire Hudson in remoto e (2) fare un gancio SVN ...

la prima parte è abbastanza semplice. .. per fare il gancio di andare in/var/lib/svn // ganci e rinominare post-commit.tmpl al post-commit lì si può fare qualcosa di simile

#!/bin/bash 
# Este script comprueba si se han hecho cambios en un directorio concreto, 
# y en tal caso lanza una build en Jenkins 

REPOS="$1" 
REV="$2" 
JENKINS_JOB="$3" 
JENKINS_USER=admin 
JENKINS_PASSWORD=**** 
JENKINS_HOST=<hostname> 

if [ -n $(svnlook dirs-changed $REPOS --revision $REV | fgrep "tags\/") ];then 
wget --quiet --auth-no-challenge --no-check-certificate --http-user=$JENKINS_USER --http-password=$JENKINS_PASSWORD http://$JENKINS_HOST/job/$JENKINS_JOB/build?token=TOKEN 
fi 

exit 0 

un'occhiata a questo articolo http://blogsyntagma.blogspot.com.ar/2012/04/hook-de-subversion-para-ejecutar-un-job.html (è in spagnolo)