Como mover o Jenkins de um PC para outro

154

Atualmente, estou usando o Jenkins no meu PC de desenvolvimento. Eu o instalei no meu PC de desenvolvimento, porque eu tinha conhecimento limitado sobre essa ferramenta; então eu testei no meu PC de desenvolvimento. Agora, me sinto à vontade com Jenkins como meu "parceiro" de longo prazo no processo de compilação e gostaria de "mover" essa Jenkins para um servidor dedicado.

Antes disso, eu fazia poucas construções e arquivava os artefatos de cada construção. Em particular, o número da compilação é muito importante para o controle de versão.

Como posso exportar todas as informações do Jenkins do meu PC atual para o meu novo servidor?

huahsin68
fonte
6
Eu acabei de fazer isso. Segui as etapas da resposta de Cédric Julien, mas descobri que no Windows eu precisava executar uma instalação de reparo antes que o Jenkins pudesse iniciar com êxito após a mudança. Após o reparo, está tudo bem.
Smurph269

Respostas:

175

Seguindo o wiki do Jenkins , você terá que:

  • Instale uma instância nova do Jenkins no novo servidor
  • Verifique se as instâncias antiga e nova do Jenkins estão paradas
  • Arquive todo o conteúdo do JENKINS_HOME da instância antiga do Jenkins
  • Extraia o arquivo morto para o novo diretório JENKINS_HOME
  • Inicie a nova instância do Jenkins
  • Não se esqueça de alterar a documentação / links para sua nova instância do Jenkins :)
  • Não esqueça de alterar o proprietário dos novos arquivos Jenkins: chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOME é, por padrão localizado na ~/.jenkinsem uma instalação do Linux, mas exatamente para encontrar onde ele está localizado, vá no http: // your_jenkins_url / configure página e verifique o valor do primeiro parâmetro: Home directory; esse é o JENKINS_HOME.

Cédric Julien
fonte
1
Quando lancei meus novos jenkins, meus nós estão aparecendo, o que está correto. Mas quando eu cliquei em algum nó, os URLs apontam para os antigos Jenkins, como abaixo: Execute a partir da linha de comando slave: javaws old-Jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp Ou se o escravo estiver sem cabeça: java -jar slave.jar -jnlpUrl old-jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp Agora, como devo fazer essas URLs para cada nó apontar para new-jenkins-server?
merlachandra
13
Consegui a solução para o meu problema mencionado no meu comentário anterior: Goto Manage Jenkins> configure system. Aqui na seção 'Localização Jenkins', no campo 'URL Jenkins', altere a URL para apontá-la para o novo servidor Jenkins.
Merlachandra
3
certifique-se de copiar as pastas ocultas também!
Mohi
7
haha +1 para o "não se esqueça de alterar a documentação / links para sua nova instância do Jenkins"
Iain Smith
2
Eu tive problemas com permissões e propriedade de arquivos corretas. Para corrigi-lo, usei este script de janela de encaixe (a parte que define as propriedades / permissões): hub.docker.com/r/appcontainers/jenkins/~/dockerfile
marcinj
53

Caso seu diretório JENKINS_HOME seja muito grande para copiar , e tudo o que você precisa é configurar as mesmas configurações de Jobs, Jenkins Plugins e Jenkins (e não precisar de artefatos e relatórios antigos de Job), então você pode usar o ThinBackup Plugin :

  1. Instale o ThinBackup nos servidores Jenkins de origem e de destino
  2. Configurar o diretório de backup em ambos (em Gerenciar Jenkins -> ThinBackup -> Configurações)

  3. Em Sourse Jenkins, vá para ThinBackup -> Backup Now

  4. Copiar do diretório Jenkins Source Backup para o Jenkins Target Backup Directory
  5. No Target Jenkins, vá para ThinBackup -> Restore e reinicie o serviço Jenkins.
  6. Se alguns plugins ou trabalhos estiverem ausentes, copie o conteúdo do backup diretamente para o JENKINS_HOME de destino.

  7. Se você tinha autenticação de usuário no Jenkins de origem e agora bloqueado no Jenkins de destino, edite o Jenkins config.xml, defina <useSecurity>como false e reinicie o Jenkins.

Noam Manos
fonte
2
Por que o diretório JENKINS_HOME seria muito grande para copiar? De que tipo de tamanhos estamos falando?
wotanii
9
minha jenkins_home é 100Gb ou assim, não quero copiar isso para novo servidor, como sua principalmente jogar fora coisas
user230910
3
Meu Jenkins_home tem ~ 4 TB, portanto, uma cópia fina que carrega apenas a configuração e nenhum histórico de compilação ou / usercontent é útil.
precisa saber é o seguinte
Awesome, Plugins ... Realmente economizou muito tempo ... lidar com 100 GB de GB não é um trabalho fácil
Swapnil Kotwal 16/01
11

Isso funcionou para eu passar do Ubuntu 12.04 (Jenkins ver. 1.628) para o Ubuntu 16.04 (Jenkins ver. 1.651.2). Eu instalei o Jenkins a partir dos repositórios .

  1. Pare os dois servidores Jenkins
  2. Copie JENKINS_HOME(por exemplo, / var / lib / jenkins) do servidor antigo para o novo. Em um console no novo servidor:

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

  3. Inicie seu novo servidor Jenkins

Você pode não precisar disso, mas eu tive que

  • Manage Jenkinse Reload Configuration from Disk.
  • Desconecte e conecte todos os escravos novamente.
  • Verifique se no Configure System > Jenkins Location, a Jenkins URLé corretamente atribuída ao novo servidor Jenkins.
Katu
fonte
O novo Jenkins tinha a mesma versão do antigo?
Jakub Czaplicki
@JakubCzaplicki - Ambos os Jenkins eram 1.6, mas não exatamente a mesma versão. Resposta atualizada. Atualizei o Ubuntu 16.04 para o Jenkins 2.6 substituindo o arquivo jenkins.war e funcionou bem. stackoverflow.com/questions/11062335/…
Katu
Depois de fazer o exposto e visitar /configureSecurityeu recebojava.lang.AssertionError: InstanceIdentity is missing its singleton
maxisme
@ maxisme, tarde, mas este tópico sugere que o problema que você mencionou está relacionado à versão java. Issues.jenkins-ci.org/browse/JENKINS-46182
Katu
1

Jenkins Server Automation:

Passo 1:

Configure um repositório para armazenar a casa Jenkins (tarefas, configurações, plug-ins, etc.) em um repositório local do GitLab ou privado do GitHub e mantenha-o atualizado regularmente, pressionando todas as novas alterações nas tarefas, plug-ins, etc.

Passo 2:

Configure um grupo de host / função Puppet para o Jenkins que possa ser usado para ativar novos servidores Jenkins. Faça toda a configuração básica em uma receita do Puppet e certifique-se de instalar a versão mais recente do Jenkins e de configurar um diretório / montagem separado para JENKINS_HOME.

Etapa 3:

Gire uma nova máquina usando a configuração Jenkins-puppet acima. Quando tudo estiver instalado, pegue / clone a configuração do Jenkins do repositório Git para o diretório doméstico do Jenkins e reinicie o Jenkins.

Passo 4:

Vá para o URL Jenkins, Gerenciar JenkinsGerenciar plug - ins e atualize todos os plug-ins que exigem uma atualização.

Feito

Você pode usar o Docker Swarm ou o Kubernetes para dimensionar automaticamente os nós escravos.

Ijaz Ahmad Khan
fonte
1

Às vezes, podemos não ter acesso a uma máquina Jenkins para copiar uma pasta diretamente para outra instância do Jenkins. Então, escrevi um utilitário orientado a menus que usa as chamadas da API REST do Jenkins para instalar plug-ins e trabalhos de uma instância do Jenkins para outra.

Para migração de plug-ins:

  1. Solicitação GET: {SOURCE_JENKINS_SERVER}/pluginManager/api/json?depth=1você obterá a lista de plugins instalados com sua versão.
  2. Você pode enviar uma solicitação POST com os seguintes parâmetros para instalar esses plug-ins.

    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
    

Para migração de tarefas:

  1. Você pode obter a lista de tarefas instaladas em {SOURCE_JENKINS_URL} usando uma chamada REST, {SOURCE_JENKINS_URL}/view/All/api/json
  2. Em seguida, você pode obter cada arquivo config.xml dos trabalhos em {SOURCE_JENKINS_URL} usando o URL do trabalho {SOURCE_JENKINS_URL}/job/{JOB_NAME}.
  3. Use este arquivo config.xml para POSTAR o conteúdo do arquivo XML em {DESTINATION_JENKINS_URL} e que criará um trabalho em {DESTINATION_JENKINS_URL}.

Criei um utilitário orientado a menus no Python, que solicita ao usuário que inicie a migração de plugins ou Jenkins e usa chamadas da API REST Jenkins para fazer isso.

Você pode consultar o JenkinsMigration.docx a partir deste URL

psalvi21
fonte
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
vich