İş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 Repos Git (git
)
- 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 self
kullanı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ı CurrentRepo
script
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/MyRepo
kullanı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ğercheckout: self
bir 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çinC:\agent\_work\1\s
kullanı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. iseC:\agent\_work\1
ve depolarınız vecode
olarak adlandırılırsatools
(Agent.BuildDirectory)
kodunuz veC:\agent\_work\1\s\code
içinC:\agent\_work\1\s\tools
kullanıma alınır.Not
Adımında belirtilmezse
path
, adımdaki depoya başvurmak için kullanılan değer değilrepository
, klasör için deponuncheckout
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\tools
alı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 MyTag
baş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ı A
B
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.repositories
bir ş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.
- Farklı bir depoyu ilk kez kullanıma almaya çalıştığımda neden kaynakları yetkilendirmem istendi?
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.
Kaynakları görüntüle veya Yetkile'yi seçin ve kaynakları yetkilendirmek için istemleri izleyin.
Daha fazla bilgi için, Bir YAML ardışık düzeninde yetkilendirme sorunlarını giderme bölümüne bakın.