2012-03-19 16 views
34

Ci scusiamo per lo stile 'svn' - siamo in un processo di migrazione da SVN a GIT (incluso il nostro ambiente CI Jenkins).In Jenkins, come eseguire il checkout di un progetto in una directory specifica (utilizzando GIT)

Ciò di cui abbiamo bisogno è essere in grado di fare in modo che Jenkins esegua il checkout (o dovrei dire clone?) Del progetto GIT (repository?) In una directory specifica. Abbiamo provato un po 'di magia refspec ma non era troppo ovvio per capire e usare con successo.

Inoltre, se nello stesso progetto Jenkins è necessario eseguire il checkout di diversi repository GitHub privati ​​in diverse directory separate sotto una radice del progetto, come possiamo farlo per favore?

Abbiamo installato il plugin GitHub. Spero che abbiamo formulato le cose giuste.

risposta

30

L'impostazione predefinita git plugin per Jenkins fa il lavoro abbastanza bene.

Dopo aver aggiunto un nuovo repository git (progetto di configurazione>codice sorgente Gestione> selezionare l'opzione GIT) al progetto passare alla parte inferiore delle impostazioni del plugin, appena al di sopra del browser Repository regione. Dovrebbe essere presente il pulsante Advanced. Dopo aver fatto clic su di esso dovrebbe apparire un nuovo modulo, con un valore descritto come Sottodirectory locale per repository (facoltativo). Impostando questo su folder, il plug-in eseguirà il controllo del repository nella cartella relativa al tuo spazio di lavoro. In questo modo puoi avere tanti repository nel tuo progetto di cui hai bisogno, il tutto in luoghi separati.

In alternativa, se il progetto che si sta utilizzando lo consentirà, è possibile utilizzare i sottomoduli GIT, che sono simili ai percorsi esterni in SVN. Nel numero GIT Book c'è una sezione su questo argomento. Se questo non sarà contro una politica, i sottomoduli sono abbastanza semplici da usare, offrendoti un modo efficace per controllare le posizioni, le versioni/tag/rami che verranno importati e saranno disponibili sul tuo repository locale e ti offriranno una portabilità migliore.

Ovviamente il plugin GIT supporta il controllo dei sottomoduli, quindi Jenkins può lavorare con loro in modo abbastanza efficace.

+10

C'è solo una sottodirectory _Local per repo_ l'impostazione è per tutti i repository quindi non è veramente adatta per la gestione di più repository. Vedi https://issues.jenkins-ci.org/browse/JENKINS-13086. – ubuntudroid

+4

Non vedo nemmeno questa opzione usando il plugin Git 2.4.2. Questa risposta ha 4 anni quindi forse l'opzione è stata rimossa? (Vedo comunque "Checkout in una sottodirectory" come menzionato in un'altra risposta da @biolinh, ma vale per tutti i repository. – Zitrax

+1

"Checkout to subdirectory" si trova nella sezione "Additional Behaviors" del plugin git. , che ti limita ancora a un solo repository git per lavoro Se hai bisogno di più di un repository git per lavoro, usa la pipeline Jenkins –

-3

Non utilizzo il plug-in github, ma dalla pagina di introduzione è più o meno simile al plug-in gerrit-trigger.

È possibile installare git plug-in, che può aiutare a controllare i progetti, se si desidera includere più progetti in un lavoro jenkins, basta aggiungere il repository al lavoro.

Br, Tim

5

Inoltre, se nello stesso progetto Jenkins è necessario eseguire il checkout di diversi repository GitHub privati ​​in diverse directory separate sotto una radice del progetto. Come possiamo farlo per favore?

Il Jenkin's Multiple SCMs Plugin ha risolto il problema di diversi repository per me molto bene. Ho appena iniziato a lavorare su una build di progetto che controlla quattro diversi repository git in una cartella comune. (Sono un po 'riluttante a usare git super-projects come suggested previously da Łukasz Rżanek, dato che git è abbastanza complesso senza sottomoduli.)

+0

Multiple SCM non mostra cambiamenti per ogni build, c'è un bug e loro già 1.5 anno: –

33

Sono d'accordo con @ Łukasz Rżanek che possiamo usare git plugin

Ma, io uso l'opzione: Checkout per un sub-senso ciò che è attiva come segue:
In codice sorgente Gestione, spuntare Git
clic pulsante add, scegliere checkout per una sottodirectory

enter image description here

+1

Ma non è possibile impostare cartelle diverse per repository diversi –

+0

Nel mio caso, il mio Jenkins esegue solo il codice clone da un repository.Non ho provato a fare questo caso che hai detto. – biolinh

10

Vale la pena esaminare il plug-in Pipeline. Con il plugin è possibile eseguire il checkout di più progetti VCS in percorsi di directory relativi. Prima di creare una directory per il controllo VCS. Quindi invia i comandi allo spazio di lavoro VCS appena estratto. Nel mio caso sto usando git. Ma dovresti avere l'idea.

node{ 
    def exists = fileExists 'foo' 
    if (!exists){ 
     new File('foo').mkdir() 
    } 
    dir ('foo') { 
     git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>' 
     ...... 
    } 
    def exists = fileExists 'bar' 
    if (!exists){ 
     new File('bar').mkdir() 
    } 
    dir ('bar') { 
     git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>' 
     ...... 
    } 
    def exists = fileExists 'baz' 
    if (!exists){ 
     new File('baz').mkdir() 
    } 
    dir ('baz') { 
     git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>' 
     ...... 
    } 
} 
+0

dà l'errore, 'Script non è permesso usare il nuovo java.io.File java.lang.String', che è vero.Vedi la mia risposta per un modo di usare il generatore di frammenti di codice della pipeline per creare il codice che ti serve per la tua pipeline script o Jenkinsfile. –

+0

Si potrebbe usare "sh" mkdir -p directory' come soluzione alternativa per "Script non consentiti ..." – Aerse

22

Nel nuovo gasdotto Jenkins 2.0 (precedentemente denominato il plugin flusso di lavoro), questo è fatto in modo diverso per:

  • repository principale
  • altri repository aggiuntivi

Here I Mi riferisco specificamente alla versione 2.9 di Pipeline Multibranch.

repository principale

Questo è il repository che contiene il Jenkinsfile.

Nella schermataConfigura per il progetto di gasdotto, immettere il nome del repository, ecc

Non utilizzare Comportamenti aggiuntivi> check-out per un sub-directory. Questo metterà il tuo Jenkinsfile nella sottodirectory where Jenkins cannot find it.

In Jenkinsfile, controllare il repository principale nella sottodirectory utilizzando dir():

dir('subDir') { 
    checkout scm 
} 

Repository addizionali

Se si desidera controllare altri repository, utilizzare il generatore Pipeline sintassi per genera automaticamente uno snippet di codice Groovy.

Nella schermataConfigura per il progetto di gasdotto:

  1. Selezionare Pipeline Sintassi. Nel Esempio Passo menu a discesa, selezionare checkout: Generale SCM.
  2. Selezionare il sistema SCM, ad esempio Git.Inserisci le informazioni usuali sul tuo deposito o depot.
  3. Si noti che nella pipeline Multibranch, la variabile di ambiente env.BRANCH_NAME contiene il nome del ramo del repository principale.
  4. Negli Comportamenti aggiuntivi menu a discesa, selezionare check-out per una sottodirectory
  5. Clicca Genera Groovy. Jenkins mostrerà lo snippet di codice Groovy corrispondente al checkout SCM che hai specificato.
  6. Copia questo codice nello script della pipeline o Jenkinsfile.
+5

snippet di codice qui: 'checkout ([$ class: 'GitSCM', diramazioni: [[nome: '*/branchname ']], doGenerateSubmoduleConfigurations: false, estensioni: [[$ class:' RelativeTargetDirectory ', relatedTargetDir:' MyDirectory ']], submoduleCfg: [], userRemoteConfigs: [[credentialsId:' myId ', url:' https: // github .com/jenkinsci/jenkins.git ']]]) ' –

+0

In realtà penso che la risposta di @davey_dev sia quella giusta. Se passi per la prima volta in una sottodirectory con il comando' dir (' subDir ') 'allora il repository sarà essere clonato in un'altra sottodirectory di subDir e si otterrà 'subDir/[nome repo]/[contenuto]'. Stavo cercando un modo per ottenere 'dubDir \ [contenuti]', quindi usare 'parenteTargetDir' era il giusto modo per farlo – Mig82

Problemi correlati