Não é uma resposta direta à sua pergunta, mas algumas práticas recomendadas: tente escrever sua configuração de trabalho com o Jenkins Pipeline DSL e faça parte dos repositórios dos seus projetos. Assim, os trabalhos são facilmente portáteis de um servidor Jenkins para o outro. Veja github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md
O truque provavelmente foi a necessidade de recarregar a configuração da página de configuração do Jenkins.
Atualização 2020.03.10
O cenário do JenkinsCI mudou muito ... Estou usando o Job DSL há algum tempo. Temos um trabalho do SEED que gera o restante dos trabalhos.
Isso nos ajuda a recriar ou migrar para o servidor Jenkins sempre que necessário :) Você também pode criar uma versão desses arquivos para manter ainda mais a capacidade de manutenção!
Para que isso funcione, o java no servidor antigo, no novo servidor e na máquina local precisa ter a mesma versão. Caso contrário, surgem problemas estranhos de fluxo / versão. Suas portas jnlp também precisam estar abertas.
MaratC
O caminho completo para o cliente CLI é JENKINS_HOME / war / WEB-INF / jenkins-cli.jar em que JENKINS_HOME está no local de JENKINS_HOME
Rob Kielty
1
Esse método tem problemas com e comercial vazio no XML, como quando você possui & no código Groovy.
Rob Kielty 30/05
e comercial não codificado no XML exportado pode ocorrer no código Groovy que respalda os parâmetros do Active Choice Plugin (não-escolha); apresentará solução, se eu puder.
Rob Kielty
1
@information_interchange exatamente como proposto na minha resposta abaixo.
Precisa de tokens de autenticação para funcionar, mas o aço é um excelente trabalho!
Viroide 11/01
7
curl -s http: // <USER>: <API_TOEKN> @ OLD_JENKINS / job / JOBNAME / config.xml | curl -X POST 'http: // <USER>: <API_TOEKN> @ NEW_JENKINS / createItem? name = JOBNAME' --header "Tipo de conteúdo: application / xml" -d @ - <br/> Obtenha a chave da API do usuário de : JENKIS_URL / user / <USER> / configure > token da API> Mostrar token da API
Suhas Gaikwad
1
Apenas uma contribuição adicional sobre isso. Ao fazer o POST no servidor de destino, é provável que você obtenha um código de erro HTTP 403 Problema ao acessar / createItem. Motivo: nenhuma migalha válida foi incluída na solicitação. Você precisará gerar um token de proteção CSRF para o servidor Jenkins de destino. Siga o conselho de @Kenorb a partir deste tópico: stackoverflow.com/questions/38137760/…
Mig82
2
Nem precisa usar os comandos curl, pois você pode simplesmente acessar o http://OLD_JENKINS/job/JOBNAME/config.xmllink no seu navegador para pegar o config.xmlarquivo.
entpnerd
1
Você precisa, em --data-binaryvez de -dno curlcomando, porque -dpode atrapalhar o espaço em branco em seus scripts.
Gabor Csardi 8/11
24
Existe um plugin chamado Job Import Plugin que pode ser o que você está procurando. Eu usei isso. Ele tem problemas com a importação de projetos de um servidor que não permite acesso anônimo.
Para completar: se você tiver acesso à linha de comando para ambos, poderá executar o procedimento já mencionado por Khez para mover, copiar e renomear trabalhos Jenkins .
Não acredito que atualmente mova outra coisa senão a configuração.
jwernerny
14
Vá para a página inicial do servidor Jenkins, clique na API REST na parte inferior da página:
Criar trabalho
Para criar um novo trabalho, poste config.xmlneste URL com o parâmetro de consulta name=JOBNAME. Você precisa enviar um Content-Type: application/xmlcabeçalho. Você receberá 200código de status se a criação for bem-sucedida ou 4xx/5xxcódigo se falhar. config.xmlé o formato que o Jenkins usa para armazenar o projeto no sistema de arquivos, para que você possa ver exemplos deles no diretório inicial do Jenkins ou recuperando a configuração XML dos trabalhos existentes /job/JOBNAME/config.xml.
Propriedade do usuário jenkins e grupo jenkins com 644 permissões. Copiar o arquivo para e daqui deve funcionar. Não tentei alterá-lo diretamente, mas fiz o backup da configuração a partir deste local, caso o projeto precise ser configurado novamente.
no WindowsC:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
Sasha Bond
8
O plug - in Job Import é a maneira mais fácil de importar trabalhos de outra instância do Jenkins. Só é necessário fornecer o URL da instância de Jenkins de origem. A URL remota do Jenkins pode ter qualquer um dos seguintes tipos de URL:
http://$JENKINS - obter todos os trabalhos na instância remota
http://$JENKINS/job/$JOBNAME - conseguir um emprego único
http://$JENKINS/view/$VIEWNAME - obtenha todos os trabalhos em uma exibição específica
Graças à resposta de Larry Cai, consegui criar um script para fazer backup de todos os meus trabalhos de Jenkins. Eu criei um trabalho que executa isso toda semana. Caso alguém ache útil, aqui está:
#!/bin/bash
#IFS for jobs with spaces.
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i in $(java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ list-jobs);
do
java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ get-job ${i} > ${i}.xml;
done
IFS=$SAVEIFS
mkdir deploy
tar cvfj "jenkins-jobs.tar.bz2" ./*.xml
Trabalhos de exportação de Jenkins para um diretório
#! /bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
declare -i j=0
for i in $(java -jar jenkins-cli.jar -s http://server:8080/jenkins list-jobs --username **** --password ***);
do
let "j++";
echo $j;
if [ $j -gt 283 ] // If you have more jobs do it in chunks as it will terminate in the middle of the process. So Resume your job from where it ends.
then
java -jar jenkins-cli.jar -s http://lxvbmcbma:8080/jenkins get-job --username **** --password **** ${i} > ${i}.xml;
echo "done";
fi
done
Importar trabalhos
for f in *.xml;
do
echo "Processing ${f%.*} file.."; //truncate the .xml extention and load the xml file for job creation
java -jar jenkins-cli.jar -s http://server:8080/jenkins create-job ${f%.*} < $f
done
Para aqueles de nós no mundo Windows que podem ou não ter o Bash disponível, aqui está minha abordagem do PowerShell sobre a abordagem de Katu e Larry Cai . Espero que ajude alguém.
##### Config vars #####
$serverUri ='http://localhost:8080/'# URI of your Jenkins server
$jenkinsCli ='C:\Program Files (x86)\Jenkins\war\WEB-INF\jenkins-cli.jar'# Path to jenkins-cli.jar on your machine
$destFolder ='C:\Jenkins Backup\' # Output folder (will be created if it doesn't exist)
$destFile ='jenkins-jobs.zip'# Output filename (will be overwritten if it exists)########################
$work =Join-Path([System.IO.Path]::GetTempPath())([System.IO.Path]::GetRandomFileName())New-Item-ItemTypeDirectory-Force-Path $work |Out-Null# Suppress output noise
echo "Created a temp working folder: $work"
$jobs =(java -jar $jenkinsCli -s $serverUri list-jobs)
echo "Found $($jobs.Length) existing jobs: [$jobs]"
foreach ($j in $jobs){
$outfile =Join-Path $work "$j.xml"
java -jar $jenkinsCli -s $serverUri get-job $j |Out-File $outfile
}
echo "Saved $($jobs.Length) jobs to temp XML files"New-Item-ItemTypeDirectory-Force-Path $destFolder |Out-Null# Suppress output noise
echo "Found (or created) $destFolder folder"
$destPath =Join-Path $destFolder $destFile
Get-ChildItem $work -Filter*.xml |Write-Zip-Level9-OutputPath $destPath -FlattenPaths|Out-Null# Suppress output noise
echo "Copied $($jobs.Length) jobs to $destPath"Remove-Item $work -Recurse-Force
echo "Removed temp working folder"
Isso pode funcionar para alguns, mas não para mim. Isso funciona apenas se a nova instância do Jenkins tiver acesso direto à antiga instância do Jenkins. Os meus estavam em duas redes diferentes.
Justin Domnitz
1
O script php simples funcionou para mim.
Exportar:
// add all job codes in the array
$jobs = array("job1", "job2", "job3");
foreach ($jobs as $value)
{
fwrite(STDOUT, $value. " \n") or die("Unable to open file!");
$path = "http://server1:8080/jenkins/job/".$value."/config.xml";
$myfile = fopen($value.".xml", "w");
fwrite($myfile, file_get_contents($path));
fclose($myfile);
}
Importar:
<?php
// add all job codes in the array
$jobs = array("job1", "job2", "job3");
foreach ($arr as $value)
{
fwrite(STDOUT, $value. " \n") or die("Unable to open file!");
$cmd = "java -jar jenkins-cli.jar -s http://server2:8080/jenkins/ create-job ".$value." < ".$value.".xml";
echo exec($cmd);
}
A maneira mais fácil, com acesso direto à máquina, é copiar a pasta da tarefa dos primeiros jenkins para outra (você pode excluir áreas de trabalho - workspacepasta), porque toda a configuração da tarefa é armazenada no arquivo xml no disco.
Então, nos novos Jenkins, apenas reload configuration nas configurações globais (é necessário acesso de administrador), se não for o suficiente, será necessário reiniciar a ferramenta Jenkins.
Outra maneira pode ser usar os plugins mencionados acima neste post.
edit: - caso você provavelmente também possa excluir modulespastas
Respostas:
Jenkins tem um wiki bastante bom, embora difícil de ler quando você é novo no software CI ...
Eles oferecem uma solução simples para mover tarefas entre servidores
O truque provavelmente foi a necessidade de recarregar a configuração da página de configuração do Jenkins.
Atualização 2020.03.10
O cenário do JenkinsCI mudou muito ... Estou usando o Job DSL há algum tempo. Temos um trabalho do SEED que gera o restante dos trabalhos.
Isso nos ajuda a recriar ou migrar para o servidor Jenkins sempre que necessário :) Você também pode criar uma versão desses arquivos para manter ainda mais a capacidade de manutenção!
fonte
Provavelmente, usar a linha de comando jenkins é outra opção, consulte https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
Então você pode fazer
Funciona bem para mim e estou acostumado a armazenar dentro do meu sistema de controle de versão
fonte
Uma linha:
Com autenticação:
Com o Crumb, se o CSRF estiver ativo ( veja detalhes aqui ):
Faça migalhas com:
Aplique a migalha com
-H CRUMB
:fonte
http://OLD_JENKINS/job/JOBNAME/config.xml
link no seu navegador para pegar oconfig.xml
arquivo.--data-binary
vez de-d
nocurl
comando, porque-d
pode atrapalhar o espaço em branco em seus scripts.Existe um plugin chamado Job Import Plugin que pode ser o que você está procurando. Eu usei isso. Ele tem problemas com a importação de projetos de um servidor que não permite acesso anônimo.
Para completar: se você tiver acesso à linha de comando para ambos, poderá executar o procedimento já mencionado por Khez para mover, copiar e renomear trabalhos Jenkins .
fonte
Vá para a página inicial do servidor Jenkins, clique na API REST na parte inferior da página:
Para criar um novo trabalho, poste
config.xml
neste URL com o parâmetro de consultaname=JOBNAME
. Você precisa enviar umContent-Type: application/xml
cabeçalho. Você receberá200
código de status se a criação for bem-sucedida ou4xx/5xx
código se falhar.config.xml
é o formato que o Jenkins usa para armazenar o projeto no sistema de arquivos, para que você possa ver exemplos deles no diretório inicial do Jenkins ou recuperando a configuração XML dos trabalhos existentes/job/JOBNAME/config.xml
.fonte
Na minha instância do Jenkins (versão 1.548), o arquivo de configuração está em:
/var/lib/jenkins/jobs/-the-project-name-/config.xml
Propriedade do usuário jenkins e grupo jenkins com 644 permissões. Copiar o arquivo para e daqui deve funcionar. Não tentei alterá-lo diretamente, mas fiz o backup da configuração a partir deste local, caso o projeto precise ser configurado novamente.
fonte
C:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
O plug - in Job Import é a maneira mais fácil de importar trabalhos de outra instância do Jenkins. Só é necessário fornecer o URL da instância de Jenkins de origem. A URL remota do Jenkins pode ter qualquer um dos seguintes tipos de URL:
http://$JENKINS
- obter todos os trabalhos na instância remotahttp://$JENKINS/job/$JOBNAME
- conseguir um emprego únicohttp://$JENKINS/view/$VIEWNAME
- obtenha todos os trabalhos em uma exibição específicafonte
Graças à resposta de Larry Cai, consegui criar um script para fazer backup de todos os meus trabalhos de Jenkins. Eu criei um trabalho que executa isso toda semana. Caso alguém ache útil, aqui está:
fonte
Em um navegador da web, visite:
Apenas salve o arquivo no seu disco.
fonte
Trabalhos de exportação de Jenkins para um diretório
Importar trabalhos
fonte
Para aqueles de nós no mundo Windows que podem ou não ter o Bash disponível, aqui está minha abordagem do PowerShell sobre a abordagem de Katu e Larry Cai . Espero que ajude alguém.
fonte
É muito fácil apenas baixar o nome do plugin
Job Import Plugin
Digite o URL do servidor Remote Jenkins e ele importará os trabalhos automaticamente
fonte
O script php simples funcionou para mim.
Exportar:
Importar:
fonte
Isso não funciona para trabalhos existentes, no entanto, existe o construtor de trabalhos Jenkins .
Isso permite manter definições de trabalho em arquivos yaml e em um repositório git, que é muito portátil.
fonte
A maneira mais fácil, com acesso direto à máquina, é copiar a pasta da tarefa dos primeiros jenkins para outra (você pode excluir áreas de trabalho -
workspace
pasta), porque toda a configuração da tarefa é armazenada no arquivo xml no disco.Então, nos novos Jenkins, apenas
reload configuration
nas configurações globais (é necessário acesso de administrador), se não for o suficiente, será necessário reiniciar a ferramenta Jenkins.Outra maneira pode ser usar os plugins mencionados acima neste post.
edit: - caso você provavelmente também possa excluir
modules
pastasfonte
Importando trabalhos manualmente: maneira alternativa
Carregar os trabalhos no Git (controle de versão) Carregue basicamente o config.xml do trabalho.
Se servidores Linux:
Reinicie o Jenkins
fonte
Como usuário da web, você pode exportar acessando o Job Config History e exportando XML.
Estou na situação de não ter acesso à máquina em que Jenkins está sendo executado e queria exportar como backup.
Quanto à importação do xml como usuário da web, eu ainda gostaria de saber.
fonte