Sdílet prostřednictvím


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šť.


  • 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í selfnone

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) je C:\agent\_work\1, váš kód je rezervován na C:\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žky s v (Agent.BuildDirectory). Pokud (Agent.BuildDirectory) jsou C:\agent\_work\1 a vaše úložiště jsou pojmenována tools a codeváš kód je rezervován na C:\agent\_work\1\s\tools a C:\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, nikoli repository hodnotu, která se použije k odkazování na úložiště v checkout 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é MyTagodkazuje .

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.

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.

This pipeline needs permission to access a resource

Authorize resource

Zvolte Zobrazit nebo autorizovat prostředky a podle pokynů povolte prostředky.

Waiting for review

Permit access

Další informace najdete v řešení potíží s autorizací pro kanál YAML.