İşlem hattınıza birden çok depoyu göz at

Azure Pipelines | Azure DevOps Server 2020

Pipelines genellikle kodunuzu derlemek için ihtiyacınız olan kaynak, araç, betik veya diğer öğeleri içeren birden çok depoyu kullanabilirsiniz. İşlem hattınızı birden çok adım kullanarak YAML işlem hattınızı depolamak için kullanabileceğiniz depoya ek olarak diğer depoları da getirebilirsiniz checkout ve kontrol edin.

Birden çok depo belirtme

Depolar, bir depo kaynağı olarak veyaadımla satır içi olarak checkout belirtilebilir.

Aşağıdaki depo türleri de kullanılabilir.


Azure Repos Git ( git )

  • Azure DevOps Server 2020 (aynı kuruluşta depolar ile sınırlıdır)
  • Azure DevOps Services

GitHub ( github )

  • Azure DevOps Services

GitHubEnterprise ( githubenterprise )

  • Azure DevOps Services

Bitbucket Cloud ( bitbucket )

  • Azure DevOps Services

Önemli

2020 Azure Repos de birden çok depoyu iade etmek için yalnızca işlem hattıyla aynı kuruluşta yer alan Git ( git ) Azure DevOps Server kullanılabilir.

Not

Azure Pipelines Git depoları için iş kapsamı Azure Repos sınırla sağlar. Başka bir projede Azure Repos Git depolarını kontrol etmek için Sınırla iş kapsamının erişime izin verecek şekilde yapılandırılması gerekir. Daha fazla bilgi için bkz. İş yetkilendirme kapsamını sınırlama.

Aşağıdaki adım checkout birleşimleri de desteklene.


':::row::': ':::column::': No checkout steps ':::column-end::': null ':::column span="3"::': The default behavior is as if checkout: 'self were the first step, and the current repository is checked out.' ':::row-end::': null

Tek bir checkout: none adım

Hiçbir depo eşitlenir veya kullanıma alınmış olmaz.


':::row::': ':::column::': A single checkout: self step ':::column-end::': null ':::column span="3"::': The current repository is checked out. ':::row-end::': null

veya checkout olmayan tek bir self adım none

Belirlenen depo yerine kullanıma self alınmış.


':::row::': ':::column::': Multiple checkout steps ':::column-end::': null ':::column span="3"::': 'Each designated repository is checked out to a folder named after the repository, unless a different path is specified in the checkout step. To check out self as one of the repositories, use checkout': self as one of the checkout steps. ':::row-end::': null

Not

İşlem hattını içeren Azure Repos Git depolarını ziyaret edin, işlem hattı ilk kez çalıştırılamadan önce bu kaynağa erişim yetkisi vermeniz isteniyor olabilir. Daha fazla bilgi için SSS bölümündeki Farklı bir depoyu ilk kez denetlemeye çalışmam için neden kaynakları yetkilendirmem isten ediyor? bölümüne bakın.

Depo kaynağı tanımı

Depo türünüz bir hizmet bağlantısı veya diğer genişletilmiş kaynaklar alanı gerektiriyorsa bir depo kaynağı kullansanız gerekir. Aşağıdaki depo türleri bir hizmet bağlantısı gerektirir.

Depo türü Hizmet bağlantısı
Bitbucket Cloud Bitbucket Cloud
GitHub GitHub
GitHub Enterprise Server GitHub Enterprise Server
Azure Repos İşlem hattından farklı bir kuruluşta git depoları Azure Repos/Team Foundation Server

Örneğin, farklı bir depoda şablonlar için zaten tanımlanmış bir depo kaynağınız varsa, depo türünüz bir hizmet bağlantısı gerektirmese bile bir depo kaynağı kullanabilirsiniz.

Aşağıdaki örnekte, üç depo depo kaynağı olarak bildirildi. Başka Azure Repos gitdeposu , GitHubve Bitbucket Cloud depo kaynakları, bu depo kaynakları için olarak belirtilen hizmet endpoint bağlantıları gerektirir. Bu örnekte, yaML işlem hattını içeren geçerli depoyla birlikte depo kaynakları olarak bildirilen üç depoyu kontrol eden checkout self dört adım vardır.

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)

Depo self olarak CurrentRepo adlandırılmışsa, script komut şu çıkışı üretir: CurrentRepo MyAzureReposGitRepo MyBitbucketRepo MyGitHubRepo . Bu örnekte, depoların adları, iade adımlarında hiçbir belirtilmediklerinden path klasörler için kullanılır. Depo klasör adları ve konumları hakkında daha fazla bilgi için aşağıdaki Checkout path bölümüne bakın.

Satır içi söz dizimi alma

Depo için bir hizmet bağlantısı gerekli yoksa adımınız ile satır içi olarak checkout bildirebilirsiniz.

Not

Yalnızca Azure Repos git depoları satır içi söz dizimi kullanabilir. Azure Repos Farklı bir kuruluşta git depoları ve desteklenen diğer depo türleri bir hizmet bağlantısı gerektirir ve bir depo kaynağı olarak bildir gerekir.

steps:
- checkout: git://MyProject/MyRepo # Azure Repos Git repository in the same organization

Not

Önceki örnekte depo self kullanıma alınmış değildir. Herhangi bir adım checkout belirtirsanız, kullanıma checkout: self alınmış olması için dahil self edilmelidir.

Ödeme yolu

Adımda path belirtilmezse, checkout kaynak kodu varsayılan dizine yerleştirilir. Bu dizin, tek bir depoyu veya birden çok depoyu denetlemenize bağlı olarak farklıdır.

  • Tek depo: İşte tek bir adımınız varsa veya ile eşdeğer bir kullanıma alma adımınız yoksa kaynak kodunuz, alt klasörü olarak bulunan adlı dizine iade checkout checkout: self s (Agent.BuildDirectory) edilir. ise (Agent.BuildDirectory) C:\agent\_work\1 kodunuz için kullanıma alınmış C:\agent\_work\1\s olur.

  • Birden çok depo: İşte birden çok adımınız varsa, kaynak kodunuz içinde alt klasörü olarak depolardan sonra adlı checkout dizinlere s (Agent.BuildDirectory) denetlenir. ise (Agent.BuildDirectory) C:\agent\_work\1 ve depolarının adı ve tools code ise, kodunuz ve için kullanıma C:\agent\_work\1\s\tools alınmış C:\agent\_work\1\s\code olur.

    Not

    Adımda bir belirtilmezse, adımda depoya başvuru yapmak için kullanılan değer değil, klasör path checkout için repository deponun adı checkout kullanılır.

Bir path adım için checkout belirtilirse, bu yol ile göreli olarak (Agent.BuildDirectory) kullanılır.

Not

Varsayılan yolları kullanıyorsanız, ikinci bir depo adımı eklemek, ilk checkout depo için kodun varsayılan yolunu değiştirir. Örneğin, adlı bir deponun kodu tek deponun ne zaman olduğu için denetlenir, ancak ikinci bir depo eklenirse, için kullanıma tools C:\agent\_work\1\s alınmış tools tools C:\agent\_work\1\s\tools olur. Kaynak kodun özgün konumda olmasıyla ilgili adımlar varsa bu adımların güncelleştirilmiş olması gerekir.

Belirli bir başvuruya göz atma

Belirli bir başvuru tasarlamadıkça varsayılan dal kullanıma alınmış olur.

Satır içi söz dizimi kullanıyorsanız, ekini kullanarak başvuruya @<ref> bakın. Örnek:

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

Depo kaynağı kullanırken özelliğini kullanarak başvuruyu ref belirtin. Aşağıdaki örnek, belirlenen features/tools/ deponun dallarını denetler.

resources:
  repositories:
  - repository: MyGitHubRepo
    type: github
    endpoint: MyGitHubServiceConnection
    name: MyGitHubOrgOrUser/MyGitHubRepo
    ref: features/tools

steps:
- checkout: MyGitHubRepo

Tetikleyiciler

Bir güncelleştirme depoya veya kaynak olarak bildirilen depolardan herhangi biri için bir self işlem hattı tetiklersiniz. Bu, aşağıdaki senaryolarda olduğu gibi yararlıdır:

  • Farklı bir depodan bir araç veya kitaplık tüketirsiniz. Araç veya kitaplık her güncelleştirildiğinde uygulamanıza yönelik testler çalıştırmak istediğiniz.
  • YAML dosyanızı uygulama kodundan ayrı bir depoda tutabilirsiniz. Uygulama deposuna her güncelleştirme her işlendiğinde işlem hattını tetiklemek istemeniz gerekir.

Önemli

Depo kaynağı tetikleyicileri şu anda Azure Repos git depoları için çalışır. Bu kaynaklar, GitHub veya Bitbucket deposu kaynakları için çalışmaz.

Depo kaynağında bir bölüm belirtmezseniz, işlem hattı bu depoda yapılan trigger değişikliklerle tetiklanmaz. Bir bölüm belirtirsiniz, tetikleme davranışı CI tetikleyicileri kendi kendine depo trigger için nasıl çalışır benzer.

Birden çok depo trigger kaynağı için bir bölüm belirtirsiniz, herhangi bir kaynakta yapılan bir değişiklik yeni bir çalıştırmayı başlatacak.

Depo tetikleyicisi YAML dosyasının kökünde yer alan bir bölümde veya için self trigger bir depo kaynağında self tanımlanabilir. Örneğin, aşağıdaki ikisi eşdeğerdir.

trigger:
- main

steps:
...
resources:
  repositories:
  - repository: self
    type: git
    name: MyProject/MyGitRepo
    trigger:
    - main

steps:
...

Not

Depo tetikleyicisi iki kez tanımladığınız self için bir hatadır. Hem YAML dosyasının kökünde hem de bölümünde resources tanımlamayın.

İşlem hattı tetiklendiğinde, Azure Pipelines olması gereken YAML dosyasının sürümünü ve kullanıma alınmış olması gereken her depo için bir sürümü belirlemesi gerekir. Depoda yapılan bir değişiklik bir işlem hattını tetiklerse, YAML dosyasının sürümünü belirlemek için işlem hattını tetikleyen işleme self kullanılır. Başka bir depo kaynağında yapılan bir değişiklik işlem hattını tetiklerse, deponun varsayılan daldan YAML'nin self en son sürümü kullanılır.

Depolardan birinin güncelleştirmesi bir işlem hattını tetikleyene zaman, aşağıdaki değişkenler depoyu tetiklemeye göre ayarlanır:

  • Build.Repository.ID
  • Build.Repository.Name
  • Build.Repository.Provider
  • Build.Repository.Uri
  • Build.SourceBranch
  • Build.SourceBranchName
  • Build.SourceVersion
  • Build.SourceVersionMessage

Tetiklenen depo için işlem hattını tetikleyen işleme, kullanıma alınmış kodun sürümünü belirler. Diğer depolar için, bu depo kaynağı için YAML'de tanımlanan, kullanıma ref alınan varsayılan sürümü belirler.

Deponun YAML dosyasını ve depolarını içerdiği ve self ek kaynak kodu içerdiği aşağıdaki örneği göz önünde A B bulundurabilirsiniz.

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

Aşağıdaki tabloda, sırasında davranışı açıkça geçersiz kılmadıkça, yukarıdaki YAML dosyası kullanılarak bir işlem hattı tarafından her depo için hangi sürümlerin kullanıma alınmış olduğu checkout gösterir.

şu şekilde değişiklik yapıldı: İşlem hattı tetiklenir YAML sürümü sürümü self sürümü A sürümü B
self içinde main Yes işlem hattını main tetikleyen işleme işlem hattını main tetikleyen işleme en son sürüm: main en son sürüm: release
self içinde feature Yes işlem hattını feature tetikleyen işleme işlem hattını feature tetikleyen işleme en son sürüm: main en son sürüm: release
A içinde main Yes en son sürüm: main en son sürüm: main işlem hattını main tetikleyen işleme en son sürüm: release
B içinde main Yes en son sürüm: main en son sürüm: main en son sürüm: main işlem hattını main tetikleyen işleme
B içinde release Yes en son sürüm: main en son sürüm: main en son sürüm: main işlem hattını release tetikleyen işleme

Ayrıca, depolardan herhangi birsinde çekme isteği güncelleştirmeyi veya güncelleştirmeyi de tetiklersiniz. Bunu yapmak için, yukarıdaki örneklerde olduğu gibi YAML dosyalarında depo kaynaklarını bildirin ve depoda bir dal ilkesi Azure Repos yapılandırmanız gerekir.

Depo ayrıntıları

Birden çok depoyu kontrol edin, depoyla ilgili bazı self ayrıntılar değişken olarak kullanılabilir. Çok depolu tetikleyicileri kullanırken, bu değişkenlerden bazıları bunun yerine tetikleyici deposu hakkında bilgi içerir. İş tarafından tüketilen tüm depolarla ilgili ayrıntılar adlı bir şablon bağlam nesnesi olarak resources.repositories kullanılabilir.

Örneğin, depo olmayan bir deponun başvurusunu self almak için aşağıdakine benzer bir işlem hattı yazabilir:

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"

SSS

Neden başka bir projeden depoyu kontrol ediyorum? Eskiden oluyordu.

Azure Pipelines, etkinleştirildiğinde işlem hattının işlem hattını içeren projenin dışındaki kaynaklara erişmesi için izin vermeyen geçerli proje ayarıyla iş yetkilendirme kapsamını sınırla ayarını sağlar. Bu ayar kuruluş veya proje düzeyinde ayar olabilir. Bu ayar etkinse, açıkça erişim izni verilmediği sürece başka bir projede depoyu kontrol etmek mümkün olmayacaktır. Daha fazla bilgi için bkz. İş yetkilendirme kapsamı.

Farklı bir depoyu ilk kez denetlemeye çalışmam için neden kaynakları yetkilendirmem isten ediyor?

İşlem hattını içeren Azure Repos Git depolarına göz atarak işlem hattı ilk kez çalıştırılamadan önce bu kaynağa erişim yetkisi vermeniz istenebilirsiniz. Bu istemler işlem hattı çalıştırma özeti sayfasında görüntülenir.

Bu işlem hattının bir kaynağa erişmek için izni olması gerekir

Kaynağı yetkilendirme

Kaynakları görüntüle veya Yetkilendir'i seçin ve kaynakları yetkilendirmek için istemleri izleyin.

Gözden geçirme bekliyor

Erişime izin ver

Daha fazla bilgi için bkz. YAML işlem hattı için yetkilendirme sorunlarını giderme.