如何在 Artifactory 中使用 Pub 存储库

通过 Dart 开发人员对 Pub in Artifactory 的远程、本地和虚拟存储库的使用,您将为您的 SDLC 投入一些最重要的最佳实践,以实现 DevOps 的成功。您可以确保所有 Dart 开发团队的依赖项和包的一致性,并使用不会妨碍他们的原生 Pub、Flutter 和 AngularDart 支持。您还可以使用 Artifactory 的细粒度权限系统管理跨团队的访问。

如何在 Artifactory 中使用 Pub 存储库

如果您是越来越多采用 Dart 编程语言以及 Flutter 和 AngularDart 工具包的客户端应用程序开发人员中的一员,我们有一些令人振奋的消息要告诉您!

JFrog 现在可以欢迎 Dart 开发人员使用 Artifactory 强大的二进制管理以及它有助于持续集成的方式。我们已将 Dart 的包管理器 Pub 添加到 Artifactory 支持的本地、远程和虚拟存储库的一长串包类型列表中。

随着移动和 Web 平台种类的增长,越来越多的客户端应用程序开发人员已将 Dart、Flutter 和 AngularDart 作为 JavaScript 的更优化和通用的替代方案,用于独立于平台的编码。

Dart 得到了什么让 GitHub 在 2019 年将其列为 2019 年增长最快的语言,在一年的使用量增长了 532% 之后?您如何使用 Artifactory 中的 Pub 存储库来加速您的软件开发生命周期?

为什么是 Dart 和 Pub?

Dart 编程语言由 Google 开发,是 JavaScript 的替代语言,针对客户端开发(如 Web 和移动应用程序)进行了优化。它是开源 Flutter 工具包和 UI 框架以及 Angular 的基础,它支持从单个代码库开发适用于各种平台(如 Android、iOs、Linux 和 Windows)的应用程序。

公共 Pub 存储库是 Flutter、Angular 和许多其他为 Dart 编写的开源软件包的官方软件包存储库。

Dart 已获得开发人员的更多采用,并在 Stack Overflow 的 2021 年最受喜爱技术开发人员调查中跻身前 10 名。 GitHub 已将其列为 2022 年 10 种高需求语言之一。Flutter 自推出以来增长显着,2021 年贡献者显着增加。

凭借其由 ECMA International 管理的标准,Dart 为基于客户端的应用程序提供了以下好处:

  • Native 或 Web:可以为运行时目标编译 Dart 代码,或转换为可以在任何主要浏览器中运行的 JavaScript。
  • 快速启动:编译成快照文件的 Dart 程序包含预先解析的代码和准备执行的依赖项。
  • 并发性:Dart 应用程序在一个或多个隔离区中运行,其中任务在具有自己内存的独立环境中运行。

当与Flutter 和/或 Angular 结合使用时,Dart 使开发人员能够快速可靠地生成基于 UI 的应用程序,这些应用程序可以在许多移动和基于 Web 的平台上运行。

远程发布存储库

作为 Dart 开发人员,您将依赖不断增长的 pub.dev 包存储库来存储 Flutter、Angular 和许多其他核心服务。

为了帮助确保您的 Dart 构建以及跨团队的 Flutter 或 Angular 应用程序的不间断速度和一致性,请使用 Artifactory 远程存储库来代理 pub.dev。

Artifactory 中的远程存储库用作在远程 URL 上管理的存储库或注册表的只读缓存代理。远程仓库的内容和本地源的内容没有区别。

当您将这一最佳 DevOps 实践付诸实践时,您和您的团队将获得:

  • 速度局部性 —— 代理将您经常使用的软件包提取并保存到您进行构建的计算环境中,无论是在云中还是在本地,从而最大限度地减少网络延迟并绕过限制。
  • 连接保护 —— 即使 pub.dev 服务器不是由于连接不良或中断,或者远程服务器本身出现中断,您的 pub.dev 代理仍然可用。
  • 强制不变性 —— 一旦包版本在代理中,它是不变的,并且在每个使用它的构建中都是一样的。这可以防止任何通过不适当的强制推送或对公共回购的恶意供应链攻击潜入您的构建。

很容易为 pub.dev 设置远程存储库代理:

1.在 Artifactory 中创建一个新的 Pub 远程存储库

2.命名远程存储库并分配 pub.dev 的 URL

3.为了让 Dart 从您的工作站访问您的存储库,您需要生成一个访问令牌来验证您的 Artifactory 用户帐户。使用 Artifact Browser 中的“Set Me Up”获取远程 Pub 存储库的正确 URL,并按照说明进行操作将您的访问令牌添加到 pub 工具(使用 dart pub token add 命令),并通过 Pub 环境变量将托管依赖项的解析重定向到 Artifactory 远程 repo。

$ dart pub token add https://JFROG_PLATFORM_URL/artifactory/api/pub/pub_remote
Enter secret token: <Type token on stdin>
 Requests to "https://JFROG_PLATFORM_URL/artifactory/api/pub/pub_remote" will now be 
 authenticated using the secret token.
 
$ export PUB_HOSTED_URL="https://JFROG_PLATFORM_URL/artifactory/api/pub/pub_remote"
``

在此成功设置之后,您的所有 Dart 依赖项都将从 Artifactory 中的代理解析,而不是直接从 pub.dev 解析。

本地 Pub 存储库

对于您将仅在您的团队或部门内创建和共享的私有 Dart 包,您应该在 Artifactory 中维护本地 Pub 存储库。您可以根据需要创建任意数量,并在 pubspec 文件中为您的依赖项指定它们的 URL。

例如,从事“Project X”的团队可能会设置并使用本地 Pub 存储库:

1.在 Artifactory 中创建名为“pub-local-projectx”的本地 Pub 存储库。
2.使用 dart pub token add 命令将您的 Artifactory 访问令牌添加到 pub 工具。

$ dart pub token add https://JFROG_PLATFORM_URL/artifactory/api/pub/pub-local-projectx
Enter secret token: <Type token on stdin>
 Requests to "https://JFROG_PLATFORM_URL/artifactory/api/pub/pub-local-projectx" will now be  
 authenticated using the secret token.

3.在私有包的 pubspec.yaml 文件中,使用 publish_to 属性指定 Artifactory 中的私有 repo。然后运行 ​​dart pub publish 命令将你的 Dart 包发布到 Artifactory。

name: bandersnatch
version: 1.0.0
# Ensures the package is published to Artifactory
publish_to: https://JFROG_PLATFORM_URL/artifactory/api/pub/pub_local_projectx

4.要将 Artifactory 私有存储库中的包用作 Project X 应用程序源代码中的依赖项,请在应用程序的 pubspec.yaml 文件中指定依赖项源的位置使用托管关键字。

environment: 
  sdk: >=2.15.0 < 3.0.0
dependencies:
  bandersnatch:
    hosted: https://JFROG_PLATFORM_URL/artifactory/api/pub/pub_local_projectx
    version: ^1.0.0

虚拟Pub存储库

使用 Artifactory,您可以将任何一组本地和/或远程存储库组合到一个虚拟存储库中,该虚拟存储库充当可以通过通用 URL 访问的单个逻辑存储库。

例如,您可以为项目 X、项目 Y 和项目 Z 维护单独的存储库,但创建一个虚拟存储库,可以通过单个安全 URL 方便地访问所有三个存储库。您还可以通过创建一个包含项目 X 和 Y 的虚拟存储库(另一个包含项目 X 和 Z 的虚拟存储库)来平衡便利性和安全性,并使用 Artifactory 的细粒度权限来控制谁可以访问它们以及如何访问它们。

您还可以将任何或所有私有 Pub 存储库与 pub.dev 的远程存储库组合到一个虚拟存储库中,为所有托管依赖项创建一个单一访问 URL。

在这种情况下,您可以将 PUB_HOSTED_URL 环境变量设置为虚拟 Pub 存储库的 URL,使其成为解析 Dart 依赖项的默认值。 由于虚拟存储库是一个不同的 URL,因此您还需要使用 dart pub token add 为该 URL 添加 Artifactory 访问令牌到 pub 工具。

例如,要使用结合了 pub_local_projectx 和 pub_remote 存储库的 pub_virtual 虚拟存储库来解析所有托管依赖项:

$ dart pub token add https://JFROG_PLATFORM_URL/artifactory/api/pub/pub_virtual
Enter secret token: <Type token on stdin>
 Requests to "https://JFROG_PLATFORM_URL/artifactory/api/pub/pub_virtual" will now be 
 authenticated using the secret token.
 
# List the credentials for all our repos
$ dart pub token list
You have secret tokens for 3 package repositories:
https://JFROG_PLATFORM_URL/artifactory/api/pub/pub_local_projectx
https://JFROG_PLATFORM_URL/artifactory/api/pub/pub_remote
https://JFROG_PLATFORM_URL/artifactory/api/pub/pub_virtual
 
# Resolve all dependencies to the Pub virtual repo
$ export PUB_HOSTED_URL="https://JFROG_PLATFORM_URL/artifactory/api/pub/pub_virtual"