Compartilhar via


Testar suas portas de registro personalizadas usando vcpkg com o Azure DevOps

Depois de configurar um registro personalizado de portas vcpkg, convém adicionar integração contínua para validar que todas as suas dependências podem ser criadas com êxito.

O registro vcpkg principal na Microsoft/vcpkg é testado pela equipe vcpkg usando um pipeline de integração contínua (CI) com o Azure DevOps. Isso garante que adicionar novos pacotes ou atualizar os existentes não prejudique os consumidores.

Neste artigo, mostramos como configurar um ambiente de CI para testar as portas vcpkg em seu próprio registro.

Neste artigo, você aprenderá a:

  • Configurar um cache binário e um cache de ativos para seu pipeline de DevOps do Azure
  • Configurar um pipeline para testar as portas do Registro

Pré-requisitos

Configurar um cache binário e um cache de ativos para seus pipelines de DevOps do Azure

Construir uma grande coleção de portas é uma tarefa cara tanto em termos de tempo quanto de poder de computação. É altamente recomendável que, antes de engajar o CI para suas portas, você invista na configuração de um cache binário e um cache de ativos para seus pipelines de DevOps do Azure.

Um cache binário fornece o maior benefício para cenários de CI, garantindo que pacotes não modificados não sejam recriados em cada execução de CI. Um cache de ativos espelha artefatos baixados para seus pacotes durante uma execução e usa os artefatos armazenados em cache em execuções subsequentes. Ele também pode ajudar a mitigar problemas em que o repositório upstream não é confiável: por exemplo, uma URL de download quebrada.

Para obter instruções detalhadas sobre como configurar esses caches, leia nossos artigos sobre cache binário e cache de ativos.

Exemplo: habilitar o cache binário e de ativos em um pipeline de DevOps do Azure

steps: 
- task: NuGetAuthenticate@1

- script: $(Build.Repository.LocalPath)/vcpkg/vcpkg install --triplet=x64-windows
  displayName: some vcpkg task
  env:
    X_VCPKG_ASSET_SOURCES: "clear;x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite"
    VCPKG_BINARY_SOURCES: "clear;nuget,https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json,readwrite"

Este exemplo mostra como configurar um cache binário e um cache de ativos em um pipeline de DevOps do Azure. Você deve adaptar esse trecho para usar no arquivo YAML do seu próprio pipeline.

Detalhando este trecho:

X_VCPKG_ASSET_SOURCES é a variável de ambiente usada para configurar caches de ativos em VCPKG. Neste exemplo, ele é definido como x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite. O x-azurl back-end instrui vcpkg a usar um contêiner de Armazenamento do Azure como o provedor de armazenamento. O x-azurl é seguido por três parâmetros separados por vírgulas (,).

  • https://my.domain.com/container é uma URL de contêiner de armazenamento.
  • $(VcpkgAssetCache) é uma variável secreta de pipeline que contém um token SAS para autenticar no contêiner de armazenamento.
  • readwrite Define permissões de leitura e gravação para o cache de ativos. Isso significa que esse cache de ativos é usado para armazenar artefatos, bem como para restaurar artefatos a partir dele.

VCPKG_BINARY_SOURCES é a variável de ambiente usada para configurar caches binários em vcpkg. Neste exemplo, ele é definido como clear;nuget,https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json,readwrite. Isso habilita o back-end do NuGet para o cache binário usando o feed NuGet em https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json. Algumas etapas adicionais podem ser necessárias para autenticar seu feed NuGet, leia o tutorial para obter instruções sobre como configurar a autenticação NuGet com o ADO.

A tarefa a seguir deve ser adicionada no estado em que se encontra em seu pipeline para autenticar seus feeds NuGet de Artefatos do Azure. Esta tarefa também deve ser executada antes de qualquer tarefa envolvendo vcpkg.

- task: NuGetAuthenticate@1

Se você estiver usando um host diferente para seus feeds NuGet, leia a documentação sobre como autenticar o NuGet.

Saiba mais sobre como tudo isso funciona lendo a documentação sobre os recursos de cache de ativos e cache binário.

Configurar um pipeline para testar as portas do Registro

Depois de configurar um cache binário e um cache de ativos para seu ambiente de CI, a próxima etapa é configurar um pipeline para testar todas as portas do Registro. Você pode decidir se esse pipeline é executado em uma agenda ou se é acionado por novas confirmações ou solicitações pull.

O registro principal vcpkg usa o vcpkg ci comando, que foi adaptado às necessidades do projeto vcpkg e não se destina a permanecer estável ou ser usado por consumidores de vcpkg. Como tal, não é adequado para usar para testar seus próprios registros vcpkg. Em vez disso, recomendamos seguir as etapas descritas neste artigo.

Usar um arquivo de manifesto para incluir todas as portas

Em vez de usar o comando, sugerimos usar um arquivo de manifesto vcpkg ci para criar uma compilação que depende de todos os pacotes em seu registro.

O exemplo a seguir cria um arquivo de manifesto para testar todas as portas em um registro vcpkg hipotético. Substitua a lista de dependências para incluir todas as portas no registro e coloque-a na raiz do repositório.

vcpkg.json

{
  "dependencies": [
    "beicode",
    "beison"
  ]
}

Suas próprias portas podem ter dependências no registro vcpkg principal ou em outros registros de terceiros, nesse caso, você precisa adicionar esses registros em um vcpkg-configuration.json arquivo. Embora o vcpkg possa resolver pacotes do registro principal sem configuração adicional, é altamente recomendável adicioná-lo explicitamente à lista de registros para fins de controle de versão. Isso garante que você tenha controle do conjunto de versões de porta subjacentes. Confira o vcpkg x-update-baseline comando para ajudar a gerenciar a linha de base de seus registros.

vcpkg-configuration.json

{
  "default-registry": null,
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/Microsoft/vcpkg",
      "baseline": "42bb0d9e8d4cf33485afb9ee2229150f79f61a1f",
      "packages": "*"
    }
  ]
}

Leia os vcpkg.json artigos e vcpkg-configuration.json referências para saber mais. E a documentação do modo manifesto para saber como eles funcionam juntos.

Adquira vcpkg em seu pipeline de DevOps do Azure

Se você usar vcpkg como um submódulo em seu projeto, você pode obter o repositório vcpkg na etapa para fazer checkout de seu próprio projeto, conforme mostrado abaixo.

steps:
- checkout: self
  submodules: true

Caso contrário, você precisa adquirir vcpkg para usá-lo em seu pipeline. Adicione as seguintes etapas para clonar o repositório vcpkg.

resources:
  repositories:
    - repository: vcpkgRepo
      type: github
      name: Microsoft/vcpkg
      endpoint: MyGitHubServiceConnection

steps:
  - checkout: vcpkgRepo

Para clonar o repositório vcpkg, você precisa definir um recurso de repositório para seu pipeline. O trecho abaixo mostra como adicionar o repositório vcpkg como um recurso, você precisará configurar uma Conexão de Serviço para conectar seu pipeline ao GitHub.

Depois de fazer check-out do repositório vcpkg como um submódulo ou clonando-o do GitHub, você precisa executar o script de bootstrap do vcpkg.

steps:
  - script: vcpkg/bootstrap-vcpkg.sh

Depois que essas etapas forem concluídas, você deve ter um executável vcpkg para trabalhar.

Execute vcpkg install para construir suas portas

O último passo é dizer ao vcpkg para construir todas as suas portas. Você pode ter notado que seu próprio registro está ausente do vcpkg-configuration.json criado um par de etapas acima. O motivo é que você deseja testar a versão das portas atualmente no diretório de trabalho, em vez das versões publicadas em seu repositório.

Para esse objetivo, você precisa adicionar as portas do Registro como portas de sobreposição, definindo a variável de ambiente para o VCPKG_OVERLAY_PORTS diretório do ports Registro.

O trecho abaixo mostra como configurar as portas do Registro como portas de sobreposição e é executado vcpkg install no modo manifesto para instalar todas as portas personalizadas.

steps:
- script: $(Build.Repository.LocalPath)/vcpkg/vcpkg install
  env:
    X_VCPKG_ASSET_SOURCES: "clear;x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite"
    VCPKG_BINARY_SOURCES: "clear;nuget,https://my.domain.com/demoBinaries/nuget/v3/index.json,readwrite"
    VCPKG_OVERLAY_PORTS: "$(Build.Repository.LocalPath)/ports"

Neste exemplo, assumimos que o vcpkg.json arquivo é criado na raiz do repositório do seu registro e que o repositório vcpkg é adicionado como um submódulo.

Juntando tudo isso, o arquivo YAML dos pipelines deve ser semelhante a este:

.azure-pipelines/test-ports.yml

trigger:
- main

pool:
  vmImage: windows-latest

steps:
- checkout: self
  submodules: true

- task: NuGetAuthenticate@1

- script: $(Build.Repository.LocalPath)/vcpkg/bootstrap-vcpkg.bat
  displayName: Bootstrap vcpkg

- script: $(Build.Repository.LocalPath)/vcpkg/vcpkg install --triplet=x64-windows
  env:
    X_VCPKG_ASSET_SOURCES: "clear;x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite"
    VCPKG_BINARY_SOURCES: "clear;nuget,https://my.domain.com/demoBinaries/nuget/v3/index.json,readwrite"
    VCPKG_OVERLAY_PORTS: "$(Build.Repository.LocalPath)/ports"

Essa é a estrutura básica de um pipeline de CI para testar as portas do registro. Você pode precisar de algum trabalho extra para se autenticar em repositórios privados ou em seu feed NuGet.

Você também pode adicionar etapas para automatizar a vcpkg.json geração do arquivo ou uma etapa que verifica se as portas recém-adicionadas ao registro não são deixadas de fora dos testes.

Próximas etapas

Os artigos a seguir podem ser úteis para você ao configurar um ambiente de CI.