İşlem hattınızda birden çok depoya göz atın

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

İşlem hatları genellikle kodunuzu oluşturmak için ihtiyacınız olan kaynak, araç, betik veya diğer öğeleri içeren birden çok depoya gerek duyar. İşlem hattınızda birden çok checkout adım kullanarak, YAML işlem hattınızı depolamak için kullandığınız depoya ek olarak diğer depoları getirebilir ve kullanıma alabilirsiniz.

Birden çok depo belirtme

Depolar bir depo kaynağı olarak veya adımla checkout satır içi olarak belirtilebilir.

Aşağıdaki depo türleri desteklenir.


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

GitHub (github)

  • Azure DevOps Services

GitHubEnterprise (githubenterprise)

  • Azure DevOps Services

Bitbucket Bulutu (bitbucket)

  • Azure DevOps Services

Önemli

Azure DevOps Server'da çoklu depo kullanıma alma için yalnızca işlem hattıyla aynı kuruluştaki Azure Repos Git (git) depoları desteklenir.

Not

Azure Pipelines, Azure Repos Git depoları için Sınır iş kapsamı ayarları sağlar. Başka bir projede barındırılan Azure Repos Git depolarını kullanıma almak için İş kapsamını sınırla'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 bileşimleri checkout desteklenir.


Adım yok checkout

Varsayılan davranış, ilk adımmış checkout: self gibi olur ve geçerli depo kullanıma alınmış durumdadır.


Tek checkout: none bir adım

Hiçbir depo eşitlenmez veya kullanıma alınmaz.


Tek checkout: self bir adım

Geçerli depo kullanıma alındı.


veya olmayan self tek checkout bir adımnone

Belirlenen depo yerine selfkullanıma alındı.


Birden çok checkout adım

Belirtilen her depo, adımda farklı path bir değer belirtilmediği sürece, deponun adını taşıyan bir klasöre checkout iade edilir. Depolardan biri olarak kullanıma almak self için adımlardan checkout birini kullanıncheckout: self.


Not

İşlem hattını içeren depo dışındaki Azure Repos Git depolarına göz attığınızda, işlem hattı ilk kez çalıştırılmadan önce o kaynağa erişim yetkisi vermeniz istenebilir. Daha fazla bilgi için SSS bölümündeki Farklı bir depoyu ilk kez kullanıma almaya çalıştığımda neden kaynakları yetkilendirmem istendi? bölümüne bakın.

Depo kaynak tanımı

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

Depo türü Hizmet bağlantısı
Bitbucket Bulutu Bitbucket Bulutu
GitHub GitHub
GitHub Enterprise Server GitHub Enterprise Server
Azure Repos Git depoları işlem hattınızdan farklı bir kuruluşta Azure Repos/Team Foundation Server

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

Aşağıdaki örnekte, üç depo depo kaynağı olarak bildirilir. Başka bir kuruluştaki Azure Repos Git deposu, GitHub ve Bitbucket Cloud depo kaynakları, bu depo kaynakları için belirtilen endpoint hizmet bağlantıları gerektirir. Bu örnekte, depo kaynağı olarak bildirilen üç depoyu ve işlem hattı YAML'sini içeren geçerli self depoyu denetleyen dört checkout 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)

Deponun self adı CurrentReposcript ise, komut aşağıdaki çıkışı üretir: CurrentRepo MyAzureReposGitRepo MyBitbucketRepo MyGitHubRepo. Bu örnekte, kullanıma alma adımında belirtilmemiş path olduğundan, klasörler için depoların adları (depo kaynağında özelliği tarafından name belirtildiği gibi) kullanılır. Depo klasör adları ve konumları hakkında daha fazla bilgi için aşağıdaki Kullanıma alma yolu bölümüne bakın.

Satır içi söz dizimi kullanıma alma

Deponuz bir hizmet bağlantısı gerektirmiyorsa, bunu adımla checkout birlikte satır içi olarak bildirebilirsiniz.

Not

Satır içi söz dizimini yalnızca aynı kuruluştaki Azure Repos Git depoları kullanabilir. Farklı bir kuruluştaki Azure Repos Git depoları ve desteklenen diğer depo türleri bir hizmet bağlantısı gerektirir ve depo kaynağı olarak bildirilmelidir.

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

Not

Önceki örnekte, self işlem hattıyla ilişkili deponun kaynağını kullanıma almak için kullanıma alma deposu belirtilmiştir.

Varsayılan Azure Repos Git deposunu (projeyle aynı ada sahip) kullanıyorsanız biçimini - checkout: git://MyRepo/MyRepokullanın.

Kullanıma alma yolu

Adımında checkout bir path belirtilmediği sürece, kaynak kodu varsayılan dizine yerleştirilir. Bu dizin, tek bir depoya mı yoksa birden çok depoya mı göz atmanıza bağlı olarak farklıdır.

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

  • Birden çok depo: İşinizde birden çok checkout adım varsa, kaynak kodunuz içinde depoların alt klasörü s olarak depoların adını taşıyan dizinlerde (Agent.BuildDirectory)kullanıma alınır. ise C:\agent\_work\1 ve depolarınız ve codeolarak adlandırılırsa tools(Agent.BuildDirectory) kodunuz ve C:\agent\_work\1\s\codeiçin C:\agent\_work\1\s\tools kullanıma alınır.

    Not

    Adımında belirtilmezsepath, adımdaki depoya başvurmak için kullanılan değer değilrepository, klasör için deponun checkout adı kullanılır.checkout

path bir checkout adım için belirtilirse, bu yol ile ilgili (Agent.BuildDirectory)olarak kullanılır.

Not

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

Belirli bir başvuru kullanıma alınır

Belirli bir başvuru belirlemediğiniz sürece varsayılan dal kullanıma alınmış durumdadır.

Satır içi söz dizimi kullanıyorsanız, sonuna ekleyerek @<ref>başvuruyu belirleyin. Örneğin:

- 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 deponun features/tools/ dalını kullanıma alır.

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

steps:
- checkout: MyGitHubRepo

Aşağıdaki örnek, tarafından MyTagbaşvuruda bulunan işlemeyi kullanıma almak için etiketleri kullanır.

resources:
  repositories:
  - repository: MyGitHubRepo
    type: github
    endpoint: MyGitHubServiceConnection
    name: MyGitHubOrgOrUser/MyGitHubRepo
    ref: refs/tags/MyTag

steps:
- checkout: MyGitHubRepo

Tetikleyiciler

Bir güncelleştirme depoya self veya kaynak olarak bildirilen depolardan herhangi birine gönderildiğinde işlem hattını tetikleyebilirsiniz. Bu, örneğin aşağıdaki senaryolarda kullanışlıdır:

  • Farklı bir depodan bir araç veya kitaplık kullanıyorsunuz. Araç veya kitaplık her güncelleştirildiğinde uygulamanız için testler çalıştırmak istiyorsunuz.
  • YAML dosyanızı uygulama kodundan ayrı bir depoda tutarsınız. Uygulama deposuna her güncelleştirme gönderildiğinde işlem hattını tetiklemeniz gerekir.

Önemli

Depo kaynak tetikleyicileri yalnızca aynı kuruluştaki Azure Repos Git depoları için ve depo türü Azure Repos Git olduğunda self çalışır. GitHub veya Bitbucket depo kaynakları için çalışmaz.

batch depo kaynak tetikleyicilerinde desteklenmez.

Depo kaynağında bölüm trigger belirtmezseniz, işlem hattı bu depodaki değişiklikler tarafından tetiklenmez. Bir trigger bölüm belirtirseniz, tetikleme davranışı CI tetikleyicilerinin kendi deposu için çalışma şekline benzer.

Birden çok depo kaynağı için bir trigger bölüm belirtirseniz, bunlardan herhangi birinde yapılan bir değişiklik yeni bir çalıştırma başlatır.

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

Depolardan birine yapılan bir güncelleştirme işlem hattını tetiklediğinde, aşağıdaki değişkenler deponun tetiklenmesine göre ayarlanır:

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

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

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

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

Aşağıdaki tabloda, yukarıdaki YAML dosyası kullanılarak bir işlem hattı tarafından her depo için hangi sürümlerin kullanıma alındığı gösterilmektedir.

Yapılan değişiklik İşlem hattı tetiklenmiş YAML sürümü Sürümü self Sürümü A Sürümü B
self içinde main Yes main işlem hattını tetikleyen işleme main işlem hattını tetikleyen işleme en son main en son release
self içinde feature Yes feature işlem hattını tetikleyen işleme feature işlem hattını tetikleyen işleme en son main en son release
A içinde main Yes en son main en son main main işlem hattını tetikleyen işleme en son release
B içinde main Yes en son main en son main en son main main işlem hattını tetikleyen işleme
B içinde release Yes en son main en son main en son main release işlem hattını tetikleyen işleme

Ayrıca herhangi bir depoda çekme isteği oluşturduğunuzda veya güncelleştirdiğinizde işlem hattını tetikleyebilirsiniz. Bunu yapmak için, yukarıdaki örneklerde gösterildiği gibi YAML dosyalarındaki depo kaynaklarını bildirin ve depoda bir dal ilkesi yapılandırın (yalnızca Azure Depoları).

Depo ayrıntıları

Birden çok depoyu kullanıma aldığınızda, depoyla self ilgili bazı ayrıntılar değişken olarak kullanılabilir. Çoklu depo tetikleyicilerini kullandığınızda, bu değişkenlerden bazıları tetikleyici deposu hakkında bilgi içerir. İş tarafından kullanılan tüm depolarla ilgili ayrıntılar adlı resources.repositoriesbir şablon bağlam nesnesi olarak kullanılabilir.

Örneğin, depo olmayanself bir deponun başvurusunu almak için aşağıdaki gibi bir işlem hattı yazabilirsiniz:

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 bir depoya göz atamıyorum? Eskiden oluyordu.

Azure Pipelines, etkinleştirildiğinde işlem hattının işlem hattını içeren proje dışındaki kaynaklara erişmesine izin vermeyen geçerli proje ayarına İş yetkilendirme kapsamını sınırla özelliği sunar. Bu ayar kurum veya proje düzeyinde ayarlanabilir. Bu ayar etkinleştirilirse, açıkça erişim vermediğiniz sürece başka bir projedeki depoya göz atamazsınız. Daha fazla bilgi için bkz. İş yetkilendirme kapsamı.

Farklı bir depoyu ilk kez kullanıma almaya çalıştığımda neden kaynakları yetkilendirmem istendi?

İşlem hattını içeren depo dışındaki Azure Repos Git depolarına göz attığınızda, işlem hattı ilk kez çalıştırılmadan önce o kaynağa erişim yetkisi vermeniz istenebilir. Bu istemler işlem hattı çalıştırması özeti sayfasında görüntülenir.

This pipeline needs permission to access a resource

Authorize resource

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

Waiting for review

Permit access

Daha fazla bilgi için, Bir YAML ardışık düzeninde yetkilendirme sorunlarını giderme bölümüne bakın.