Testování vlastních portů registru pomocí vcpkg s Azure DevOps
Jakmile nastavíte vlastní registr portů vcpkg, můžete přidat kontinuální integraci, abyste ověřili, že všechny vaše závislosti lze úspěšně sestavit.
Hlavní registr vcpkg v Microsoft/vcpkg testuje tým vcpkg pomocí kanálu kontinuální integrace (CI) s Azure DevOps. Tím se zajistí, že přidání nových balíčků nebo aktualizace stávajících balíčků neporuší uživatele.
V tomto článku vám ukážeme, jak nastavit prostředí CI pro testování portů vcpkg ve vašem vlastním registru.
V tomto článku se naučíte:
- Nastavení binární mezipaměti a mezipaměti prostředků pro kanál Azure DevOps
- Nastavení kanálu pro otestování portů registru
Požadavky
- Účet Azure DevOps
- Váš vlastní registr vcpkg Git
- Dokončení kurzů ukládání do binární mezipaměti a ukládání prostředků do mezipaměti .
- Znalost kanálů ADO
Nastavení binární mezipaměti a mezipaměti prostředků pro vaše kanály Azure DevOps
Vytvoření velké kolekce portů je nákladná úloha z hlediska času i výpočetního výkonu. Důrazně doporučujeme, abyste před zapojením CI pro vaše porty investovali do nastavení binární mezipaměti a mezipaměti prostředků pro vaše kanály Azure DevOps.
Binární mezipaměť poskytuje největší výhodu pro scénáře CI tím, že zajišťuje, aby se neupravené balíčky znovu nevystavily při každém spuštění CI. Mezipaměť prostředků zrcadlí artefakty stažené pro balíčky během spuštění a použije artefakty uložené v mezipaměti v následných spuštěních. Může také pomoct zmírnit problémy, kdy upstreamové úložiště nespolehlivé: například nefunkční adresa URL pro stahování.
Podrobné pokyny k nastavení těchto mezipamětí najdete v článcích o ukládání binární mezipaměti a ukládání prostředků do mezipaměti .
Příklad: Povolení prostředku a binární mezipaměti v kanálu 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"
Tento příklad ukazuje, jak nastavit binární mezipaměť a mezipaměť prostředků v kanálu Azure DevOps. Tento fragment kódu byste měli přizpůsobit tak, aby se používal v souboru YAML vašeho vlastního kanálu.
Rozdělení tohoto fragmentu kódu:
X_VCPKG_ASSET_SOURCES
je proměnná prostředí použitá ke konfiguraci mezipaměti prostředků v vcpkg. V tomto příkladu je nastavena na x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite
hodnotu .
Back-end x-azurl
dává vcpkg pokyn, aby jako poskytovatele úložiště použil kontejner Azure Storage. Za ním x-azurl
následují tři parametry oddělené čárkami (,
).
https://my.domain.com/container
je adresa URL kontejneru úložiště.$(VcpkgAssetCache)
je proměnná tajného kódu kanálu, která obsahuje token SAS pro ověření v kontejneru úložiště.readwrite
nastaví oprávnění ke čtení a zápisu pro mezipaměť prostředků. To znamená, že tato mezipaměť prostředků se používá k ukládání artefaktů i k obnovení artefaktů z ní.
VCPKG_BINARY_SOURCES
je proměnná prostředí použitá ke konfiguraci binárních mezipamětí v vcpkg. V tomto příkladu je nastavena na clear;nuget,https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json,readwrite
hodnotu .
To umožňuje back-end NuGet pro binární mezipaměť pomocí informačního kanálu NuGet na adrese https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json
. K ověření v informačním kanálu NuGet může být potřeba provést několik dalších kroků. Pokyny k nastavení ověřování NuGet pomocí ADO najdete v kurzu .
Pokud chcete ověřit informační kanály NuGet Azure Artifacts, měli byste do kanálu přidat následující úlohu. Tato úloha by se měla spustit také před všemi úlohami zahrnujícími vcpkg.
- task: NuGetAuthenticate@1
Pokud pro informační kanály NuGet používáte jiného hostitele, přečtěte si dokumentaci o ověřování NuGetu.
Další informace o tom, jak všechny tyto funkce fungují, najdete v dokumentaci k mezipaměti prostředků a funkcím binární mezipaměti.
Nastavení kanálu pro otestování portů registru
Po nastavení binární mezipaměti a mezipaměti prostředků pro vaše prostředí CI je dalším krokem nastavení kanálu pro otestování všech portů registru. Můžete se rozhodnout, jestli se tento kanál spouští podle plánu, nebo jestli se aktivuje novými potvrzeními nebo žádostmi o přijetí změn.
Hlavní registr vcpkg používá vcpkg ci
příkaz, který je přizpůsobený potřebám projektu vcpkg a není určen k tomu, aby zůstal stabilní nebo aby ho používali spotřebitelé vcpkg. Proto se nehodí k testování vlastních registrů vcpkg. Doporučujeme místo toho postupovat podle kroků uvedených v tomto článku.
Zahrnutí všech portů pomocí souboru manifestu
Místo použití vcpkg ci
příkazu doporučujeme k vytvoření sestavení, které závisí na všech balíčcích ve vašem registru, použít soubor manifestu.
Následující příklad vytvoří soubor manifestu pro otestování všech portů v hypotetické registru vcpkg. Nahraďte seznam závislostí, které budou zahrnovat všechny porty v registru, a umístěte ho do kořenového adresáře úložiště.
vcpkg.json
{
"dependencies": [
"beicode",
"beison"
]
}
Vlastní porty můžou mít závislosti na hlavním registru vcpkg nebo jiných registrech třetích stran, v takovém případě je potřeba tyto registry přidat do vcpkg-configuration.json
souboru. I když nástroj vcpkg dokáže přeložit balíčky z hlavního registru bez další konfigurace, důrazně doporučujeme, abyste je explicitně přidali do seznamu registrů pro účely správy verzí.
Tím se zajistí, že máte kontrolu nad sadou základních verzí portů. Podívejte se na příkaz, vcpkg x-update-baseline
který vám pomůže se správou směrného plánu vašich registrů.
vcpkg-configuration.json
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "42bb0d9e8d4cf33485afb9ee2229150f79f61a1f",
"packages": "*"
}
]
}
Další informace najdete v vcpkg.json
článcích s referenčními informacemi.vcpkg-configuration.json
A dokumentaci k režimu manifestu, kde se dozvíte, jak tyto postupy spolupracují.
Získání vcpkg v kanálu Azure DevOps
Pokud v projektu použijete jako dílčí modul vcpkg, můžete v kroku získat úložiště vcpkg, abyste si mohli rezervovat vlastní projekt, jak je znázorněno níže.
steps:
- checkout: self
submodules: true
Jinak musíte získat vcpkg, abyste ho mohli použít ve vašem kanálu. Přidejte následující kroky pro klonování úložiště vcpkg.
resources:
repositories:
- repository: vcpkgRepo
type: github
name: Microsoft/vcpkg
endpoint: MyGitHubServiceConnection
steps:
- checkout: vcpkgRepo
Pokud chcete naklonovat úložiště vcpkg, musíte pro svůj kanál definovat prostředek úložiště. Následující fragment kódu ukazuje, jak přidat úložiště vcpkg jako prostředek, budete muset nastavit službu Připojení ion pro připojení kanálu k GitHubu.
Po rezervaci úložiště vcpkg buď jako dílčího modulu nebo klonováním z GitHubu, musíte spustit spouštěcí skript vcpkg.
steps:
- script: vcpkg/bootstrap-vcpkg.sh
Po dokončení těchto kroků byste měli mít spustitelný soubor vcpkg, se kterým chcete pracovat.
Spuštění instalace vcpkg pro sestavení portů
Posledním krokem je informovat vcpkg, aby se vytvořily všechny porty. Možná jste si všimli, že váš vlastní registr chybí ve vcpkg-configuration.json
vytvořeném několika krocích výše. Důvodem je, že chcete otestovat verzi portů, které jsou aktuálně v pracovním adresáři, a ne verze publikované ve vašem úložišti.
Pro tento cíl musíte přidat porty registru jako překryvné porty nastavením VCPKG_OVERLAY_PORTS
proměnné prostředí do adresáře registru ports
.
Následující fragment kódu ukazuje, jak nastavit porty registru jako překryvné porty a spustit vcpkg install
v režimu manifestu pro instalaci všech vlastních portů.
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"
V tomto příkladu předpokládáme, že vcpkg.json
se soubor vytvoří v kořenovém adresáři úložiště vašeho registru a že se úložiště vcpkg přidá jako dílčí modul.
Všechny soubory YAML kanálu by měly vypadat nějak takto:
.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"
Toto je základní struktura kanálu CI pro otestování portů registru. Pro ověření v privátních úložištích nebo v informačním kanálu NuGet můžete vyžadovat další práci.
Můžete také přidat kroky pro automatizaci generování vcpkg.json
souboru nebo kroku, který ověřuje, že porty nově přidané do registru nejsou vynechány z testů.
Další kroky
Při nastavování prostředí CI vám můžou být užitečné následující články.
- Ověřování u privátních registrů Git
- Nastavení binární mezipaměti pomocí mezipaměti NuGet Cache
- Nastavení mezipaměti prostředků
- Referenční informace k binární mezipaměti
- Referenční informace k mezipaměti prostředků
- Překryvné porty
- Režim manifestu
vcpkg.json
vcpkg-configuration.json
- Proměnné konfiguračního prostředí vcpkg