Come spostare Jenkins da un PC a un altro


154

Attualmente sto usando Jenkins sul mio PC di sviluppo. L'ho installato sul mio PC di sviluppo, perché avevo una conoscenza limitata di questo strumento; così ho provato su di esso nel mio PC di sviluppo. Ora mi sento a mio agio con Jenkins come mio "partner" a lungo termine nel processo di creazione e vorrei "spostare" questo Jenkins su un server dedicato.

Prima di questo ho fatto alcune build e ho i manufatti archiviati da ogni build. In particolare, il numero di build è molto importante per me per il controllo della versione.

Come posso esportare tutte le informazioni di Jenkins dal mio PC attuale sul mio nuovo server?


6
L'ho appena fatto. Ho seguito i passaggi della risposta di Cédric Julien, ma ho scoperto che su Windows dovevo eseguire un'installazione di riparazione prima che Jenkins potesse avviarsi correttamente dopo lo spostamento. Dopo la riparazione, va tutto bene.
Puffo 269

Risposte:


175

Seguendo la wiki di Jenkins , dovrai:

  • Installa una nuova istanza di Jenkins sul nuovo server
  • Assicurati che le vecchie e nuove istanze di Jenkins siano interrotte
  • Archivia tutto il contenuto di JENKINS_HOME della vecchia istanza di Jenkins
  • Estrarre l'archivio nella nuova directory JENKINS_HOME
  • Avvia la nuova istanza di Jenkins
  • Non dimenticare di modificare la documentazione / i collegamenti alla nuova istanza di Jenkins :)
  • Non dimenticare di cambiare il proprietario dei nuovi file Jenkins: chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOME è di default situato in ~/.jenkinsun'installazione di Linux, ancora esattamente trovare dove si trova, andare sulla http: // your_jenkins_url / configure pagina e controllare il valore del primo parametro: Home directory; questo è il JENKINS_HOME.


1
Quando ho lanciato i miei nuovi jenkins, i miei nodi vengono mostrati, il che è corretto. Ma quando ho cliccato su un nodo gli URL ci stanno puntando a vecchi jenkins come di seguito: Esegui da riga di comando slave: javaws old-jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp O se lo slave è senza testa: java -jar slave.jar -jnlpUrl old-jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp Ora Come devo fare in modo che questi URL per ogni nodo facciano riferimento a new-jenkins-server?
Merlachandra,

13
Ho trovato la soluzione al mio problema menzionato nel mio commento precedente: Vai a Gestisci Jenkins> configura sistema. Qui nella sezione 'Posizione Jenkins', sotto il campo 'URL Jenkins', cambia l'URL per puntarlo al nuovo server Jenkins.
Merlachandra,

3
assicurati di copiare anche le cartelle nascoste!
mohi,

7
haha +1 per "non dimenticare di cambiare la documentazione / i collegamenti alla tua nuova istanza di Jenkins"
Iain Smith,

2
Ho avuto problemi con i permessi e la proprietà dei file corretti, per risolverlo ho usato questo script docker (la parte che imposta proprietà / permessi): hub.docker.com/r/appcontainers/jenkins/~/dockerfile
marcinj

53

Nel caso in cui la tua directory JENKINS_HOME sia troppo grande per essere copiata e tutto ciò di cui hai bisogno è impostare gli stessi lavori, le configurazioni Jenkins e le configurazioni Jenkins (e non hanno bisogno di vecchi manufatti e rapporti sui lavori), puoi usare il plugin ThinBackup :

  1. Installare ThinBackup su entrambi i server Jenkins di origine e di destinazione
  2. Configurare la directory di backup su entrambi (in Gestisci Jenkins -> ThinBackup -> Impostazioni)

  3. Su Sourse Jenkins vai su ThinBackup -> Backup Now

  4. Copia dalla directory di backup di origine Jenkins alla directory di backup di destinazione Jenkins
  5. Su Target Jenkins vai su ThinBackup -> Ripristina, quindi riavvia il servizio Jenkins.
  6. Se mancano alcuni plugin o lavori, copiare il contenuto del backup direttamente sulla destinazione JENKINS_HOME.

  7. Se disponevi dell'autenticazione utente sul Jenkins di origine e ora bloccato sul Jenkins di destinazione, modifica Jenkins config.xml, imposta <useSecurity>su false e riavvia Jenkins.


2
Perché la directory JENKINS_HOME sarebbe mai troppo grande per essere copiata? Di che tipo di dimensioni stiamo parlando?
wotanii,

9
my jenkins_home è circa 100 GB, non voglio copiarlo su un nuovo server, poiché è principalmente roba da buttare via
user230910

3
My Jenkins_home è ~ 4TB, quindi è utile una copia sottile che porta solo la configurazione e nessuna delle storie di build o /contentent / usercontent.
VolleyJosh,

Fantastico, Plugin ... Davvero risparmiato un sacco di tempo .. far fronte a centinaia di GB non è un lavoro facile
Swapnil Kotwal

11

Questo ha funzionato per me per passare da Ubuntu 12.04 (Jenkins versione 1.628) a Ubuntu 16.04 (Jenkins versione 1.651.2). Ho installato Jenkins per la prima volta dai repository .

  1. Arrestare entrambi i server Jenkins
  2. Copia JENKINS_HOME(ad esempio / var / lib / jenkins) dal vecchio server a quello nuovo. Da una console nel nuovo server:

    rsync -av username@old-server-IP:/var/lib/jenkins/ /var/lib/jenkins/

  3. Avvia il tuo nuovo server Jenkins

Potresti non averne bisogno, ma ho dovuto

  • Manage Jenkinse Reload Configuration from Disk.
  • Scollegare e ricollegare tutti gli slave.
  • Verificare che in Configure System > Jenkins Location, il Jenkins URLsia assegnato correttamente al nuovo server Jenkins.

La nuova Jenkins aveva la stessa versione di quella vecchia?
Jakub Czaplicki,

@JakubCzaplicki - Entrambi i Jenkins erano 1.6, ma non esattamente la stessa versione. Risposta aggiornata Ho quindi aggiornato Ubuntu 16.04 a Jenkins 2.6 sostituendo il file jenkins.war e ha funzionato bene. stackoverflow.com/questions/11062335/…
Katu il

Dopo aver fatto quanto sopra e aver visitato, /configureSecurityricevojava.lang.AssertionError: InstanceIdentity is missing its singleton
maxisme

@maxisme, in ritardo ma questo thread suggerisce che il problema che hai citato è legato alla versione java. issues.jenkins-ci.org/browse/JENKINS-46182
Katu

1

Automazione server Jenkins:

Passo 1:

Configurare un repository per archiviare la casa Jenkins (lavori, configurazioni, plugin, ecc.) In un repository GitLab locale o GitHub privato e mantenerlo aggiornato regolarmente spingendo qualsiasi nuova modifica ai lavori Jenkins, plugin, ecc.

Passo 2:

Configurare un gruppo host / ruolo Puppet per Jenkins che può essere utilizzato per creare nuovi server Jenkins. Esegui tutte le configurazioni di base in una ricetta Puppet e assicurati che installi l'ultima versione di Jenkins e imposti una directory / mount separata per JENKINS_HOME.

Passaggio 3:

Fai girare una nuova macchina usando la configurazione di marionette Jenkins sopra. Quando tutto è installato, prendi / clona la configurazione di Jenkins dal repository Git alla directory home di Jenkins e riavvia Jenkins.

Step 4:

Vai all'URL di Jenkins, Gestisci JenkinsGestisci plugin e aggiorna tutti i plugin che richiedono un aggiornamento.

Fatto

È possibile utilizzare Docker Swarm o Kubernetes per ridimensionare automaticamente i nodi slave.


1

A volte potremmo non avere accesso a una macchina Jenkins per copiare una cartella direttamente in un'altra istanza di Jenkins. Così ho scritto un'utilità basata su menu che utilizza le chiamate API REST Jenkins per installare plug-in e processi da un'istanza Jenkins a un'altra.

Per la migrazione dei plug-in:

  1. RICHIEDI richiesta: {SOURCE_JENKINS_SERVER}/pluginManager/api/json?depth=1ti mostrerà l'elenco dei plugin installati con la loro versione.
  2. È possibile inviare una richiesta POST con i seguenti parametri per installare questi plugin.

    final_url=`{DESTINATION_JENKINS_SERVER}/pluginManager/installNecessaryPlugins`
    
    data=`<jenkins><install plugin="{PLUGIN_NAME}@latest"/></jenkins>` (where, latest will fetch the latest version of the plugin_name)
    
    auth=`(destination_jenkins_username, destination_jenkins_password)`
    
    header=`{crumb_field:crumb_value,"Content-Type":"application/xml”}` (where crumb_field=Jenkins-Crumb and get crumb value using API call {DESTINATION_JENKINS_SERVER}/crumbIssuer/api/json
    

Per la migrazione dei lavori:

  1. Puoi ottenere l'elenco dei lavori installati su {SOURCE_JENKINS_URL} utilizzando una chiamata REST, {SOURCE_JENKINS_URL}/view/All/api/json
  2. Quindi è possibile ottenere ogni file config.xml dei lavori dai lavori su {SOURCE_JENKINS_URL} utilizzando l'URL del lavoro {SOURCE_JENKINS_URL}/job/{JOB_NAME}.
  3. Utilizzare questo file config.xml per pubblicare il contenuto del file XML su {DESTINATION_JENKINS_URL} e ciò creerà un lavoro su {DESTINATION_JENKINS_URL}.

Ho creato un'utilità basata su menu in Python che chiede all'utente di avviare la migrazione di plugin o Jenkins e utilizza le chiamate API REST Jenkins per farlo.

È possibile fare riferimento a JenkinsMigration.docx da questo URL


Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.
Vich
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.