使用 Azure Pipelines 发布 Cargo 包

Azure DevOps Services | Azure DevOps Server 2022

Azure Pipelines 使开发人员能够将 Cargo 包发布到 Azure Artifacts 源和公共注册表,例如 Crates.io。 本文介绍如何使用 YAML 和经典管道将 Cargo 包发布到 Azure Artifacts 源。

先决条件

  • Azure DevOps 组织和项目。 创建 组织项目(如果尚未创建)。

  • Azure Artifacts 源。 如果还没有源,请创建源

使用源 进行身份验证

  1. 登录到 Azure DevOps 组织,并导航到你的项目。

  2. 选择“项目”,然后选择源。

  3. 选择“连接到源”,然后从左侧窗格中选择“Cargo”

  4. Project 安装程序 部分复制提供的代码片段,并将其添加到源存储库中的 config.toml 文件中。 文件应如下所示:

    • 项目作用域的源:

      [registries]
      <FEED_NAME> = { index = "sparse+https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/Cargo/index/" }
      
      [source.crates-io]
      replace-with = "<FEED_NAME>"
      
    • 组织作用域的源:

      [registries]
      <FEED_NAME> = { index = "sparse+https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/Cargo/index/" }
      
      [source.crates-io]
      replace-with = "<FEED_NAME>"
      
  5. 使用“打包”“读取和写入”>范围创建个人访问令牌,以便对源进行身份验证。

  1. 登录到 Azure DevOps 组织,并导航到你的项目。

  2. 选择管道,然后选择您的管道定义。

  3. 选择 编辑,然后将以下代码片段添加到你的 YAML 管道中。

    - task: CargoAuthenticate@0
      displayName: 'Cargo Authenticate'
      inputs:
        configFile: '.cargo/config.toml'    ## Path to the config.toml file that specifies the registries you want to work with. Select the file, not the folder e.g. "/.cargo/config.toml"
    

将箱发布到源

  1. 登录到 Azure DevOps 组织,并导航到你的项目。

  2. 选择管道,然后选择您的管道定义。

  3. 选择 编辑,然后将以下代码片段添加到 YAML 管道。

    - powershell: |
       cargo publish --registry <FEED_NAME>        ## Replace the placeholder with your feed name
      env:
        SYSTEM_ACCESSTOKEN: $(system.accesstoken)
    

示例

以下示例演示如何在代理上安装 Rustup、配置 PATH 环境变量、生成项目、使用 CargoAuthenticate 进行身份验证以及发布到 Azure Artifacts 源:

trigger:
- main

pool:
  vmImage: windows-latest

steps:
- powershell: |
   Invoke-WebRequest -Uri https://sh.rustup.rs -OutFile rustup-init.sh
   bash .\rustup-init.sh -y
   echo "##vso[task.prependpath]$env:USERPROFILE\.cargo\bin"
  displayName: Install

- task: CargoAuthenticate@0
  displayName: 'cargo Authenticate'
  inputs:
    configFile: '.cargo/config.toml'

- script: |
   cargo build --all
  displayName: Build

- powershell: |
   cargo publish --registry CargoInternalFeed
  displayName: Publish

一旦您的流水线运行完成,您的包应该在内容源中可用,如下所示:

显示发布到源的 hello-world-cargo 箱的屏幕截图。