如何通过推送复制迁移工件

帕特里克·罗素
2023-01-22十一10

相关版本:Artifactory 6。Xand Artifactory 7.X

介绍

本指南是一个方便的补充以最小的停机时间迁移Artifactory篇文章。

这个挑战(在本文中没有讨论)是如何设置(可能的)数千个Push Replication设置。这可以通过一些巧妙的脚本和Artifactory REST API来完成。您还需要下载最新的JFrog命令行利用其复制配置系统。

本指南的局限性

由于本指南设置了推送复制,因此复制只会被删除的一种方法。双向推送复制会导致严重的问题,比如对源工件数据的意外删除。因此,本指南将只设置单向复制Active / Active同步集群可以通过高可用性或其他措施实现。

本指南已在Artifactory 6上进行了测试。X和7。自Artifactory 5.X以来,所涉及的机制没有发生重大变化。

在新工件上创建存储库和设置

可以使用空的System Export将Artifactory配置从旧Artifactory导入到新Artifactory,即使是大规模的。在大规模(超过100万个工件)时,默认的完整系统导出需要很长时间才能完成。出于我们的目的,我们只需要在另一边创建存储库。

您可以通过选中“排除”复选框排除除配置和用户之外的所有内容。这将保存旧Artifactory的配置和权限的几乎空的备份;它应该很快就完成了。

用户添加图片

注意:由于一个开放的错误RTFACT-25899,您必须在Artifactory 7中导出之前解密密码。Xcurl -u admin http://localhost:8081/artifactory/api/system/decrypt -XPOST

(预期的输出)
完成

注意:如果以后出现问题,您应该重新加载导出的配置以撤销复制设置

接下来,将导出文件复制到New Artifactory中。使用Import System菜单导入它以自动创建所有目标存储库:

用户添加图片

如果在“导入”中选中了两个复选框,不会删除任何内容。这样,以后可以再次执行导入,以更新存储库列表和权限。这也是在没有正确设置复制时恢复的方法。

复制设置步骤1:获取存储库名称

手动设置推送复制需要做很多工作。对于许多Artifactory用户来说,遍历数百甚至数千个复制配置是不可能的。但是,使用添加到JFrog CLI中的新工具,可以完全自动化此任务。

建议你创建一个项目文件夹来保存我们将要创建的模板文件:

mkdir复制设置;cd复制设置

首先,获取存储库列表来自旧的(来源)工艺品。下面的命令只保存存储库密钥,即存储库的名称。这些密钥就是我们建立复制所需要的全部。该命令将保存一个“repositories”。列表”文件,我们将在下一步中使用:
curl命令下载列表,grep命令取出我们需要的“key”

Curl -s -u admin "http://jfrog.7x.gcp/artifactory/api/repositories?输入=local" | grep "key" > repositories.list
[期望的输出语法]
用户添加图片

使用“存储库”。列表”文件,我们实际上已经得到了在各处建立复制所需的所有信息。下一步是为CLI创建正确的模板文件。

复制设置步骤2:创建复制设置

JFrog CLI提供“复制-创建”操作,需要复制模板文件。在BASH中,可以使用存储库创建这些模板文件。列表文件和一些巧妙的处理技巧。

)首先,配置JFrog命令行同时具有“源”和“目标”Artifactories:jfrog config add source #定义DR source Artifactory
jfrog config add target #定义容灾目标

B]生成复制模板配置文件。下面的循环将读取“repository”的每一行。列出“”文件,并根据密钥创建模板文件:配置复制时,JFrog命令行使用“target”名称并填写正确的URL

猫存储库。在读取行时列出|

#变量设置
#获取存储库密钥,从JSON中删除“key”
REPO=$(echo $line | cut -d ':' -f 2)
REPO_FILENAME = $ (echo ${回购% ? ?} | cut -c 2-) #得到一个好看的文件名

#插入静态默认参数
echo '{"enabled": "true","cronExp":"0 0 12 * * ?",' > $REPO_FILENAME-template.json .

#插入存储库密钥
echo '"repoKey": '$REPO >> $REPO_FILENAME-template.json .

插入剩余的参数,注意我们复制到相同的存储库名称
echo '"serverId": "target", "targetRepoKey": " $REPO " "enableEventReplication":"true"}' >> $REPO_FILENAME-template.json . echo '"serverId": "target", "targetRepoKey": " $REPO

完成

【预期JSON文件内容】
用户添加图片

循环结束后,请检查结果文件。它们都应该看起来像上面的示例图像。在我们将模板大规模部署到源代码之前,仔细检查它们是很重要的,以防止错误配置的设置被部署到旧的Artifactory中。

C .“运行”replication-create在每个JSON文件上使用CLI命令,这个脚本会为你做这些:Jfrog配置使用源代码

Ls |读取行

Echo "jfrog rt replication-create $line"
Jfrog rt replication-create $line
完成

这将把每个模板推送到源Artifactory,最后所有Artifactory的本地存储库将被配置为推送到目标:

用户添加图片

用户添加图片

复制设置步骤3:坐下来放松

信不信由你,就是这样!如果成功地完成了前面的步骤,那么随着时间的推移,Production Artifactory将把它的所有数据推送到Target,并且两者将具有相同的信息。您可以通过单击UI中的“Run Now”按钮开始迁移。

Enterprise Plus客户可以通过在两个实例之间设置Access Federation来主动同步安全信息。

故障排除问题

如果上述步骤中使用的复制信息不正确,那么Source Artifactory最终将得到大量错误的复制设置。恢复应用程序的最快方法是从配置描述符中删除复制设置。

推荐的方法是使用REST API重新部署“artifactory.config.xml”您已保存在空系统导出在此过程开始时捕获的。

例如,要使用的文件位于导出文件夹中20211215.195625 / artifactory.config.xml。
curl -u admin -X POST -H "Content-type:application/xml"——data-binary @artifactory.config.xml http://localhost:8081/artifactory/api/system/configuration