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
- Cuenta de Azure DevOps
- Su propio registro de Git vcpkg
- Finalización de los tutoriales de almacenamiento en caché y almacenamiento en caché de recursos binarios.
- Conocimientos sobre las canalizaciones de ADO
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.
- Autenticación en registros de Git privados
- Configuración de una caché binaria mediante la caché de NuGet
- Configuración de una caché de recursos
- Referencia de caché binaria
- Referencia de caché de recursos
- Puertos de superposición
- Modo de manifiesto
vcpkg.json
vcpkg-configuration.json
- Variables de entorno de configuración de vcpkg