使用JFrog CLI自动化您的特性分支存储库管理

特性分支工作流用于将在特定特性上完成的工作隔离在专用分支中。这使得所有的开发在完成之前都可以远离团队的公共代码库。在准备好合并之前,从本质上保证主节点安全,避免任何风险。

所面临的挑战
除了代码本身,开发人员还需要管理他们的特性分支工件和依赖关系。但是,我们真的需要为我们工作的每个新特性分支手动创建存储库吗?我们如何以一种更简单的方式维护它,并可能自动化整个创建和删除过程?
在这篇博文中,我们将看到如何在JFrog Artifactory中为你的特性分支工作流程使用专用的工件存储库,并通过JFrog CLI轻松地实现一切自动化。
JFrog CLI是一个紧凑而智能的客户端,它提供了一个简单的界面,可以自动访问JFrog产品,简化您的自动化脚本,使它们更易于阅读和维护。hth华体会最新官方网站具体来说,我们将了解如何使用JFrog CLI管理Artifactory存储库自动化。
注意:这也可以用REST API而且Artifactory用户插件
解决方案
JFrog CLI提供了一组用于管理您的Artifactory存储库.包括创建、更新和删除存储库。
下面的示例演示创建3个Artifactory存储库(本地、远程和虚拟),作为CI流程的一部分,使用GitHub动作.这也可以使用任何编排工具,如JFrog管线,Jenkins, BitBucket等…
了解更多关于GitHub动作集成与Artifactory >
在本例中,我们将创建一个为非主拉请求触发的CI进程。它将包括在构建和部署软件到Artifactory之前自动创建Artifactory存储库的附加步骤。

在“构建和部署”步骤之前,CI流程包括两个额外的步骤:
- 特性分支存储库创建-为特性分支创建一个新的Artifactory存储库。
- 特性分支库更新-如果Artifactory存储库已经创建,“Feature Branch repository Creation”步骤将失败,该步骤将更新当前存储库以指向现有的存储库。
请注意:存储库的命名约定很重要,将进一步用于智能删除机制。

代码大纲:
对于任意分支= X,
|
代码示例:
——如果:总是()名称:功能分支存储库更新env: SERVER_ID: tal-eplus-saas运行:|回声“::set-env name =库::$ (echo $ {GITHUB_REF # refs /头/}| sed的s / \ / / _ / g)“jfrog rt mvnc——server-id-resolve = $ SERVER_ID——server-id-deploy = $ SERVER_ID repo-resolve-releases = auto-cli-virtual -库——repo-resolve-snapshots = auto-cli-virtual -库美元——repo-deploy-releases = auto-cli-virtual -库——repo-deploy-snapshots = auto-cli-virtual -库美元——如果:总是()名称:运行:jfrog rt mvn clean install -f maths/pom.xml
优势
使用专用的特性分支Artifactory存储库的优点如下:
- 明确隔离二进制文件(工件和第三方依赖项)您在开发分支中使用的。
- 在没有“外部干扰”的情况下部署应用程序使用您专用的隔离特性分支存储库。
- 简单的“清理”每个功能-一旦特性开发完成,分支被合并为“主”,所有用于开发/部署到特性分支存储库的不同版本的不相关依赖关系都可以被删除,并在一个位置轻松跟踪。
- 安全扫描——使用JFrog x射线手表在专用的特性存储库/构建上。
清理
为了确保这个解决方案对于我们开发的许多特性是可伸缩的,我们需要定义一个清除机制来删除任何未使用的旧存储库。
本例中的最后一步将使用NUMBER_OF_DAYS_TO_KEEP”参数。它将删除所有3种存储库类型(本地、远程和虚拟),以及空存储库。例如,设置“Number_of_days_to_keep = 90,将删除90天前创建的所有存储库。
我们将使用Artifactory REST API和JFrog CLI的以下功能:
- 检索所有带有' auto-cli-local '前缀- GET的存储库/ api /存储库.
- 搜索与Jfrog rt搜索—查找存储库中最后修改的文件。
删除与青蛙-用于删除存储库。
代码示例:
—if: always() name: Feature Branch Repository Deletion env: NUMBER_OF_DAYS_TO_KEEP: 90 run: | #提取CI进程自动创建的所有LOCAL Repository jfrog rt curl - xget /api/repositories | jq '[.][] | .key | select(test("auto-cli-local"))]' > delete /auto_created_repositories. key | select(test("auto-cli-local"))]'Json && cat删除/auto_created_repositories。jq -n '现在- 3600 * 24 * '$NUMBER_OF_DAYS_TO_KEEP' | gmtime | todate' > delete /months_indicator && cat delete /months_indicator #遍历所有存储库,删除那些最近修改过的文件jq -c '。删除/ auto_created_repositories[]”。读取i时,Json |;重复存储库= $i sh -c "jfrog rt s——spec删除/repositories-spec。#如果存储库是空的/最新修改的文件是旧的> NUMBER_OF_DAYS_TO_KEEP days =>删除存储库If [[$(cat DELETE /search_results) == "[]"];然后echo "Deleting repository: $i, repository is empty" sh -c "jfrog rt rdel $i——quiet && jfrog rt rdel ${i//local/virtual}——quiet && jfrog rt rdel ${i//local/jcenter}——quiet" elif [[$(cat deletion/search_results | jq——arg month_indicator $(cat deletion/months_indicator)”。[] | .modified |。<= $month_indicator') = "true"]];sh -c "jfrog rt rdel $i——quiet && jfrog rt rdel ${i//local/virtual}——quiet && jfrog rt rdel ${i//local/jcenter}——quiet"否则回显"跳过存储库删除-存储库仍然相关" fi done
完成GitHub动作管道:

该管道的完整代码可在:
