迁移 Nexus 软件仓库拾遗

栏目: 编程工具 · 发布时间: 6年前

内容简介:国庆前,我把之前老设备上面运行的服务进行了完整的迁移。但是在迁移代码仓库的过程中,发现有一些小细节挺有意思的。因为我的所有服务配置都保存在了 CVS 系统中,所以在新的机器上启动服务,只需要然后在

国庆前,我把之前老设备上面运行的服务进行了完整的迁移。但是在迁移代码仓库的过程中,发现有一些小细节挺有意思的。

启动新的仓库服务实例

因为我的所有服务配置都保存在了 CVS 系统中,所以在新的机器上启动服务,只需要 Git Clonedocker-compose up 两步走。

然后在 DNSMASQ 中将解析从老设备指向到新设备即可,比如:

address=/docker.lab.com/10.11.12.232
address=/npm.lab.com/10.11.12.232
address=/nexus.lab.com/10.11.12.232

进行仓库数据迁移

之前我保存持久化数据使用的是 Mount 方式,这样做的好处是几乎不存在执行 docker prune 等操作误伤有用数据的情况。

但是缺点也明显,简单的打压缩包,进行数据迁移对于这种场景不好使。

这里有一个简单的方案:将之前保存在老仓库的软件包进行批量下载,然后重新推送到新的仓库。

转移 Docker 镜像

使用 docker pull 把要转移的镜像下载完毕后,使用 docker images 命令,配合 grep 以及 awk 可以快速的筛选出需要进行转移的镜像名称和版本。

$ docker images | grep 'docker.lab.com' | grep -v '<none>' | awk '{printf("%s:%s\n", $1, $2)}'
docker.lab.com/hugo-post-adapter:1.0.0-convert
docker.lab.com/aria2:1.0.0
docker.lab.com/pushover.lab.com:0.0.1
docker.lab.com/sonar.lab.com:7.3
...

然后使用 xargs 将这些镜像逐个推送到新仓库即可。

$ docker images | grep 'docker.lab.com' | grep -v '<none>' | awk '{printf("%s:%s\n", $1, $2)}' | xargs -I {} docker push {}
The push refers to repository [docker.lab.com/hugo-post-adapter]
d48cccfd71ab: Pushed 
d04f8a556ca9: Pushed 
e58056ca81cc: Pushed 
984705602673: Pushed 
6a2901185647: Pushed 
2d4ed44f6fa7: Pushed 
35e23a957234: Pushed 
894a6015dedf: Pushed 
2d790067a9f7: Pushed 
32b5d1364b1c: Pushed 
fbebd655f9aa: Pushed 
90e156c66608: Pushed 
a5a2fa193409: Pushed 
bc912d07a289: Pushed 
905f2907ec29: Pushed 
73046094a9b8: Pushed 
1.0.0-convert: digest: sha256:fe391b4bcd2f2af0373b969f68f3f56a0ca1ac097257160c4abf135d31d39a7d size: 3668
The push refers to repository [docker.lab.com/aria2]
165e36b92662: Pushed 
a1da261fbc00: Pushed 
5e8644249a98: Pushed 

当然,如果你要全面进行备份,而不是简单的重新推送镜像到新仓库的话,可以用下面的脚本:

docker images | tail -n +2 | grep -v "<none>" | awk '{printf("%s:%s\n", $1, $2)}' | while read IMAGE; do
    echo "find image: $IMAGE"
    filename="$(echo $IMAGE| tr ':' '-' | tr '/' '-').tar"
    echo "save as $filename"
    docker save ${IMAGE} -o $filename
done

转移 NPM 包

这个就更简单了,使用 git checkout releaseTag ,然后重新 npm pub 就完事了。

Nexus 3.3.x 镜像权限问题

如果你使用了 Nexus 3.3.x 版本的镜像,并且将数据映射到了外部文件系统,大概率会遇到下面的报错。

mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
 
mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied
 
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory

解决方法很简单,在你映射的外部文件系统中执行下面的命令,将目录权限归属设定为 200

sudo chown -R 200 ~/dockerVolume/nexus

最后

Nexus 相比一些后起之秀而言,管理界面可能相对简单了一些,但是不论是资源占用,还是软件整体的稳定性来说,都十分优秀。

在我使用了快一年的时间里,在上面积累了接近 5G 的代码包(hosted+proxy)和镜像文件(hosted),迁移时发现产生的磁盘碎片仅有100M不到,而且支持集群模式,以及市面上几乎所有的语言仓库协议,具备定时任务…

如果你或者你的团队在使用 CI/CD 进行敏捷开发,但是又缺乏一个稳定的内部仓库,可以试试这款不错的软件。

如果你有意向了解或者学习 Nexus 的搭建和使用,或许我可以写一篇详细的从搭建到使用。

—EOF


以上所述就是小编给大家介绍的《迁移 Nexus 软件仓库拾遗》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

UML用户指南

UML用户指南

[美] Grady Booch、James Rumbaugh、Ivar Jacobson / 邵维忠、麻志毅、马浩海、刘辉 / 人民邮电出版社 / 2006-6 / 49.00元

《UML用户指南》(第2版)是UML方面最权威的一本著作,三位作者是面向对象方法最早的倡导者,是UML的创始人。本版涵盖了UML 2.0。书中为具体的UML特征提供了参考,描述了一个使用UML进行开发的过程,旨在让读者掌握UML的术语、规则和语言特点,以及如何有效地使用这种语言,知道如何应用UML去解决一些常见的建模问题。《UML用户指南》(第2版)由7个部分组成,而且每章都描述了一个特定UML特......一起来看看 《UML用户指南》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器