Atualmente, estou trabalhando na migração de quase 80 servidores jenkins para nossa empresa em um único servidor jenkins. Eu já trabalhei como isso vai aparecer uma vez que os trabalhos migraram, no entanto, conseguir os trabalhos está provando ser um pouco difícil.
O que eu tenho atualmente é um comando rsync que controla todos os jobs e builds e está funcionando bem, mas isso não é mais viável em servidores inchados:
sshpass -p '*****' \
rsync -rmvptgolD \
--exclude='*/archive/*' \
--include='legacyIds' \
--include='nextBuildNumber' \
--include='last*Build' \
--include='log' \
--include='*.txt' \
--include='*.html' \
--include='build.xml' \
--include='changelog.xml' \
--include='config.xml' \
--include='*/' \
--exclude='*' \
-e 'ssh -o StrictHostKeyChecking=no -l user' \
user@server:/var/lib/jenkins/jobs/ \
/<destination>/jobs
sim, eu sei que sshpass
é inseguro, esses servidores foram criados muito antes do meu tempo e não podemos adicionar chaves a eles para tornar essa conexão segura, pois agora estou com a parte sshpass
.
Este comando rsync funciona perfeitamente nos servidores Jenkins que não têm muitos jobs / builds, mas o que eu encontrei está me forçando a reduzir as informações que temos certeza que ninguém mais precisa.
Eu me deparei com um servidor que agora tem mais de 5.000 empregos e cada um tem cerca de 50.000 builds, o que é um exagero, portanto, estabelecendo as metas abaixo
O objetivo final é copiar:
All jobs and the last 10 builds for each job
OR
All jobs and the last failed build and last successful build for each job
Minha principal questão é como adicionar um filtro rsync de algum tipo para incluir apenas os últimos 10 subdiretórios? ou algo assim. OU manter links simbólicos e copiar seu link como uma entidade separada?
este é um exemplo da estrutura de pastas de um servidor Jenkins:
jenkins/
config.xml
jobs/
Job1/
config.xml
builds/
1/
build.xml
archive/
log
2/
build.xml
archive/
log
3/
build.xml
archive/
log
4/
build.xml
archive/
log
n/
build.xml
archive/
log
lastFailedBuild/ -> 3/
lastSuccessfulBuild/ -> 4/
Job2/
...
Onde os diretórios build / [0-9] * / são o ID de construção em jenkins.
Qualquer ajuda seria muito apreciada, eu olhei rapidamente para a opção -L mas parece que remove o symlink, mesmo com -K e -k
Obrigado!
Tags bash symbolic-link rsync jenkins linux