Možnosti kanálu pro úložiště Git
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Při úpravách kanálu, který používá úložiště Git – v projektu Azure DevOps, GitHubu, GitHubu Enterprise Serveru, Bitbucket Cloudu nebo jiném úložišti Git máte následující možnosti.
Funkce | Azure Pipelines | Azure DevOps Server 2019 a novější | TFS 2018 |
---|---|---|---|
Pobočka | Ano | Ano | Yes |
Clean | Ano | Ano | Yes |
Zdroje značek nebo popisků | Projekt; Pouze classic | Týmový projekt | Týmový projekt |
Sestava stavu sestavení | Ano | Ano | Yes |
Rezervace dílčích modulů | Ano | Ano | Yes |
Rezervace souborů z LFS | Ano | Ano | Yes |
Klonování druhého úložiště | Ano | Ano | Yes |
Nesynchronizovat zdroje | Ano | Ano | Yes |
Mělký fetch | Ano | Ano | Ano |
Poznámka:
Kliknutím na Upřesnit nastavení v úloze Získat zdroje zobrazíte některé z výše uvedených možností.
Pobočka
Toto je větev, kterou chcete nastavit jako výchozí, když ručně zařadíte tento build do fronty. Pokud nastavíte naplánovanou aktivační událost pro sestavení, jedná se o větev, ze které bude vaše sestavení získávat nejnovější zdroje. Výchozí větev nemá žádné ložisko při aktivaci sestavení prostřednictvím kontinuální integrace (CI). Obvykle to nastavíte tak, aby byla stejná jako výchozí větev úložiště (například "master").
Vyčištění místního úložiště v agentu
Před spuštěním sestavení můžete provádět různé formy čištění pracovního adresáře agenta v místním prostředí.
Obecně platí, že pokud chcete dosáhnout rychlejšího výkonu agentů v místním prostředí, nevyčistíte úložiště. Pokud chcete dosáhnout nejlepšího výkonu, ujistěte se, že vytváříte také přírůstkově tím, že zakážete jakoukoli možnost vyčistit úlohu nebo nástroj, který používáte k sestavení.
Pokud potřebujete vyčistit úložiště (například předejít problémům způsobeným zbytkovými soubory z předchozího buildu), máte níže uvedené možnosti.
Poznámka:
Čištění není efektivní, pokud používáte agenta hostovaného Microsoftem, protože pokaždé získáte nového agenta. Pokud používáte agenty v místním prostředí v závislosti na konfiguraci fondů agentů, můžete získat nového agenta pro následné spuštění kanálu (nebo fáze nebo úlohy ve stejném kanálu), takže nezaručíte čištění, že následné spuštění, úlohy nebo fáze budou mít přístup k výstupům z předchozích spuštění, úloh nebo fází.
Poznámka:
Pokud používáte agenty v místním prostředí v závislosti na konfiguraci fondů agentů, můžete získat nového agenta pro následné spuštění kanálu (nebo fáze nebo úlohy ve stejném kanálu), takže nezaručíte čištění, že následné spuštění, úlohy nebo fáze budou mít přístup k výstupům z předchozích spuštění, úloh nebo fází. Artefakty sestavení můžete použít ke sdílení výstupů spuštění, fáze nebo úlohy kanálu s následnými spuštěními, fázemi nebo úlohami.
Azure Pipelines, Azure DevOps Server 2019 a novější
Pro kanály YAML je k dispozici několik různých možností čištění.
- Krok
checkout
máclean
možnost. Pokud jetrue
tato možnost nastavená, kanál se spustíexecute git clean -ffdx && git reset --hard HEAD
před načtením úložiště. Další informace najdete v tématu Rezervace. - Nastavení
workspace
májob
několik možností čištění (výstupy, prostředky, vše). Další informace najdete v tématu Pracovní prostor. - Uživatelské rozhraní nastavení kanálu má nastavení Vyčistit , které při nastavení na hodnotu true odpovídá zadání
clean: true
pro každýcheckout
krok v kanálu. Konfigurace nastavení Vyčistit:Upravte kanál, zvolte ...a vyberte Aktivační události.
Vyberte YAML, Získat zdroje a nakonfigurujte požadované nastavení Vyčistit . Výchozí hodnota je true.
Pokud chcete přepsat čistá nastavení při ručním spuštění kanálu, můžete použít parametry modulu runtime. V následujícím příkladu se k konfiguraci čistého nastavení rezervace používá parametr modulu runtime.
parameters:
- name: clean
displayName: Checkout clean
type: boolean
default: true
values:
- false
- true
trigger:
- main
pool: FabrikamPool
# vmImage: 'ubuntu-latest'
steps:
- checkout: self
clean: ${{ parameters.clean }}
Ve výchozím nastavení je nastavená na true
hodnotu, clean
ale při ručním spuštění kanálu můžete přepsat zaškrtnutím políčka Checkout clean checkout, které je přidáno pro parametr modulu runtime.
Zdroje popisků
Soubory zdrojového kódu můžete označovat tak, aby váš tým mohl snadno zjistit, která verze každého souboru je součástí dokončeného sestavení. Máte také možnost určit, jestli má být zdrojový kód označený pro všechna sestavení nebo pouze pro úspěšné sestavení.
Poznámka:
Tuto funkci můžete použít jenom v případě, že zdrojové úložiště ve vašem buildu je úložiště GitHub nebo úložiště Git nebo TFVC z vašeho projektu.
Ve formátu Popisek můžete použít uživatelem definované a předdefinované proměnné, které mají obor "Vše". Například:
$(Build.DefinitionName)_$(Build.DefinitionVersion)_$(Build.BuildId)_$(Build.BuildNumber)_$(My.Variable)
První čtyři proměnné jsou předdefinované. My.Variable
můžete je definovat na kartě proměnných.
Kanál buildu označuje vaše zdroje značkou Git.
Některé proměnné sestavení můžou přinést hodnotu, která není platným popiskem. Například proměnné, například $(Build.RequestedFor)
a $(Build.DefinitionName)
mohou obsahovat prázdné znaky. Pokud hodnota obsahuje prázdné znaky, značka se nevytvořila.
Po označení zdrojů kanálem buildu se do dokončeného sestavení automaticky přidá artefakt s odkazem refs/tags/{tag}
Git. Díky tomu může váš tým získat další sledovatelnost a uživatelsky přívětivější způsob, jak přejít z sestavení na vytvořený kód. Značka se považuje za artefakt sestavení, protože je vytvořen sestavením. Když se sestavení odstraní ručně nebo prostřednictvím zásad uchovávání informací, značka se odstraní také.
Hlášení stavu sestavení (Azure Pipelines, TFS 2018 a novější)
Máte možnost dát týmu zobrazení stavu sestavení ze vzdáleného zdrojového úložiště.
Pokud jsou vaše zdroje v úložišti Git Azure Repos ve vašem projektu, zobrazí tato možnost na stránce Kód odznáček, který indikuje, jestli se sestavení předává nebo selhává. Stav sestavení se zobrazí na následujících kartách:
- Soubory: Označuje stav nejnovějšího sestavení pro vybranou větev.
- Potvrzení: Označuje stav sestavení každého potvrzení (to vyžaduje povolení triggeru kontinuální integrace (CI) pro vaše sestavení).
- Větve: Označuje stav nejnovějšího sestavení pro každou větev.
Pokud ve svém projektu používáte více kanálů sestavení pro stejné úložiště, můžete tuto možnost povolit pro jeden nebo více kanálů. V případě, že je tato možnost povolená u více kanálů, odznáček na stránce Kód označuje stav nejnovějšího buildu ve všech kanálech. Členové vašeho týmu můžou kliknout na odznáček stavu sestavení a zobrazit nejnovější stav sestavení pro každý kanál buildu.
GitHubu
Pokud jsou vaše zdroje na GitHubu, tato možnost publikuje stav sestavení na GitHub pomocí rozhraní GITHub Checks nebo Status API. Pokud se sestavení aktivuje z žádosti o přijetí změn GitHubu, můžete zobrazit stav na stránce žádosti o přijetí změn Na GitHubu. To vám také umožňuje nastavit zásady stavu v Rámci GitHubu a automatizovat sloučení. Pokud je sestavení aktivované kontinuální integrací (CI), můžete zobrazit stav sestavení na potvrzení nebo větvi na GitHubu.
Další typy vzdálených úložišť Git
Pokud je váš zdroj v jiném typu vzdáleného úložiště, nemůžete k automatickému publikování stavu sestavení do tohoto úložiště použít Azure Pipelines ani TFS. Odznáček buildu ale můžete použít jako způsob integrace a zobrazení stavu sestavení v rámci prostředí správy verzí.
Cesta k pokladně
Pokud si rezervujete jedno úložiště, ve výchozím nastavení se váš zdrojový kód rezervuje do adresáře s názvem s
. U kanálů YAML to můžete změnit zadáním checkout
parametru path
. Zadaná cesta je relativní vzhledem k $(Agent.BuildDirectory)
. Příklad: Pokud je hodnota cesty rezervace a $(Agent.BuildDirectory)
je mycustompath
C:\agent\_work\1
, zdrojový kód bude rezervován do C:\agent\_work\1\mycustompath
.
Pokud používáte více checkout
kroků a rezervování více úložišť a explicitně nezadáte složku pomocí path
, každé úložiště se umístí do podsložky s
pojmenované po úložišti. Pokud si například projdete dvě pojmenovaná tools
úložiště a code
zdrojový kód bude rezervován do C:\agent\_work\1\s\tools
a C:\agent\_work\1\s\code
.
Mějte na paměti, že hodnotu cesty rezervace nelze nastavit tak, aby přecházela na žádné úrovně adresáře výše $(Agent.BuildDirectory)
, takže path\..\anotherpath
výsledkem bude platná cesta k pokladně (tj. C:\agent\_work\1\anotherpath
), ale hodnota jako ..\invalidpath
ne (tj. C:\agent\_work\invalidpath
).
Pokud používáte více checkout
kroků a rezervování více úložišť a chcete explicitně zadat složku pomocí path
, zvažte možnost vyhnout se nastavení cesty, která je podsložka cesty jiného kroku rezervace (tj. C:\agent\_work\1\s\repo1
a C:\agent\_work\1\s\repo1\repo2
), jinak se podsložka kroku rezervace vymaže čištěním jiného úložiště. Upozorňujeme, že tento případ je platný, pokud platí čistá možnost pro repo1
)
Poznámka:
Cestu k pokladně je možné zadat pouze pro kanály YAML. Další informace najdete v tématu Rezervace ve schématu YAML.
Rezervační dílčí moduly
Vyberte, jestli chcete stahovat soubory z dílčích modulů. Můžete se rozhodnout buď získat okamžité dílčímoduly, nebo všechny dílčímoduly vnořené do jakékoli hloubky rekurze. Pokud chcete používat LFS s dílčími režimy, nezapomeňte si prohlédnout poznámku o použití LFS s dílčími režimy.
Poznámka:
Další informace o syntaxi YAML pro rezervaci dílčích modulů naleznete v tématu Rezervace ve schématu YAML.
Kanál buildu zkontroluje vaše dílčí režimy Gitu, pokud jsou:
Neověřené: Veřejné neověřené úložiště bez přihlašovacích údajů potřebných ke klonování nebo načítání.
Ověřený:
Obsažené ve stejném projektu, organizaci GitHubu nebo účtu Bitbucket Cloud jako úložiště Git uvedené výše.
Přidáno pomocí adresy URL vzhledem k hlavnímu úložišti. Například tato by byla rezervována:
git submodule add /../../submodule.git mymodule
Tato by nebyla rezervována:git submodule add https://dev.azure.com/fabrikamfiber/_git/ConsoleApp mymodule
Ověřené dílčímoduly
Poznámka:
Ujistěte se, že jste své dílčímoduly zaregistrovali pomocí protokolu HTTPS a nepoužíváte SSH.
Stejné přihlašovací údaje, které agent používá k získání zdrojů z hlavního úložiště, slouží také k získání zdrojů pro dílčí moduly.
Pokud se hlavní úložiště a dílčí moduly nacházejí v úložišti Git Azure Repos v projektu Azure DevOps, můžete vybrat účet použitý pro přístup ke zdrojům. Na kartě Možnosti vyberte v nabídce Rozsah autorizace úlohy sestavení jednu z těchto možností:
Kolekce projektů pro použití účtu služby Sestavení kolekce projektů
Aktuální projekt pro použití účtu služby Sestavení projektu
Ujistěte se, že jakýkoli účet, který používáte, má přístup k hlavnímu úložišti i k dílčím modulům.
Pokud jsou hlavní úložiště a dílčí moduly ve stejné organizaci GitHubu, použije se token uložený v připojení ke službě GitHub pro přístup ke zdrojům.
Alternativu k použití možnosti Dílčí režimy rezervace
V některých případech nemůžete použít možnost Dílčí režimy rezervace. Může se stát, že pro přístup k dílčím modulům potřebujete jinou sadu přihlašovacích údajů. K tomu může dojít například v případě, že vaše hlavní úložiště a úložiště dílčího modulu nejsou uložená ve stejné organizaci Azure DevOps nebo ve službě Git.
Pokud nemůžete použít možnost Dílčí moduly rezervace, můžete místo toho k načtení dílčích modulů použít krok vlastního skriptu.
Nejprve získejte osobní přístupový token (PAT) a předponu ho předponou pat:
.
Dále zakódujte tento řetězec s předponou base64 a vytvořte základní ověřovací token.
Nakonec do kanálu přidejte tento skript:
git -c http.https://<url of submodule repository>.extraheader="AUTHORIZATION: basic <BASE64_ENCODED_TOKEN_DESCRIBED_ABOVE>" submodule update --init --recursive
Nezapomeňte nahradit "<BASIC_AUTH_TOKEN>" tokenem kódováním Base64.
Pomocí proměnné tajného kódu v projektu nebo kanálu buildu uložte základní ověřovací token, který jste vygenerovali. Tuto proměnnou použijte k naplnění tajného kódu ve výše uvedeném příkazu Gitu.
Poznámka:
Otázka: Proč nemůžu v agentovi používat správce přihlašovacích údajů Gitu? A: Uložení přihlašovacích údajů dílčího modulu ve správci přihlašovacích údajů Gitu nainstalovaném v agentu privátního sestavení obvykle není efektivní, protože správce přihlašovacích údajů vás může vyzvat k opětovnému zadání přihlašovacích údajů při každé aktualizaci dílčího modulu. To není žádoucí během automatizovaných sestavení, pokud interakce uživatelů není možná.
Rezervace souborů z LFS
Vyberte, jestli chcete stahovat soubory z velkého úložiště souborů (LFS).
V klasickém editoru zaškrtněte políčko, pokud chcete tuto možnost povolit.
V sestavení YAML přidejte krok rezervace s nastaveným lfs
na true
:
steps:
- checkout: self
lfs: true
Pokud používáte TFS nebo používáte Azure Pipelines s místním agentem, musíte na agenta nainstalovat git-lfs
, aby tato možnost fungovala. Pokud hostovaní agenti používají Windows, zvažte použití System.PreferGitFromPath
proměnné, abyste zajistili, že kanály používají verze Gitu a git-lfs, které jste nainstalovali na počítač. Další informace najdete v tématu Jakou verzi Gitu můj agent spouští?
Použití Git LFS s dílčími režimy
Pokud dílčí modul obsahuje soubory LFS, musí být před rezervování dílčích modulů nakonfigurovaný Git LFS. Agenti macOS a Linux hostovaní Microsoftem jsou tímto způsobem předem nakonfigurovaní. Agenti Windows a agenti macOS nebo Linux v místním prostředí nemusí.
Pokud používáte YAML, můžete jako alternativní řešení přidat následující krok před:checkout
steps:
- script: |
git config --global --add filter.lfs.required true
git config --global --add filter.lfs.smudge "git-lfs smudge -- %%f"
git config --global --add filter.lfs.process "git-lfs filter-process"
git config --global --add filter.lfs.clean "git-lfs clean -- %%f"
displayName: Configure LFS for use with submodules
- checkout: self
lfs: true
submodules: true
# ... rest of steps ...
Klonování druhého úložiště
Ve výchozím nastavení je váš kanál přidružený k jednomu úložišti z Azure Repos nebo externího poskytovatele. Toto je úložiště, které může aktivovat sestavení na potvrzeních a žádostech o přijetí změn.
Do kanálu můžete zahrnout zdroje z druhého úložiště. Můžete to provést napsáním skriptu.
git clone https://github.com/Microsoft/TypeScript.git
Pokud úložiště není veřejné, budete muset předat ověření do příkazu Git.
Azure Repos
Váš kanál už bude mít přístup k jiným úložišťm v projektu a můžete je v kanálu naklonovat pomocí příkazu skriptu, jak je znázorněno v následujícím příkladu.
- script: |
git clone -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" https://organization@dev.azure.com/project/FabrikamFiber/_git/reponame
Pokud potřebujete naklonovat úložiště z jiného projektu, který není veřejný, budete se muset ověřit jako uživatel, který má k danému projektu přístup.
Poznámka:
K bezpečnému uložení přihlašovacích údajů použijte proměnnou tajného kódu.
Tajné proměnné nejsou automaticky zpřístupněny skriptům jako proměnné prostředí. Informace o tom, jak je mapovat, najdete v tématu Tajné proměnné .
Pro Azure Repos můžete použít osobní přístupový token s oprávněním Code (Read).
Odešlete toto pole jako heslo v hlavičce základní autorizace bez uživatelského jména.
(Jinými slovy, base64 kóduje hodnotu :<PAT>
, včetně dvojtečky.)
AUTH=$(echo -n ":$REPO_PAT" | openssl base64 | tr -d '\n')
git -c http.<repo URL>.extraheader="AUTHORIZATION: basic $AUTH" clone <repo URL> --no-checkout --branch master
Nesynchronizovat zdroje
Úlohy bez nasazení automaticky načítají zdroje. Tuto možnost použijte, pokud chcete toto chování přeskočit. Tato možnost může být užitečná v případech, kdy chcete:
Inicializaci, konfiguraci a načítání Gitu pomocí vlastních možností
Pomocí kanálu buildu stačí spustit automatizaci (například některé skripty), které nezávisí na kódu ve správě verzí.
Pokud chcete zakázat stahování zdrojů:
- Azure Pipelines, TFS 2018 a novější: Klikněte na Upřesnit nastavení a pak vyberte Nesynchronizovat zdroje.
Poznámka:
Když použijete tuto možnost, agent také přeskočí spouštění příkazů Gitu, které vyčistí úložiště.
Mělký fetch
Vyberte, jestli chcete omezit, jak daleko se má historie stáhnout. Výsledkem je git fetch --depth=n
efektivně . Pokud je vaše úložiště velké, může tato možnost zefektivnit kanál buildu. Vaše úložiště může být velké, pokud se používá dlouhou dobu a má velikostelnou historii. Pokud jste přidali a později odstranili velké soubory, může to být také velké.
V těchto případech vám tato možnost může pomoct ušetřit síťové a úložné prostředky. Může také ušetřit čas. Důvodem, proč ne vždy šetří čas, je to proto, že v některých situacích může server potřebovat strávit čas výpočtem potvrzení ke stažení pro vámi určenou hloubku.
Poznámka:
Když je sestavení zařazeno do fronty, větev k sestavení se přeloží na ID potvrzení. Potom agent načte větev a zkontroluje požadované potvrzení. Existuje malé okno mezi tím, kdy se větev přeloží na ID potvrzení a kdy agent provede rezervaci. Pokud se větev rychle aktualizuje a nastavíte velmi malou hodnotu pro mělké načtení, potvrzení nemusí existovat, když se agent pokusí ho rezervovat. Pokud k tomu dojde, zvyšte nastavení hloubky načtení mělké hloubky.
Po zaškrtnutí políčka pro povolení této možnosti zadejte v poli Hloubka počet potvrzení.
Tip
Proměnná Agent.Source.Git.ShallowFetchDepth
uvedená níže také funguje a přepíše ovládací prvky zaškrtávacího políčka. Tímto způsobem můžete změnit nastavení při zařadíte do fronty sestavení.
Preferovat Git z cesty
Ve výchozím nastavení používá agent Windows verzi Gitu, která je součástí softwaru agenta. Microsoft doporučuje používat verzi Gitu, která je součástí agenta, ale máte několik možností, jak toto výchozí chování přepsat a použít verzi Gitu, kterou má počítač agenta nainstalovaný v cestě.
- Nastavte proměnnou kanálu s názvem
System.PreferGitFromPath
vtrue
kanálech. - V agentech v místním prostředí můžete vytvořit soubor s názvem .env v kořenovém adresáři agenta a přidat
System.PreferGitFromPath=true
do souboru řádek. Další informace najdete v tématu Návody nastavení různých proměnných prostředí pro každého jednotlivého agenta?
Pokud chcete zobrazit verzi Gitu používanou kanálem, můžete se podívat na protokoly kroku checkout
v kanálu, jak je znázorněno v následujícím příkladu.
Syncing repository: PathFilter (Git)
Prepending Path environment variable with directory containing 'git.exe'.
git version
git version 2.26.2.windows.1
Toto nastavení platí vždy u agentů jiných než Windows.
Možnosti triggeru pro jiný Git
Pokud je zadané jiné nebo externí úložiště Git, sestavení CI vyžadují, aby bylo úložiště přístupné z internetu. Pokud se úložiště nachází za bránou firewall nebo proxy serverem, bude fungovat pouze naplánované a ruční sestavení.
Často kladené dotazy
Jaké protokoly může agent sestavení používat s Gitem?
Agent podporuje PROTOKOL HTTPS.
Agent zatím nepodporuje SSH. Viz Povolit sestavení používat ověřování SSH při rezervaci dílčích modulů Gitu.
Používám místně TFS a některé z těchto funkcí nevidím. Proč ne?
Některé z těchto funkcí jsou dostupné jenom v Azure Pipelines a zatím nejsou dostupné místně. Některé funkce jsou dostupné místně, pokud jste upgradovali na nejnovější verzi TFS.