如何在 CI/CD 构建期间在 Azure Pipelines 中使用私有包

How to use private packages in Azure Pipelines During CI/CD builds

我正在使用 Azure CI/CD 管道进行 Flutter 构建。在我的 Pubspec yaml 文件中,我有我的项目私有的依赖项,并且代码托管在同一个 azure devops 项目中,但在不同的存储库中。在构建过程中(即 Flutter Packages get),它给我错误提示 Authentication failed?。我尝试使用 PAT 令牌,在 flutter build 任务之前我使用 git 命令设置该令牌,但它没有解决问题。谁能帮帮我?

我愿意接受更好的方法,但这些是我不久前为解决这个问题所采取的步骤。

假设您在 azure devops 上使用 git 通过 ssh 引用 pubspec.yaml 中的包,例如:

  repo_name:
    git:
      ref: 'tag or other identifier'
      url: you@vs-ssh.visualstudio.com:v3/you/project/repo_name

  • 在您的计算机上生成新的 ssh 密钥对。
  • 将私钥上传到 azure devops 上的库安全文件部分。
  • 将安装 ssh 密钥任务添加到您的 Azure 管道构建中,使用在前面的步骤中生成的密钥对并引用上传到安全文件库的私钥。 link
  • 将 public 密钥上传到您的 public 密钥列表。 (我不是 100% 确定这一步是必要的,但我最初做了它并且一切正常所以我没有改变删除它)

所以在我的 azure-pipelines.yaml 中,安装 ssh 密钥步骤看起来有点像这样,其中 id_rsa 是我的安全文件中私钥的名称。

          - task: InstallSSHKey@0
            inputs:
              knownHostsEntry: 'vs-ssh.visualstudio.com, ...etc'
              sshPublicKey: 'ssh-rsa ...etc'
              sshKeySecureFile: id_rsa

创建的私人供稿具有只有您可以访问的权限。

具有用户(构建服务帐户)的构建代理 运行,在 Feed 中授予此用户权限。从 Feed 设置 -> 权限,分配您的构建服务帐户所有者权限。

还要验证令牌是否正常工作,确保您为此令牌选择了足够的 scopes 来授权您执行特定任务。

除了尝试添加一个值为 true 的变量 system.debug 之外,您将在失败中获得更多信息。这可能有助于查明问题。