Testowanie niestandardowych portów rejestru przy użyciu narzędzia vcpkg w usłudze Azure DevOps
Po skonfigurowaniu niestandardowego rejestru portów vcpkg możesz dodać ciągłą integrację, aby sprawdzić, czy wszystkie zależności można pomyślnie skompilować.
Główny rejestr vcpkg w firmie Microsoft/vcpkg jest testowany przez zespół vcpkg przy użyciu potoku ciągłej integracji (CI) w usłudze Azure DevOps. Dzięki temu dodanie nowych pakietów lub zaktualizowanie istniejących nie spowoduje przerwania użytkowników.
W tym artykule pokazano, jak skonfigurować środowisko ciągłej integracji w celu przetestowania portów vcpkg we własnym rejestrze.
Z tego artykułu dowiesz się, jak wykonywać następujące elementy:
- Konfigurowanie binarnej pamięci podręcznej i pamięci podręcznej zasobów dla potoku usługi Azure DevOps
- Konfigurowanie potoku do testowania portów rejestru
Wymagania wstępne
- Konto usługi Azure DevOps
- Własny rejestr git vcpkg
- Ukończenie samouczków buforowania binarnego i buforowania zasobów.
- Wiedza na temat potoków ADO
Konfigurowanie binarnej pamięci podręcznej i pamięci podręcznej zasobów dla potoków usługi Azure DevOps
Tworzenie dużej kolekcji portów jest kosztownym zadaniem zarówno w zakresie czasu, jak i mocy obliczeniowej. Zdecydowanie zalecamy, aby przed angażowaniem ciągłej integracji dla portów zainwestować w konfigurowanie binarnej pamięci podręcznej i pamięci podręcznej zasobów dla potoków usługi Azure DevOps.
Pamięć podręczna binarna zapewnia największą korzyść w scenariuszach ciągłej integracji, zapewniając, że niezmodyfikowane pakiety nie są komkompilowane w każdym uruchomieniu ciągłej integracji. Pamięć podręczna zasobów dubluje artefakty pobierane dla pakietów podczas przebiegu i używa buforowanych artefaktów w kolejnych uruchomieniach. Może również pomóc w rozwiązywaniu problemów, w których repozytorium nadrzędne jest zawodne: na przykład uszkodzony adres URL pobierania.
Aby uzyskać szczegółowe instrukcje dotyczące konfigurowania tych pamięci podręcznych, przeczytaj artykuły dotyczące buforowania binarnego i buforowania zasobów.
Przykład: włączanie buforowania zasobów i plików binarnych w potoku usługi 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"
W tym przykładzie pokazano, jak skonfigurować binarną pamięć podręczną i pamięć podręczną zasobów w potoku usługi Azure DevOps. Ten fragment kodu należy dostosować do użycia w pliku YAML własnego potoku.
Podzielenie tego fragmentu kodu:
X_VCPKG_ASSET_SOURCES
to zmienna środowiskowa używana do konfigurowania pamięci podręcznych zasobów w narzędziu vcpkg. W tym przykładzie ustawiono wartość x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite
.
Zaplecze x-azurl
instruuje program vcpkg, aby używał kontenera usługi Azure Storage jako dostawcy magazynu. Następuje x-azurl
po nim trzy parametry rozdzielone przecinkami (,
).
https://my.domain.com/container
to adres URL kontenera magazynu.$(VcpkgAssetCache)
to zmienna wpisu tajnego potoku zawierająca token SAS do uwierzytelniania w kontenerze magazynu.readwrite
ustawia uprawnienia do odczytu i zapisu dla pamięci podręcznej zasobów. Oznacza to, że ta pamięć podręczna zasobów jest używana do przechowywania artefaktów oraz przywracania artefaktów z niej.
VCPKG_BINARY_SOURCES
to zmienna środowiskowa używana do konfigurowania binarnych pamięci podręcznych w narzędziu vcpkg. W tym przykładzie ustawiono wartość clear;nuget,https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json,readwrite
.
Umożliwia to zaplecze NuGet dla pamięci podręcznej binarnej przy użyciu źródła danych NuGet pod adresem https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json
. Aby uwierzytelnić się w kanale informacyjnym NuGet, zapoznaj się z samouczkiem zawierającym instrukcje dotyczące konfigurowania uwierzytelniania NuGet za pomocą usługi ADO.
Aby uwierzytelnić się w źródłach nuGet usługi Azure Artifacts, należy dodać następujące zadanie zgodnie z oczekiwaniami w potoku. To zadanie powinno być również uruchamiane przed jakimkolwiek zadaniem obejmującym narzędzie vcpkg.
- task: NuGetAuthenticate@1
Jeśli używasz innego hosta dla źródeł danych NuGet, zapoznaj się z dokumentacją dotyczącą sposobu uwierzytelniania nuGet.
Dowiedz się więcej o tym, jak działają wszystkie te elementy, czytając dokumentację dotyczącą funkcji pamięci podręcznej zasobów i binarnej pamięci podręcznej .
Konfigurowanie potoku do testowania portów rejestru
Po skonfigurowaniu binarnej pamięci podręcznej i pamięci podręcznej zasobów dla środowiska ciągłej integracji następnym krokiem jest skonfigurowanie potoku w celu przetestowania wszystkich portów rejestru. Możesz zdecydować, czy ten potok jest uruchamiany zgodnie z harmonogramem, czy też jest wyzwalany przez nowe zatwierdzenia lub żądania ściągnięcia.
Główny rejestr vcpkg używa vcpkg ci
polecenia , które zostało dostosowane do potrzeb projektu vcpkg i nie ma na celu pozostania stabilne lub używane przez konsumentów vcpkg. W związku z tym nie nadaje się do testowania własnych rejestrów vcpkg. Zalecamy wykonanie kroków opisanych w tym artykule.
Dołączanie wszystkich portów za pomocą pliku manifestu
Zamiast używać polecenia, zalecamy użycie pliku manifestu vcpkg ci
do utworzenia kompilacji, która zależy od wszystkich pakietów w rejestrze.
Poniższy przykład tworzy plik manifestu w celu przetestowania wszystkich portów w hipotetycznym rejestrze vcpkg. Zastąp listę zależności, aby uwzględnić wszystkie porty w rejestrze i umieścić je w katalogu głównym repozytorium.
vcpkg.json
{
"dependencies": [
"beicode",
"beison"
]
}
Twoje własne porty mogą mieć zależności od głównego rejestru vcpkg lub innych rejestrów innych firm, w tym przypadku należy dodać te rejestry w vcpkg-configuration.json
pliku. Mimo że program vcpkg może rozpoznawać pakiety z głównego rejestru bez dodatkowej konfiguracji, zdecydowanie zalecamy jawne dodanie go do listy rejestrów na potrzeby kontroli wersji.
Dzięki temu masz kontrolę nad zestawem bazowych wersji portów. Zapoznaj się z poleceniemvcpkg x-update-baseline
, aby ułatwić zarządzanie punktem odniesienia rejestrów.
vcpkg-configuration.json
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "42bb0d9e8d4cf33485afb9ee2229150f79f61a1f",
"packages": "*"
}
]
}
vcpkg.json
Przeczytaj artykuły i vcpkg-configuration.json
referencyjne, aby dowiedzieć się więcej. Zapoznaj się z dokumentacją trybu manifestu, aby dowiedzieć się, jak działają one razem.
Uzyskiwanie programu vcpkg w potoku usługi Azure DevOps
Jeśli używasz narzędzia vcpkg jako modułu podrzędnego w projekcie, możesz uzyskać repozytorium vcpkg w kroku, aby wyewidencjonować własny projekt, jak pokazano poniżej.
steps:
- checkout: self
submodules: true
W przeciwnym razie musisz uzyskać narzędzie vcpkg, aby używać go w potoku. Dodaj następujące kroki, aby sklonować repozytorium vcpkg.
resources:
repositories:
- repository: vcpkgRepo
type: github
name: Microsoft/vcpkg
endpoint: MyGitHubServiceConnection
steps:
- checkout: vcpkgRepo
Aby sklonować repozytorium vcpkg, należy zdefiniować zasób repozytorium dla potoku. Poniższy fragment kodu pokazuje, jak dodać repozytorium vcpkg jako zasób. Aby połączyć potok z usługą GitHub, musisz skonfigurować usługę Połączenie ion.
Po wyewidencjonowaniu repozytorium vcpkg jako modułu podrzędnego lub sklonowaniu go z usługi GitHub należy uruchomić skrypt bootstrap narzędzia vcpkg.
steps:
- script: vcpkg/bootstrap-vcpkg.sh
Po wykonaniu tych kroków należy pracować z plikiem wykonywalnym vcpkg.
Uruchamianie instalacji programu vcpkg w celu skompilowania portów
Ostatnim krokiem jest poinformowanie programu vcpkg o utworzeniu wszystkich portów. Być może zauważysz, że twój własny rejestr jest nieobecny w vcpkg-configuration.json
utworzonym kilku krokach powyżej. Przyczyną jest to, że chcesz przetestować wersję portów aktualnie w katalogu roboczym, w przeciwieństwie do wersji opublikowanych w repozytorium.
W tym celu należy dodać porty rejestru jako porty nakładki, ustawiając zmienną VCPKG_OVERLAY_PORTS
środowiskową w katalogu rejestru ports
.
Poniższy fragment kodu przedstawia sposób konfigurowania portów rejestru jako portów nakładki i uruchamiania vcpkg install
w trybie manifestu w celu zainstalowania wszystkich portów niestandardowych.
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"
W tym przykładzie przyjęto założenie, że vcpkg.json
plik jest tworzony w katalogu głównym repozytorium rejestru i że repozytorium vcpkg jest dodawane jako moduł podrzędny.
Umieszczenie całego pliku YAML potoków powinno wyglądać podobnie do następującego:
.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"
Jest to podstawowa struktura potoku ciągłej integracji do testowania portów rejestru. Może być wymagana dodatkowa praca w celu uwierzytelnienia w repozytoriach prywatnych lub w kanale informacyjnym NuGet.
Możesz również dodać kroki automatyzacji generowania vcpkg.json
pliku lub kroku sprawdzającego, czy porty nowo dodane do rejestru nie są pominięte w testach.
Następne kroki
Poniższe artykuły mogą być przydatne podczas konfigurowania środowiska ciągłej integracji.
- Uwierzytelnianie w prywatnych rejestrach usługi Git
- Konfigurowanie binarnej pamięci podręcznej przy użyciu pamięci podręcznej NuGet
- Konfigurowanie pamięci podręcznej zasobów
- Dokumentacja binarnej pamięci podręcznej
- Dokumentacja pamięci podręcznej zasobów
- Porty nakładki
- Tryb manifestu
vcpkg.json
vcpkg-configuration.json
- Zmienne środowiskowe konfiguracji programu vcpkg