2012-01-27 12 views
29

Sto installando un nuovo server per eseguire Jenkins. Ho un server Jenkins esistente con lavori in corso. Ora, voglio copiare i lavori dalla vecchia istanza alla nuova istanza.Come faccio a copiare un lavoro da un'istanza all'altra?

Nella nuova istanza sono nella schermata Nuovo lavoro. Ho notato che esiste un'opzione "copia lavoro esistente". Quando ho messo nel percorso per il lavoro sulla vecchia esempio, io continuo a ricevere un errore che dice "non esiste lavoro a http://old-instance/job/jobName".

Come posso copiare un lavoro da un'istanza all'altra?

+0

e si è sicuri che non si desidera solo per configurare il nuovo server come schiavo Jenkins, in modo tale che i lavori sarà distribuito tra i due server? –

+0

No, la vecchia macchina è in pensione. – Isaac

+0

http://stackoverflow.com/questions/8424228/export-import-jobs-in-jenkins/30575318#30575318 – petey

risposta

26

Secondo il manuale, https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins, è sufficiente spostare la corrispondente directory di lavoro nella nuova istanza di Jenkins.

L'opzione "Copia lavoro esistente" richiede che il lavoro esista nell'istanza di Jenkins corrente. È un'opzione per usare il lavoro esistente come modello. Non può essere utilizzato per spostare i lavori tra le istanze.

+1

Non esattamente quello che volevo sentire, ma grazie comunque. – Isaac

+0

Ci scusiamo per questo;) – Magnus

+3

Si noti che sarà necessario ricaricare la configurazione dal disco affinché il lavoro copiato venga visualizzato nella nuova istanza di Jenkins. C'è un collegamento nelle pagine di amministrazione per eseguire la ricarica. Dovresti aggiungere questo alla tua risposta. –

15

C'è un plugin per farlo online senza copie di file (che funziona anche): il plugin processo di importazione: https://wiki.jenkins-ci.org/display/JENKINS/Job+Import+Plugin

riguarda

Didier

+0

Oggi in 1.2, non funziona con le promozioni . –

+0

Abbastanza pulito. Funziona bene. – FacePalm

+1

Questo potrebbe essere stato bello - ma non funziona per me –

2

processo di importazione Plugin è il modo più semplice per copia i lavori da un'istanza di jenkins ad un'altra. Se questo non funziona a causa di alcuni problemi di sicurezza si può solo copiare la directory intere posti di lavoro da esempio vecchi Jenkins nella nuova istanza Jenkins. I lavori sono presenti in {Jenkins_Home} \ jobs .. sul server.

Una volta terminata la copia, è sufficiente ricaricare la configurazione su nuova istanza. Puoi ricaricarlo da Jenkins-> Gestisci Jenkins-> Ricarica configurazione da disco

Una volta che il ricaricamento è completo puoi vedere i tuoi lavori. :)

1

Hai solo bisogno di creare una directory con lo stesso nome del lavoro e copiare il file config.xml dal Jenkins originale.

Basta fare attenzione che se è necessario conservare la numerazione di build, è necessario copiare il numero nel file del numero di build e fare attenzione se si dispone di plug-in diversi su entrambi i server Jenkins, come dice @LeeMeador nei suoi commenti.

+0

Se si desidera conservare le sequenze di numerazione della build (forse le si registra su Jira per esempio) è necessario copiare anche il numero nel file del numero di build. Si trova nella stessa cartella accanto a config.xml. –

+0

Non dimenticare che config.xml contiene cose relative ai plugin. Se disponi di plug-in diversi nel nuovo Jenkins, ti consigliamo di andare alla schermata di configurazione di Jenkins per tutti i lavori copiati per verificare le impostazioni e salvare di nuovo. –

+0

Hai ragione in quei due commenti @LeeMeador – Roberto

0

Ho usato Perl per automatizzare tali processi utilizzando la CLI (vai a $ jenkins_URL/cli/e scarica Je nkins-cli.jar) (sceneggiatura cambiato lo scenario)

E 'importante assicurarsi che siano presenti tutti i plug-in necessari installati sul nuovo Jenkins altrimenti qualsiasi metodo di migrazione non funziona ...

my $newJobPrefix = "New_Jenkins"; 
my $jobPrefix = "Old_Jenkins"; 
my $result = `"$java" -jar old-jenkins-cli.jar -noKeyAuth -s $jenkins_URL list-jobs All`; 
@jobList = split("\n", $result); 
foreach my $job (@jobList) 
{ 
    # ---- Getting configuration of jobs ---- 
    print "Getting config for: $job \n"; 
    my $config = `"$java" -jar $jenkinsJar -noKeyAuth -s $jenkins_URL get-job $job`; 

    my $file = "$jobPrefix\\$job.xml"; 
    unless(open FILE, '>', $file) {die "Unable to open $file";} 
    print FILE $config; 
    close FILE; 

    # ---- Adding Job to new Jenkins ---- 
    my $result = `"$java" -jar new-jenkins-cli.jar -noKeyAuth -s $New_jenkins_URL create-job $job< $file`; 
} 

Buona fortuna!

+0

Buona fortuna perché stai difendendo Perl? Questo può funzionare, ma richiede che parecchie cose siano vere: A> la giusta versione di java disponibile, B> la presenza di "old-jenkins-cli.jar" e "new-jenkins-cli.jar", C> l'uso di una forma ormai deprecata di comandi cli, D> lavoro Perl, E> quel vecchio e nuovo server hanno lo stesso (o MOLTO simile) plugin e configurazione, F> Che i lavori copiati non fanno affidamento su altri contenuti come credenziali o ambiente locale. –

+0

Ciao Steven. Non ho detto "usa Perl", è quello che ho usato per quel compito specifico. Fa parte di un'automazione più ampia per un ambiente di gestione temporanea che assicura l'applicazione delle stesse versioni dei plug-in, dell'ambiente e di altre configurazioni quando si organizza automaticamente il nuovo server. Poiché la domanda riguardava questa sezione, l'ho condivisa. Non deve essere Perl, e mostra solo un altro metodo programmatico come possibilità per ottenerlo. Inoltre, nessuna delle risposte ha riguardato la mancata corrispondenza dei plug-in o delle configurazioni dell'ambiente, quindi non riesco a capire il tuo punto. – Dvir669

+0

Firmo anche la maggior parte delle mie risposte con Good Luck. – Dvir669

3

Si potrebbe anche fare questo su riga di comando:

  1. Raccogliere i token di autenticazione API dalle due istanze Jenkins per l'utente: http://<jenkins-server>/user/<username>/configure
  2. comando Curl per creare un lavoro sulla nuova istanza dalla configurazione di l'istanza precedente: curl -k -s http://<user>:<token>@OLD_JENKINS/job/JOBNAME/config.xml | curl -k -X POST https://<user>:<token>@http://NEW_JENKINS/createItem?name=JOBNAME --header "Content-Type: application/xml" -d @-

(per gentile concessione di https://stackoverflow.com/a/30575318/3891027)

0
  1. Copia il lavoro nella cartella esistente
  2. spostare il lavoro nella nuova cartella
Problemi correlati