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

特性分支工作流用于在专用分支中隔离针对特定特性所做的工作。这允许所有的开发都远离团队的公共代码库,直到完成。从本质上讲,在准备好合并之前,保持主服务器免受任何风险。

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

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

代码大纲:
对于任意分支= 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
优势
使用专用的特性分支人工存储库的优点是:
- 清除二进制文件的隔离(工件和第三方依赖)您在开发分支中使用的。
- 在没有“外界噪音”的情况下部署应用程序使用专用的独立特性分支存储库。
- 简单的“清理”每个功能-一旦功能开发完成,分支被合并到“主”,所有用于开发的不相关依赖/部署到功能分支存储库的不同版本都可以在一个位置轻松删除和跟踪。
- 安全扫描——使用JFrog Xray注视着在专用的功能库/构建上。
清理
为了确保该解决方案对于我们开发的许多特性是可伸缩的,我们需要定义一个清除机制来删除任何未使用的旧存储库。
我们示例中的最后一步将使用NUMBER_OF_DAYS_TO_KEEP”参数。它将删除所有3种存储库类型(本地、远程和虚拟),以及空存储库。例如,设置“Number_of_days_to_keep = 90,将删除90天前创建的所有存储库。
我们将使用Artifactory REST API和JFrog CLI的以下功能:
- 检索带有' auto-cli-local '前缀的所有存储库/ api /存储库。
- 搜索与Jfrog rt搜索-查找存储库中最后修改的文件。
删除与Jfrog rt - del-用于删除存储库。
代码示例:
- if: always() name: Feature Branch Repository delete env: NUMBER_OF_DAYS_TO_KEEP: 90 run: | #提取CI进程自动创建的所有本地存储库jfrog rt curl - xget /api/repositories | jq '[.][] | .key | select(test("auto-cli-local"))]' > delete /auto_created_repositories。Json && cat delete /auto_created_repositories。jq -n 'now - 3600 * 24 * '$NUMBER_OF_DAYS_TO_KEEP' | gmtime | todate' > delete /months_indicator && cat delete /months_indicator #遍历所有存储库,删除那些最新修改的文件jq -c '。删除/ auto_created_repositories[]”。Json | while read i;do echo迭代库= $i sh -c "jfrog rt s——spec删除/ repository -spec。json——spec_vars ='key1="$i"' > DELETE /search_results && cat DELETE /search_results" #如果存储库为空/最近修改的文件较旧> NUMBER_OF_DAYS_TO_KEEP days =>如果[[$(cat DELETE /search_results) == "[]"];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))'.[] [au:]<= $month_indicator') = "true"];sh -c "jfrog rt rdel $i——quiet && jfrog rt rdel ${i//local/virtual}——quiet && jfrog rt rdel ${i//local/jcenter}——quiet"否则echo "跳过删除存储库-存储库仍然相关" fi完成
完成GitHub Actions管道:

该管道的完整代码可在: