我目前正在将我们公司的近 80 台 Jenkins 服务器迁移到一台 Jenkins 服务器。我已经弄清楚了迁移作业后将出现什么情况,但事实证明,迁移作业有些困难。
我目前有一个 rsync 命令,它可以拉取所有作业并构建并且运行良好,但这在臃肿的服务器上不再可行:
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
是的,我知道sshpass
这是不安全的,这些服务器是在我之前创建的,我们无法向它们添加密钥以使其成为安全连接,现在我只能停留在部分sshpass
。
这个 rsync 命令在没有太多作业/构建的 jenkins 服务器上运行得很好,但我遇到的命令迫使我减少那些我们非常确定没人再需要的信息。
我现在遇到过一台服务器,它有超过 5,000 个作业,每个作业有大约 50,000 个构建,这是过度的,因此设定了以下目标
最终目标是复制:
所有作业以及每项作业的最后 10 次构建
或者
所有作业以及每个作业的最后一次失败构建和最后一次成功构建
我的主要问题是,如何添加某种 rsync 过滤器以仅包含最后 10 个子目录?或类似的东西。或者保留符号链接并将其链接复制为单独的实体?
这是 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/
...
其中 build/[0-9]*/ 目录是 jenkins 中的构建 ID。
任何帮助都将不胜感激,我很快研究了 -L 选项,但它似乎删除了符号链接,-K 和 -k 也是如此
谢谢你!