Compartir a través de


Prueba de los puertos del Registro personalizados mediante vcpkg con Azure DevOps

Una vez configurado un registro personalizado de puertos vcpkg, es posible que quiera agregar integración continua para validar que todas las dependencias se pueden compilar correctamente.

El equipo de vcpkg prueba el registro vcpkg principal de Microsoft/vcpkg mediante una canalización de integración continua (CI) con Azure DevOps. Esto garantiza que agregar nuevos paquetes o actualizar los existentes no interrumpa a los consumidores.

En este artículo, le mostramos cómo configurar un entorno de CI para probar los puertos vcpkg en su propio registro.

En este artículo aprenderá lo siguiente:

  • Configuración de una caché binaria y una caché de recursos para la canalización de Azure DevOps
  • Configuración de una canalización para probar los puertos del registro

Requisitos previos

Configuración de una caché binaria y una caché de recursos para las canalizaciones de Azure DevOps

La creación de una gran colección de puertos es una tarea costosa tanto en términos de tiempo como de potencia informática. Se recomienda encarecidamente que antes de interactuar con ci para los puertos, invierta en configurar una caché binaria y una caché de recursos para las canalizaciones de Azure DevOps.

Una caché binaria proporciona la mayor ventaja para los escenarios de CI al garantizar que los paquetes sin modificar no se vuelvan a compilar en cada ejecución de CI. Una caché de recursos refleja los artefactos descargados para los paquetes durante una ejecución y usa los artefactos almacenados en caché en ejecuciones posteriores. También puede ayudar a mitigar los problemas en los que el repositorio ascendente no es confiable: por ejemplo, una dirección URL de descarga interrumpida.

Para obtener instrucciones detalladas sobre cómo configurar estas cachés, lea nuestros artículos de almacenamiento en caché binario y almacenamiento en caché de recursos.

Ejemplo: Habilitación del almacenamiento en caché binario y de recursos en una canalización de Azure DevOps

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"

En este ejemplo se muestra cómo configurar una caché binaria y una caché de recursos en una canalización de Azure DevOps. Debe adaptar este fragmento de código para usarlo en el archivo YAML de su propia canalización.

Desglosar este fragmento de código:

X_VCPKG_ASSET_SOURCES es la variable de entorno que se usa para configurar las cachés de recursos en vcpkg. En este ejemplo, se establece en x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite. El x-azurl back-end indica a vcpkg que use un contenedor de Azure Storage como proveedor de almacenamiento. x-azurl Va seguido de tres parámetros separados por comas (,).

  • https://my.domain.com/container es una dirección URL del contenedor de almacenamiento.
  • $(VcpkgAssetCache) es una variable secreta de canalización que contiene un token de SAS para autenticarse en el contenedor de almacenamiento.
  • readwrite establece permisos de lectura y escritura para la caché de recursos. Esto significa que esta caché de recursos se usa para almacenar artefactos, así como para restaurar artefactos a partir de él.

VCPKG_BINARY_SOURCES es la variable de entorno que se usa para configurar cachés binarias en vcpkg. En este ejemplo, se establece en clear;nuget,https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json,readwrite. Esto habilita el back-end de NuGet para la memoria caché binaria mediante la fuente NuGet en https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json. Es posible que se requieran algunos pasos adicionales para autenticarse en la fuente de NuGet, lea el tutorial para obtener instrucciones para configurar la autenticación de NuGet con ADO.

La siguiente tarea debe agregarse tal como está en la canalización para autenticarse en las fuentes NuGet de Azure Artifacts. Esta tarea también debe ejecutarse antes de cualquier tarea que implique vcpkg.

- task: NuGetAuthenticate@1

Si usa un host diferente para las fuentes de NuGet, lea la documentación sobre cómo autenticar NuGet.

Obtenga más información sobre cómo funcionan todos estos elementos; para ello, lea la documentación sobre las características de caché de recursos y caché binaria.

Configuración de una canalización para probar los puertos del registro

Después de configurar una caché binaria y una caché de recursos para el entorno de CI, el siguiente paso es configurar una canalización para probar todos los puertos del registro. Puede decidir si esta canalización se ejecuta según una programación o si se desencadena mediante nuevas confirmaciones o solicitudes de incorporación de cambios.

El registro vcpkg principal usa el vcpkg ci comando , que se ha adaptado a las necesidades del proyecto vcpkg y no está pensado para permanecer estable o ser utilizado por los consumidores de vcpkg. Por lo tanto, no es adecuado usar para probar sus propios registros de vcpkg. Se recomienda seguir los pasos descritos en este artículo en su lugar.

Usar un archivo de manifiesto para incluir todos los puertos

En lugar de usar el vcpkg ci comando , se recomienda usar un archivo de manifiesto para crear una compilación que dependa de todos los paquetes del registro.

En el ejemplo siguiente, se crea un archivo de manifiesto para probar todos los puertos de un registro hipotético de vcpkg. Reemplace la lista de dependencias para incluir todos los puertos del registro y colóquelo en la raíz del repositorio.

vcpkg.json

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

Sus propios puertos pueden tener dependencias en el registro vcpkg principal u otros registros de terceros, en cuyo caso, debe agregar esos registros en un vcpkg-configuration.json archivo. Aunque vcpkg puede resolver paquetes del registro principal sin configuración adicional, se recomienda agregarlos explícitamente a la lista de registros con fines de control de versiones. Esto garantiza que tiene el control del conjunto de versiones de puerto subyacentes. Consulte el vcpkg x-update-baseline comando para ayudar a administrar la línea base de los registros.

vcpkg-configuration.json

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

Lea los vcpkg.json artículos de referencia y vcpkg-configuration.json para obtener más información. Y la documentación del modo de manifiesto para obtener información sobre cómo funcionan conjuntamente.

Adquisición de vcpkg en la canalización de Azure DevOps

Si usa vcpkg como submódulo en el proyecto, puede obtener el repositorio vcpkg en el paso para desproteger su propio proyecto, como se muestra a continuación.

steps:
- checkout: self
  submodules: true

De lo contrario, debe adquirir vcpkg para usarlo en la canalización. Agregue los pasos siguientes para clonar el repositorio vcpkg.

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

steps:
  - checkout: vcpkgRepo

Para clonar el repositorio vcpkg, debe definir un recurso de repositorio para la canalización. En el fragmento de código siguiente se muestra cómo agregar el repositorio vcpkg como un recurso, deberá configurar una Conectar de servicio para conectar la canalización a GitHub.

Después de desprotegir el repositorio vcpkg como submódulo o clonarlo desde GitHub, debe ejecutar el script de arranque de vcpkg.

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

Una vez completados estos pasos, debe tener un archivo ejecutable vcpkg con el que trabajar.

Ejecución de la instalación de vcpkg para compilar los puertos

El último paso es indicar a vcpkg que compile todos los puertos. Es posible que haya observado que su propio registro no está presente en el vcpkg-configuration.json creado un par de pasos anteriores. El motivo es que desea probar la versión de los puertos que se encuentran actualmente en el directorio de trabajo, en lugar de las versiones publicadas en el repositorio.

Para ese objetivo, debe agregar los puertos del Registro como puertos de superposición estableciendo la variable de entorno en el VCPKG_OVERLAY_PORTS directorio del ports registro.

En el fragmento de código siguiente se muestra cómo configurar los puertos del registro como puertos de superposición y se ejecuta vcpkg install en modo de manifiesto para instalar todos los puertos personalizados.

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"

En este ejemplo se supone que el vcpkg.json archivo se crea en la raíz del repositorio del registro y que el repositorio vcpkg se agrega como submódulo.

La colocación de todo el archivo YAML de las canalizaciones debe tener un aspecto similar al siguiente:

.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"

Esta es la estructura básica de una canalización de CI para probar los puertos del registro. Es posible que necesite algún trabajo adicional para autenticarse en repositorios privados o en la fuente de NuGet.

También puede agregar pasos para automatizar la generación del vcpkg.json archivo o un paso que compruebe que los puertos recién agregados al registro no se quedan fuera de las pruebas.

Pasos siguientes

Los artículos siguientes pueden resultarle útiles al configurar un entorno de CI.