Rezervace více úložišť v kanálu
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Kanály často spoléhají na několik úložišť, která obsahují zdrojový kód, nástroje, skripty nebo jiné položky, které potřebujete k sestavení kódu. Pomocí několika checkout
kroků v kanálu můžete načíst a rezervovat další úložiště kromě úložiště, které používáte k ukládání kanálu YAML.
Zadání více úložišť
Úložiště je možné zadat jako prostředek úložiště nebo vložit do checkout
kroku.
Podporují se následující typy úložišť.
Git Azure Repos (git
)
- Azure DevOps Server (omezený na úložiště ve stejné organizaci)
- Služby Azure DevOps
GitHub (github
)
- Služby Azure DevOps
GitHubEnterprise (githubenterprise
)
- Služby Azure DevOps
Bitbucket Cloud (bitbucket
)
- Služby Azure DevOps
Důležité
Rezervace s více úložišti v Azure DevOps Serveru podporují jenom úložiště Git (git
) Azure Repos ve stejné organizaci jako kanál.
Poznámka:
Azure Pipelines poskytuje nastavení rozsahu úloh limitu pro úložiště Git Azure Repos. Pokud chcete rezervovat úložiště Git Azure Repos hostovaná v jiném projektu, musí být obor úlohy limitu nakonfigurovaný tak, aby povoloval přístup. Další informace naleznete v tématu Omezení rozsahu autorizace úlohy.
Podporují se následující kombinace checkout
kroků.
Žádné checkout
kroky
Výchozí chování je jako checkout: self
první krok a aktuální úložiště je rezervováno.
Jeden checkout: none
krok
Žádná úložiště se nesynchronizují ani nezaškrtávají.
Jeden checkout: self
krok
Aktuální úložiště je rezervováno.
Jeden checkout
krok, který není nebo není self
none
Určené úložiště je rezervováno místo self
.
Více checkout
kroků
Každé určené úložiště je rezervováno do složky pojmenované po úložišti, pokud není v checkout
kroku zadán jinýpath
. Pokud se chcete podívat self
jako jedno z úložišť, použijte checkout: self
jako jeden z checkout
kroků.
Poznámka:
Při rezervování úložišť Azure Repos Git jiných, než je to, které obsahuje kanál, se může před prvním spuštěním kanálu zobrazit výzva k autorizaci přístupu k danému prostředku. Další informace najdete v tématu Proč se zobrazí výzva k autorizaci prostředků při prvním pokusu o rezervování jiného úložiště? V části Nejčastější dotazy .
Definice prostředku úložiště
Pokud typ úložiště vyžaduje připojení služby nebo jiné pole rozšířených prostředků, musíte použít prostředek úložiště. Následující typy úložišť vyžadují připojení služby.
Typ úložiště | Připojení služby |
---|---|
Bitbucket Cloud | Bitbucket Cloud |
GitHubu | GitHub |
Server GitHub Enterprise | GitHub Enterprise Server |
Úložiště Git v Azure Repos v jiné organizaci, než je váš kanál | Azure Repos / Team Foundation Server |
Prostředek úložiště můžete použít i v případě, že typ úložiště nevyžaduje připojení služby, například pokud máte prostředek úložiště definovaný pro šablony v jiném úložišti.
V následujícím příkladu jsou tři úložiště deklarována jako prostředky úložiště. Úložiště Git Azure Repos v jiné organizaci, GitHubu a prostředcích úložiště Bitbucket Cloud vyžadují připojení služeb, která jsou určená jako endpoint
pro tyto prostředky úložiště. Tento příklad obsahuje čtyři checkout
kroky, které kontrolují tři úložiště deklarovaná jako prostředky úložiště spolu s aktuálním self
úložištěm, které obsahuje kanál YAML.
resources:
repositories:
- repository: MyGitHubRepo # The name used to reference this repository in the checkout step
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
- repository: MyBitbucketRepo
type: bitbucket
endpoint: MyBitbucketServiceConnection
name: MyBitbucketOrgOrUser/MyBitbucketRepo
- repository: MyAzureReposGitRepository # In a different organization
endpoint: MyAzureReposGitServiceConnection
type: git
name: OtherProject/MyAzureReposGitRepo
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self
- checkout: MyGitHubRepo
- checkout: MyBitbucketRepo
- checkout: MyAzureReposGitRepository
- script: dir $(Build.SourcesDirectory)
self
Pokud je úložiště pojmenovanéCurrentRepo
, script
příkaz vytvoří následující výstup: CurrentRepo MyAzureReposGitRepo MyBitbucketRepo MyGitHubRepo
. V tomto příkladu se pro složky používají názvy úložišť (jak je určeno name
vlastností v prostředku úložiště), protože v kroku rezervace není zadáno žádné path
. Další informace o názvech a umístěních složek úložiště najdete v následující části Cesty k pokladně.
Rezervace vložené syntaxe
Pokud vaše úložiště nevyžaduje připojení ke službě, můžete ho deklarovat jako vložený s vaším checkout
krokem.
Poznámka:
Vloženou syntaxi můžou používat jenom úložiště Git Azure Repos ve stejné organizaci. Úložiště Git Azure Repos v jiné organizaci a jiné podporované typy úložišť vyžadují připojení ke službě a musí být deklarovány jako prostředek úložiště.
steps:
- checkout: self
- checkout: git://MyProject/MyRepo # Azure Repos Git repository in the same organization
Poznámka:
V předchozím příkladu self
je úložiště rezervace zadané, aby bylo možné rezervovat zdroj úložiště přidruženého ke kanálu.
Pokud používáte výchozí úložiště Git Azure Repos (které má stejný název jako projekt), použijte formát - checkout: git://MyRepo/MyRepo
.
Cesta k pokladně
path
Pokud není zadaný v checkout
kroku, zdrojový kód se umístí do výchozího adresáře. Tento adresář se liší v závislosti na tom, jestli si registrujete jedno úložiště nebo více úložišť.
Jedno úložiště: Pokud máte v úloze jeden
checkout
krok nebo nemáte žádný krok rezervace, který je ekvivalentnícheckout: self
, zdrojový kód je rezervován do adresáře, který se nazývás
podsložka(Agent.BuildDirectory)
. Pokud(Agent.BuildDirectory)
jeC:\agent\_work\1
, váš kód je rezervován naC:\agent\_work\1\s
.Více úložišť: Pokud máte v úloze více
checkout
kroků, je zdrojový kód rezervován do adresářů pojmenovaných po úložištích jako podsložkys
v(Agent.BuildDirectory)
. Pokud(Agent.BuildDirectory)
jsouC:\agent\_work\1
a vaše úložiště jsou pojmenovánatools
acode
váš kód je rezervován naC:\agent\_work\1\s\tools
aC:\agent\_work\1\s\code
.Poznámka:
Pokud není v
checkout
kroku zadán žádnýpath
, použije se název úložiště pro složku, nikolirepository
hodnotu, která se použije k odkazování na úložiště vcheckout
kroku.
path
Pokud je zadán pro checkout
krok, použije se tato cesta vzhledem k (Agent.BuildDirectory)
.
Poznámka:
Pokud používáte výchozí cesty, přidáním druhého kroku úložiště checkout
se změní výchozí cesta kódu pro první úložiště. Například kód pro pojmenované tools
úložiště by se rezervoval, pokud C:\agent\_work\1\s
tools
je jediným úložištěm, ale pokud je přidáno druhé úložiště, tools
bylo by rezervováno na C:\agent\_work\1\s\tools
. Pokud máte nějaké kroky, které závisí na zdrojovém kódu v původním umístění, musí být tyto kroky aktualizovány.
Rezervace konkrétní referenční hodnoty
Výchozí větev je rezervována, pokud nezadáte konkrétní odkaz.
Pokud používáte vloženou syntaxi, určete odkaz připojením @<ref>
. Příklad:
- checkout: git://MyProject/MyRepo@features/tools # checks out the features/tools branch
- checkout: git://MyProject/MyRepo@refs/heads/features/tools # also checks out the features/tools branch
- checkout: git://MyProject/MyRepo@refs/tags/MyTag # checks out the commit referenced by MyTag.
Při použití prostředku úložiště zadejte odkaz pomocí ref
vlastnosti. Následující příklad zkontroluje features/tools/
větev určeného úložiště.
resources:
repositories:
- repository: MyGitHubRepo
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
ref: features/tools
steps:
- checkout: MyGitHubRepo
Následující příklad používá značky k pokladně potvrzení, na které MyTag
odkazuje .
resources:
repositories:
- repository: MyGitHubRepo
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
ref: refs/tags/MyTag
steps:
- checkout: MyGitHubRepo
Aktivační události
Kanál můžete aktivovat, když se aktualizace odešle do self
úložiště nebo do libovolného úložiště deklarovaného jako prostředky. To je užitečné například v následujících scénářích:
- Nástroj nebo knihovnu využíváte z jiného úložiště. Testy aplikace chcete spouštět při každé aktualizaci nástroje nebo knihovny.
- Soubor YAML zůstane v samostatném úložišti od kódu aplikace. Kanál chcete aktivovat při každém odeslání aktualizace do úložiště aplikace.
Důležité
Aktivační události prostředku úložiště fungují jenom pro úložiště Git Azure Repos ve stejné organizaci a když je typem self
úložiště Git Azure Repos. Nefungují pro prostředky úložiště GitHub nebo Bitbucket.
batch
triggery prostředků úložiště se nepodporují.
Pokud v prostředku úložiště nezadáte trigger
oddíl, kanál se neaktivuje změnami v tomto úložišti. Pokud zadáte trigger
oddíl, chování pro aktivaci se podobá tomu, jak triggery CI fungují pro vlastní úložiště.
Pokud zadáte trigger
oddíl pro více prostředků úložiště, spustí se nová změna některého z nich.
Při aktivaci kanálu musí Azure Pipelines určit verzi souboru YAML, která se má použít, a verzi pro každé úložiště, které by se mělo rezervovat. Pokud změna úložiště self
aktivuje kanál, použije se k určení verze souboru YAML potvrzení, které kanál aktivovalo. Pokud změna jakéhokoli jiného prostředku úložiště aktivuje kanál, použije se nejnovější verze YAML z výchozí větve self
úložiště.
Když aktualizace na jedno z úložišť aktivuje kanál, nastaví se následující proměnné na základě aktivace úložiště:
Build.Repository.ID
Build.Repository.Name
Build.Repository.Provider
Build.Repository.Uri
Build.SourceBranch
Build.SourceBranchName
Build.SourceVersion
Build.SourceVersionMessage
Pro aktivující úložiště potvrzení, které aktivovalo kanál, určuje verzi rezervovaného kódu. U jiných úložišť ref
určuje definovaný v JAZYCE YAML pro tento prostředek úložiště výchozí verzi, která je rezervována.
Podívejte se na následující příklad, kde self
úložiště obsahuje soubor a úložiště A
YAML a B
obsahuje další zdrojový kód.
trigger:
- main
- feature
resources:
repositories:
- repository: A
type: git
name: MyProject/A
ref: main
trigger:
- main
- repository: B
type: git
name: MyProject/B
ref: release
trigger:
- main
- release
steps:
- checkout: self
- checkout: A
- checkout: B
Následující tabulka ukazuje, které verze jsou rezervovány pro každé úložiště kanálem pomocí výše uvedeného souboru YAML.
Změna provedené v | Aktivovaný kanál | Verze YAML | Verze self |
Verze A |
Verze B |
---|---|---|---|---|---|
main v self |
Ano | commit from main that triggered the pipeline |
commit from main that triggered the pipeline |
latest from main |
latest from release |
feature v self |
Ano | commit from feature that triggered the pipeline |
commit from feature that triggered the pipeline |
latest from main |
latest from release |
main v A |
Ano | latest from main |
latest from main |
commit from main that triggered the pipeline |
latest from release |
main v B |
Ano | latest from main |
latest from main |
latest from main |
commit from main that triggered the pipeline |
release v B |
Ano | latest from main |
latest from main |
latest from main |
commit from release that triggered the pipeline |
Kanál můžete aktivovat také při vytváření nebo aktualizaci žádosti o přijetí změn v libovolném úložišti. Uděláte to tak, že deklarujete prostředky úložiště v souborech YAML jako v příkladech výše a nakonfigurujete zásady větve v úložišti (pouze Azure Repos).
Podrobnosti o úložišti
Když si prohlédnete více úložišť, jsou některé podrobnosti o self
úložišti k dispozici jako proměnné.
Při použití aktivačních událostí s více úložišti mají některé z těchto proměnných místo toho informace o úložišti triggeru.
Podrobnosti o všech úložištích spotřebovaných úlohou jsou k dispozici jako kontextový objekt šablony s názvem resources.repositories
.
Pokud například chcete získat odkaz jiného úložištěself
, můžete napsat kanál podobný tomuto:
resources:
repositories:
- repository: other
type: git
name: MyProject/OtherTools
variables:
tools.ref: $[ resources.repositories['other'].ref ]
steps:
- checkout: self
- checkout: other
- bash: |
echo "Tools version: $TOOLS_REF"
Často kladené dotazy
- Proč nemůžu rezervovat úložiště z jiného projektu? Dříve to fungovalo.
- Proč se při prvním pokusu o rezervování jiného úložiště zobrazí výzva k autorizaci prostředků?
Proč nemůžu rezervovat úložiště z jiného projektu? Dříve to fungovalo.
Azure Pipelines poskytuje omezení oboru autorizace úlohy na aktuální nastavení projektu, které, pokud je povolené, neumožňuje kanálu přístup k prostředkům mimo projekt, který kanál obsahuje. Toto nastavení je možné nastavit na úrovni organizace, nebo projektu. Pokud je toto nastavení povolené, nebudete moct rezervovat úložiště v jiném projektu, dokud explicitně neudělíte přístup. Další informace najdete v tématu Obor autorizace úlohy.
Proč se při prvním pokusu o rezervování jiného úložiště zobrazí výzva k autorizaci prostředků?
Při rezervování úložišť Azure Repos Git jiných, než je to, které obsahuje kanál, se může před prvním spuštěním kanálu zobrazit výzva k autorizaci přístupu k danému prostředku. Tyto výzvy se zobrazují na stránce souhrnu spuštění kanálu.
Zvolte Zobrazit nebo autorizovat prostředky a podle pokynů povolte prostředky.
Další informace najdete v řešení potíží s autorizací pro kanál YAML.