Git Azure Repos TFS Git depoları oluşturma
Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 - TFS 2015
Not
Microsoft Team Foundation Server (TFS) 2018 ve önceki sürümlerde derleme ve yayın işlem hatları tanımlar, çalıştırmalar derlemeler, hizmet bağlantıları hizmet uç noktaları,aşamalar ortamlar ve işler olarak da aşamalar olarak çağrılır.
Azure Pipelines her çekme isteğini otomatik olarak derleme ve doğrulama ve git depo Azure Repos işleme.
Derlemek için depo seçme
Önce bir depoyu ve ardından bu depoda bir YAML dosyasını seçerek yeni bir işlem hattı oluşturabilirsiniz. YAML dosyasının mevcut olduğu depoya depo self denir. Varsayılan olarak bu, işlem hattınızı derlemek için depoyu kullanır.
Daha sonra işlem hattınızı farklı bir depoyu veya birden çok depoyu kontrol etmek üzere yapılandırabilirsiniz. Bunun nasıl olduğunu öğrenmek için bkz. çoklu repo alma.
YAML işlem hatları TFS'de kullanılamaz.
Azure Pipelines tetiklemek ve derlemeler sırasında kendi kodunu getirmek için depolarnıza erişim izni verilmesi gerekir. Normalde, bir işlem hattının aynı projede yer alan depolara erişimi olur. Ancak, farklı bir projede depolara erişmek isterseniz, iş erişim belirteçlerine verilen izinleri güncelleştirmeniz gerekir.
CI tetikleyicileri
Sürekli tümleştirme (CI) tetikleyicileri, belirtilen dallara her güncelleştirme güncelleştirmesi veya belirtilen etiketleri her iletirken işlem hattının çalışmasına neden olur.
YAML işlem hatları varsayılan olarak tüm dallarda CI tetikleyicisi ile yapılandırılır.
Dallar
Basit bir söz dizimi ile hangi dalların CI tetikleyicileri alalı olduğunu kontrol etmek için:
trigger:
- master
- releases/*
Dalın tam adını (örneğin, ) veya joker master karakter (örneğin, ) releases/* belirterek.
Joker karakter söz dizimi hakkında bilgi için bkz. Joker karakterler.
Not
Değişkenler çalışma zamanında değerlendirildik (tetikleyici tetiklendikten sonra) tetikleyicilerde değişkenleri kullanılamaz.
Not
YAML dosyaları oluşturmak için şablonlar kullanıyorsanız, yalnızca işlem hattı için ana YAML dosyasında tetikleyiciler belirtebilirsiniz. Şablon dosyalarında tetikleyicileri belirtemezseniz.
veya kullanan daha karmaşık exclude tetikleyiciler batch için, aşağıdaki örnekte gösterildiği gibi tam söz dizimi kullan gerekir.
# specific branch build
trigger:
branches:
include:
- master
- releases/*
exclude:
- releases/old*
Yukarıdaki örnekte, ana dala veya herhangi bir yayın dalına bir değişiklik olursa işlem hattı tetiklenir. Ancak, ile başlayan bir yayın dalda değişiklik yapılırsa old tetiklenir.
Yan tümcesi olmadan bir yan tümce excludeinclude belirtirsiniz, yan tümcesinde * belirtmeye include eşdeğerdir.
Listelerde dal adları belirtmeye ek olarak, aşağıdaki biçimi kullanarak etiketleri branches temel alan tetikleyiciler de yapılandırabilirsiniz:
trigger:
branches:
include:
- refs/tags/{tagname}
exclude:
- refs/tags/{othertagname}
Herhangi bir tetikleyici belirtmezseniz, varsayılan değer şunu yazmış gibi olur:
trigger:
branches:
include:
- '*' # must quote since "*" is a YAML reserved character; we want a string
Önemli
Bir tetikleyici belirttiğinizde, varsayılan örtülü tetikleyicinin yerini akar ve yalnızca açıkça dahil edilecek şekilde yapılandırılmış dallara yapılan itmeler bir işlem hattını tetikler. Eklemeler önce işlenir ve ardından dışlamalar bu listeden kaldırılır.
CI çalıştırmalarını toplu işleme
Değişiklikleri sık sık karşıya yüken çok sayıda ekip üyesi varsa, başlatan çalıştırma sayısını azaltmak istiyor olabilir.
olarak ayarlanırsa, işlem hattı çalışmaya başladığında sistem çalıştırma tamamlanana kadar bekler ve daha sonra henüz tüm değişikliklerle birlikte başka bir batchtrue çalıştırma başlatır.
# specific branch build with batching
trigger:
batch: true
branches:
include:
- master
Bu örneği netleştirmek için, yukarıdaki işlem hattının A çalışmasına ana işlem hattına yapılan bir itme sonucu olduğunu diyelim. İşlem hattı çalışırken depoya ek BC itmeler ve gerçekleşir. Bu güncelleştirmeler yeni bağımsız çalıştırmaları hemen başlatmaz. Ancak ilk çalıştırma tamamlandıktan sonra, o zaman noktasına kadar tüm itmeler toplu olarak gruplanır ve yeni bir çalıştırma başlatlanır.
Not
İşlem hattının birden çok işi ve aşaması varsa, ikinci çalıştırma başlamadan önce ilk çalıştırmanın tüm işlerini ve aşamalarını tamamlayarak veya atlayarak yine de bir terminal durumuna ulaşabilirsiniz. Bu nedenle, bu özelliği birden çok aşama veya onay içeren bir işlem hattında kullanırken dikkatli olmalısınız. Bu gibi durumlarda derlemelerinizi toplu olarak derlemek isterseniz, CI/CD işleminizi biri derleme (toplu işleme ile) ve biri de dağıtımlar için olmak için iki işlem hattına bölmeniz önerilir.
Yollar
Dahil etmek veya dışlamak için dosya yolları belirtebilirsiniz.
# specific path build
trigger:
branches:
include:
- master
- releases/*
paths:
include:
- docs
exclude:
- docs/README.md
Yolları belirtirken, tetiklenen dalları açıkça belirtmeniz gerekir. Yalnızca yol filtresi olan bir işlem hattını tetikleyesiniz; Ayrıca bir dal filtreniz de olması ve yol filtresiyle eşleşen değiştirilen dosyaların dalı filtresiyle eşleşen bir daldan olması gerekir.
İpuçları:
- Yollar her zaman deponun köküne göre belirtilir.
- Yol filtreleri ayarlanmayacaksa, repo kök klasörü varsayılan olarak örtülü olarak dahil edilir.
- Bir yolu dışlarsanız, daha derin bir klasöre uygun olmadıkça bu yolu ekamazsınız. Örneğin , /tools'ı dışlarsanız/tools/trigger-runs-on-these
- Yol filtrelerinin sırası önemli değildir.
- Git'te yollar büyük/büyük/büyük harfe duyarlıdır. Gerçek klasörlerle aynı durumu kullanmaya emin olun.
- Değişkenler çalışma zamanında değerlendirile (tetikleyici tetiklendikten sonra) için yollarda değişkenleri kullanılamaz.
Etiketler
Bir önceki bölümde ele alınmak üzere listelerde etiket belirtmeye ek olarak, doğrudan dahil etmek veya branches dışlamak üzere etiketleri de belirtebilirsiniz:
# specific tag
trigger:
tags:
include:
- v2.*
exclude:
- v2.0
Herhangi bir etiket tetikleyicisi belirtmezseniz, etiketler varsayılan olarak işlem hatlarını tetiklemez.
Önemli
Etiketleri dal filtreleriyle birlikte belirtirseniz, dal filtresi karşılandı veya etiket filtresi karşılandı ise tetikleyici tetiklenir. Örneğin, bir e-posta etiketi dal filtresini karşılarsa, etiket etiket filtresi tarafından hariç tutulsa bile işlem hattı tetiklenir çünkü itme dal filtresini karşılar.
CI'den vazgeçme
CI tetikleyicisini devre dışı bırakma
ci tetikleyicilerini tamamen belirterek devre dışı trigger: none abilirsiniz.
# A pipeline with no CI trigger
trigger: none
Önemli
Bir dala bir değişiklik İtişletirken, bir CI çalıştırması başlatılanın gerekip gerek olmadığını belirlemek için bu dalda YAML dosyası değerlendirilir.
Daha fazla bilgi için bkz.YAML şemasında tetikleyiciler.
YAML işlem hatları TFS'de kullanılamaz.
Bireysel işlemeler için CI atlanıyor
ayrıca, bir işlemenin normalde tetikleyeceği bir işlem hattını çalıştırmayı atlayıp Azure Pipelines söyleyebilirsiniz. yalnızca ***NO_CI*** baş yürütmeye ait işlem iletisine dahil edin ve Azure Pipelines cı çalıştırmayı atlar.
ayrıca, bir işlemenin normalde tetikleyeceği bir işlem hattını çalıştırmayı atlayıp Azure Pipelines söyleyebilirsiniz. yalnızca işlem [skip ci] iletisi veya baş yürütmenin açıklamasına dahil edin ve Azure Pipelines cı çalıştırmayı atlar. Aşağıdaki çeşitlerden herhangi birini de kullanabilirsiniz.
[skip ci]veya[ci skip]skip-checks: trueveyaskip-checks:true[skip azurepipelines]veya[azurepipelines skip][skip azpipelines]veya[azpipelines skip][skip azp]veya[azp skip]***NO_CI***
Koşullarda Tetikleyici türünü kullanma
Bu, çalıştırmayı Başlatan tetikleyicinin türüne bağlı olarak, işlem hattınızda farklı adımlar, işler veya aşamalar çalıştırmak için yaygın bir senaryodur. Bunu sistem değişkenini kullanarak yapabilirsiniz Build.Reason . Örneğin, çekme isteği doğrulamalarından dışlamak için adım, iş veya aşamalara aşağıdaki koşulu ekleyin.
condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))
Yeni dallar oluşturulduğunda tetikleyicilerin davranışı
Aynı depo için birden çok işlem hattı yapılandırmak yaygındır. Örneğin, uygulamanızın belgelerini oluşturmak için bir işlem hattına ve kaynak kodu oluşturmak için başka bir işlem hattına sahip olabilirsiniz. Bu işlem hatlarında uygun dal filtreleri ve yol filtreleri ile CI Tetikleyicileri yapılandırabilirsiniz. Örneğin, klasöre bir güncelleştirme gönderdiğinizde bir işlem hattının tetiklenmesi docs ve uygulama kodunuza bir güncelleştirme gönderdiğinizde başka bir işlem hattının tetiklenmesi isteyebilirsiniz. Bu durumlarda, yeni bir dal oluşturulduğunda işlem hatlarının nasıl tetikleneceğini anlamanız gerekir.
Deponuzda yeni bir dalı (dal filtreleriyle eşleşen) gönderdiğinizde bu davranış aşağıda verilmiştir:
- İşlem hattınızda yol filtreleri varsa, yalnızca yeni dal bu yol filtresiyle eşleşen dosyalarda değişiklik içeriyorsa tetiklenir.
- İşlem hattınızda yol filtreleri yoksa, yeni dalda hiçbir değişiklik olmasa bile bu işlem tetiklenir.
Joker karakterler
Bir dal veya etiket belirtirken, tam bir ad veya joker karakter kullanabilirsiniz.
Joker karakter desenleri * sıfır veya daha fazla karakterle eşleşmek ve ? tek bir karakterle eşleştirmek için izin verir.
- Eğer modelinizi bir YAML işlem hattında başlatırsanız,
*düzeni gibi tırnak içine sarmalısınız"*-releases". - Dallar, Etiketler ve yollar için, bir joker karakter, düzenin herhangi bir yerinde görünebilir.
trigger:
branches:
include:
- master
- releases/*
- feature/*
exclude:
- releases/old*
- feature/*-working
paths:
include:
- docs/*.md
PR Tetikleyicileri
Çekme isteği (PR) Tetikleyicileri, her bir çekme isteği belirtilen hedef dallarından biriyle açıldığında veya bu tür bir çekme isteğine yapılan değişiklikler gönderildiğinde bir işlem hattının çalışmasına neden olur. Git Azure Repos, bu işlev dal ilkeleri kullanılarak uygulanır. Azure Git Repos çekme isteği doğrulamasını etkinleştirmek için, istenen dala ait dal ilkelerine gidin ve bu dal için derleme doğrulama ilkesini yapılandırın. Daha fazla bilgi için bkz. dal Ilkelerini yapılandırma.
Not
Azure Repos Git deposu için doğrulama yapılarını yapılandırmak için, projesinin proje yöneticisi olmanız gerekir.
Not
Bir dal ilkesi yapılandırsanız bile taslak çekme istekleri bir işlem hattı tetiklemez.
Çatallardan katkıların doğrulanması
Azure Repos çatallardan çekme isteklerinin oluşturulması, aynı depoda veya projede çekme isteklerinin oluşturulmızdan farklı değildir. Çatalları yalnızca projenizin parçası olduğu kuruluş içinde oluşturabilirsiniz.
İş yetkilendirmesi kapsamını sınırla
Azure Pipelines, ardışık düzenlerinizin çalıştığı iş yetkilendirme kapsamını yapılandırmak için çeşitli güvenlik ayarları sağlar.
- İş yetkilendirme kapsamını geçerli projeyle sınırla
- iş yetkilendirmesi kapsamını başvurulan Azure DevOps depolarıyla sınırla
İş yetkilendirme kapsamını geçerli projeyle sınırla
Azure Pipelines geçerli proje ayarlarına iki Limit işi yetkilendirme kapsamı sağlar:
- Yayın olmayan işlem hatları için iş yetkilendirmesi kapsamını geçerli proje Ile sınırla -Bu ayar, YAML işlem hatları ve klasik derleme işlem hatları için geçerlidir. Bu ayar klasik yayın işlem hatları için geçerlidir.
- Yayın işlem hatları için iş yetkilendirmesi kapsamını geçerli proje Ile sınırla -Bu ayar yalnızca Klasik yayın işlem hatları için geçerlidir.
işlem hattı türü için ilgili ayar etkinleştirilmediği takdirde, koleksiyon kapsamlı erişim belirteçleri ile çalıştırın Pipelines. İş yetkilendirme kapsamı ayarlarını sınırla ayarı, geçerli projeye yönelik tüm işlem hatları için erişim kapsamını azaltmanıza olanak sağlar. bu, kuruluşunuzdaki farklı bir projede Azure Repos Git deposuna erişiyorsanız işlem hattınızı etkileyebilir.
Azure Repos Git deponuz, işlem hattınıza göre farklı bir projede ise ve işlem hattı türü için iş yetkilendirme kapsamı ayarını sınırla ayarı etkinse, işlem hattınızda ikinci projeye yönelik derleme hizmeti kimliğine izin vermeniz gerekir. Daha fazla bilgi için bkz. Yapı Hizmeti hesabını yönetme izinleri.
Azure Pipelines, işlem hatlarınızın birlikte çalıştığı iş yetkilendirme kapsamını yapılandırmak için bir güvenlik ayarı sağlar.
- İş yetkilendirmesi kapsamını geçerli projeyle sınırla -Bu ayar YAML işlem hatları ve klasik derleme işlem hatları için geçerlidir. Bu ayar Klasik yayın işlem hatlarıiçin geçerlidir.
geçerli proje için iş yetkilendirme kapsamını sınırla özelliği etkinleştirilmediği takdirde, koleksiyon kapsamlı erişim belirteçleri ile çalıştırın Pipelines. Bu ayar, geçerli projeye tüm işlem hatları için erişim kapsamını azaltmanıza olanak sağlar. bu, kuruluşunuzdaki farklı bir projede Azure Repos Git deposuna erişiyorsanız işlem hattınızı etkileyebilir.
Azure Repos Git deponuz, işlem hattınıza göre farklı bir projede ise ve iş yetkilendirmesi kapsamını sınırla ayarı etkinse, ardışık düzenin derleme hizmeti kimliğine ikinci projeye izin vermeniz gerekir. Daha fazla bilgi için bkz. iş yetkilendirme kapsamı.
İş yetkilendirmesi kapsamını sınırlahakkında daha fazla bilgi için bkz. Iş erişim belirteçlerini anlama.
iş yetkilendirmesi kapsamını başvurulan Azure DevOps depolarıyla sınırla
Pipelines, izin verilen Azure DevOps depolarına yönelik sınırla iş yetkilendirme kapsamı etkin olmadığı sürece, geçerli proje için önceki sınır iş yetkilendirme kapsamı bölümünde açıklandığı gibi, yetkili projelerdeki tüm Azure DevOps depolara erişebilir. bu seçenek etkinken, tüm işlem hatları için erişim kapsamını yalnızca checkoutuses bu depoyu kullanan işlem hattı işinde bir adım veya bir bildirime göre açıkça başvuruda bulunulan depoların Azure DevOps azaltabilirsiniz.
bu ayarı yapılandırmak için Pipelines, kuruluş ayarları veya Project ayarlarıAyarlar gidin. Kuruluş düzeyinde etkinleştirilirse, ayar gri renkte görünür ve proje ayarları düzeyinde kullanılamaz.
Önemli
iş yetkilendirme kapsamını başvurulan Azure DevOps sınırla , yeni kuruluşlar ve proje 2020 ' den sonra oluşturulan projeler için varsayılan olarak etkinleştirilir.
iş yetkilendirme kapsamını başvurulan Azure DevOps depolarıyla sınırlandırdığınızda , yaml işlem hatlarınız, depoyu kullanan işte bir kullanıma alma adımı olarak işlem hattında kullanmak istediğiniz tüm Azure Repos Git depolarınıza açıkça başvurmalıdır. depoya ilk olarak başvurulmuyorsa, bir Azure Repos git deposu için betik görevleri ve git komutlarını kullanarak kod getirimeyeceksiniz.
iş yetkilendirmesi kapsamını başvurulan Azure DevOps depolarla sınırlandırdığınızda , işlem hattınızda kullanmadan önce Azure Repos Git deposuna açıkça başvurulmanız gereken birkaç özel durum vardır.
- İşlem hattınızda açık bir kullanıma alma adımlarınız yoksa, bir
checkout: selfadımınız olur veselfDepo kullanıma alındı. - Ortak projedeki bir depoda salt okuma işlemleri gerçekleştirmek için bir komut dosyası kullanıyorsanız, bir adımda ortak proje deposuna başvurmanız gerekmez
checkout. - Bir PAT gibi kendi kimlik doğrulamasını sağlayan bir komut dosyası kullanıyorsanız, bu depoya bir adımla başvurmanız gerekmez
checkout.
örneğin, iş yetkilendirme kapsamını başvurulan Azure DevOps depolarla sınırla , işlem hatlarınız kuruluşunuzdaki depoda ise ve depoyu kullanıma almak için bir komut dosyası kullanmak istiyorsanız, FabrikamProject/FabrikamTools bu depoya bir checkout adımla veya bir ifadesiyle başvurulmalısınız uses .
FabrikamToolsBir kullanıma alma adımı kullanarak depoyu işlem hattınızda zaten kullanıma sunmadıysanız, daha sonra bu depoyla etkileşim kurmak için betikleri kullanabilirsiniz.
steps:
- checkout: git://FabrikamFiber/FabrikamTools # Azure Repos Git repository in the same organization
- script: # Do something with that repo
# Or you can reference it with a uses statement in the job
uses:
repositories: # List of referenced repositories
- FabrikamTools # Repository reference to FabrikamTools
steps:
- script: # Do something with that repo like clone it
Not
Birçok senaryo için, çok depolü kullanıma alma, işlem hattınızdaki ek depoları kullanıma almak üzere betikleri kullanma gereksinimini ortadan kaldırarak yararlanılabilir olabilir. Daha fazla bilgi için bkz. işlem hattınızda birden çok depo kullanıma alma.
Kullanıma alma
bir işlem hattı tetiklendiğinde, Azure Pipelines Azure Repos Git deposundan kaynak kodunuzu çeker. Bunun nasıl gerçekleştemelerinin çeşitli yönlerini kontrol edebilirsiniz.
Not
İşlem hattınızda bir kullanıma alma adımı dahil ettiğinizde şu komutu çalıştırdık: git -c fetch --force --tags --prune --prune-tags --progress --no-recurse-submodules origin .
Gereksinimlerinizi karşılamıyorsa, yerleşik kullanıma almayı hariç bırakmayı checkout: none ve sonra kendi kullanıma alma işlemini gerçekleştirmek için bir betik görevini kullanmayı seçebilirsiniz.
Git 'in tercih edilen sürümü
Windows aracısı kendi Git kopyasıyla birlikte gelir.
Dahil edilen kopyayı kullanmak yerine kendi git 'nizi sağlamayı tercih ediyorsanız, System.PreferGitFromPath olarak ayarlayın true .
bu ayar Windows olmayan aracılarda her zaman geçerlidir.
Kullanıma alma yolu
Tek bir depoyu kullanıma sundıysanız, varsayılan olarak, kaynak kodunuz adlı bir dizinde kullanıma sunulacaktır s . YAML işlem hatları için ile belirterek bunu değiştirebilirsiniz checkoutpath . Belirtilen yol göreli $(Agent.BuildDirectory) . Örneğin: kullanıma alma yolu değeri mycustompath ve ise $(Agent.BuildDirectory)C:\agent\_work\1 , kaynak kodu kullanıma alınacaktır C:\agent\_work\1\mycustompath .
Birden çok checkout adım kullanıyorsanız ve bu klasörü kullanarak açıkça belirtmezseniz, path her bir depo, depodan sonra adlı öğesinin bir alt klasörüne yerleştirilir s . Örneğin, ve adlı iki depoya göz atın toolscode , kaynak kodu ve ' de kullanıma sunulacaktır C:\agent\_work\1\s\toolsC:\agent\_work\1\s\code .
Lütfen, kullanıma alma yolu değerinin yukarıdaki herhangi bir dizin düzeyini oluşturacak şekilde ayarlanmadığını, bu $(Agent.BuildDirectory) nedenle path\..\anotherpath geçerli bir kullanıma alma yolu (yani) ile sonuçlanabileceğini unutmayın C:\agent\_work\1\anotherpath , ancak gibi bir değer ..\invalidpath (örn.) olur C:\agent\_work\invalidpath .
İşlem path hattınızdaki path adımında ayarı yapılandırabilirsiniz.
steps:
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
clean: boolean # whether to fetch clean each time
fetchDepth: number # the depth of commits to ask Git to fetch
lfs: boolean # whether to download Git-LFS files
submodules: true | recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules
path: string # path to check out source code, relative to the agent's build directory (e.g. \_work\1)
persistCredentials: boolean # set to 'true' to leave the OAuth token in the Git config after the initial fetch
Alt modülleri
submodulesAlt modüllerdendosyaları indirmek isterseniz, Işlem hattınızdaki submodules adımında ayarı yapılandırabilirsiniz.
steps:
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
clean: boolean # whether to fetch clean each time
fetchDepth: number # the depth of commits to ask Git to fetch
lfs: boolean # whether to download Git-LFS files
submodules: true | recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules
path: string # path to check out source code, relative to the agent's build directory (e.g. \_work\1)
persistCredentials: boolean # set to 'true' to leave the OAuth token in the Git config after the initial fetch
Yapı işlem hattı, git alt modüllerinizi oldukları sürece kullanıma alacak:
Kimliği doğrulanmamış: Kopyalamak veya getirmek için kimlik bilgileri olmadan ortak, kimliği doğrulanmamış bir depo.
Denetiminden
yukarıda belirtilen Azure Repos Git deposu ile aynı projede yer alır. Ana depodan kaynakları almak için aracı tarafından kullanılan kimlik bilgileri, alt modüller için kaynakları almak için de kullanılır.
Ana depoya göreli bir URL kullanılarak eklenir. Örneğin:
Bu bir tane kullanıma alınmış olacaktır:
git submodule add ../../../FabrikamFiberProject/_git/FabrikamFiber FabrikamFiberbu örnekte, alt modül aynı Azure DevOps kuruluştaki bir depoya (FabrikamFiber), ancak farklı bir projede (FabrikamFiberProject) başvurur. Ana depodan kaynakları almak için aracı tarafından kullanılan kimlik bilgileri, alt modüller için kaynakları almak için de kullanılır. Bu, iş erişim belirtecinin ikinci projedeki depoya erişimine sahip olmasını gerektirir. Yukarıdaki bölümde açıklandığı gibi iş erişim belirtecini kısıtladıysanız bunu yapamazsınız. İş erişim belirtecinin ikinci projedeki depoya, (a) ikinci projedeki proje yapı hizmeti hesabına açıkça erişim vererek veya (b) tüm kuruluşun proje kapsamlı belirteçleri yerine koleksiyon kapsamlı erişim belirteçleri kullanarak erişmesine izin verebilirsiniz. Bu seçenekler ve bunların güvenlik etkileri hakkında daha fazla bilgi için bkz. erişim depoları, yapıtlar ve diğer kaynaklar.
Bu bir tanesi kullanıma alınmamış:
git submodule add https://fabrikam-fiber@dev.azure.com/fabrikam-fiber/FabrikamFiberProject/_git/FabrikamFiber FabrikamFiber
Alt modülleri kullanıma alma seçeneğinin kullanımına alternatif
Bazı durumlarda, alt modülleri kullanıma al seçeneğini kullanamazsınız. Alt modüllere erişmek için farklı bir kimlik bilgileri kümesinin gerekli olduğu bir senaryoya sahip olabilirsiniz. bu durum, örneğin, ana depo ve alt modül depolarınız aynı Azure DevOps kuruluşta depolanmıyorsa veya iş erişim belirtecinizin farklı bir projedeki depoya erişimi yoksa oluşabilir.
Alt modülleri kullanıma alma seçeneğini kullanamıyoruz, bunun yerine alt modüller getirmek için özel bir betik adımı kullanabilirsiniz.
İlk olarak, bir kişisel erişim belirteci (PAT) alın ve bunu ile önek yapın pat: .
Sonra, Base64- bu önekli dizeyi temel bir kimlik doğrulama belirteci oluşturacak şekilde kodlayın.
Son olarak, bu betiği ardışık düzene ekleyin:
git -c http.https://<url of submodule repository>.extraheader="AUTHORIZATION: Basic <BASE64_ENCODED_STRING>" submodule update --init --recursive
" < BASE64_ENCODED_STRING > " öğesini Base64 kodlamalı "Pat: token" dizeniz ile değiştirdiğinizden emin olun.
Projenizde bir gizli dizi değişkeni kullanın veya oluşturduğunuz temel kimlik doğrulama belirtecini depolamak için işlem hattı oluşturun. Yukarıdaki git komutunda gizli anahtarı doldurmak için bu değişkeni kullanın.
Not
S: bir git kimlik bilgileri yöneticisini aracıda neden kullanamıyorum? Y : Alt modül kimlik bilgilerini özel derleme aracısında yüklü olan bir git kimlik bilgileri Yöneticisi 'nde depolamak, genellikle kimlik bilgileri Yöneticisi her güncelleştirildiğinde kimlik bilgilerini yeniden girmeniz istenebilir. Bu, Kullanıcı etkileşimi mümkün olmadığında otomatik derlemeler sırasında istenmez.
Yüzeysel getirme
Geçmişin ne kadar geri yükleneceğini sınırlamak isteyebilirsiniz. Bu durum etkili bir şekilde sonuçlanır git fetch --depth=n . Deponuz büyükse, bu seçenek derleme işlem hattınızı daha verimli hale getirir. Deponuz uzun bir süre kullanımda ve boyutlandırılabilir geçmişle kullanılıyorsa büyük olabilir. Büyük dosyaları eklediyseniz ve daha sonra sildiyseniz de büyük olabilir.
İşlem fetchDepth hattınızdaki fetchDepth adımında ayarı yapılandırabilirsiniz.
steps:
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
clean: boolean # whether to fetch clean each time
fetchDepth: number # the depth of commits to ask Git to fetch
lfs: boolean # whether to download Git-LFS files
submodules: true | recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules
path: string # path to check out source code, relative to the agent's build directory (e.g. \_work\1)
persistCredentials: boolean # set to 'true' to leave the OAuth token in the Git config after the initial fetch
Bu durumlarda bu seçenek, ağ ve depolama kaynaklarını korumanıza yardımcı olabilir. Ayrıca zamandan tasarruf edebilir. Her zaman zaman kaydetmediği sebebi, bazı durumlarda sunucunun belirttiğiniz derinliğe karşı indirileceği bir işleme süresini hesaplamak için ihtiyaç duyduğu bir nedendir.
Not
İşlem hattı başlatıldığında, derleme dalı bir işleme KIMLIĞI olarak çözümlenir. Ardından, aracı dalı getirir ve istenen yürütmeyi denetler. Bir dalın bir kayıt KIMLIĞINE çözümlenme ve aracının kullanıma alma işlemi gerçekleştirdiği zaman arasında küçük bir pencere vardır. Dal hızlı bir şekilde güncelliyor ve basit getirme için çok küçük bir değer ayarlarsanız, aracı kullanıma almayı denediğinde kayıt olmayabilir. Bu durumda, yüzeysel getirme derinliği ayarını artırın.
Kaynakları eşitleme
Yeni işlemeler getirmeyi atlamak isteyebilirsiniz. Bu seçenek, aşağıdakileri yapmak istediğiniz durumlarda yararlı olabilir:
Kendi özel seçeneklerinizi kullanarak git init, config ve Fetch.
Sürüm denetimindeki koda bağlı olmayan Otomasyonu (örneğin bazı betikler) çalıştırmak için bir yapı işlem hattı kullanın.
İşlem hattınızdaki kullanıma alma adımında kaynak eşitleme ayarını ayarlayarak yapılandırabilirsiniz .
steps:
- checkout: none # Don't sync sources
Not
Bu seçeneği kullandığınızda, aracı depoyu temizleyen git komutlarının çalıştırılmasını da atlar.
Derlemeyi temizle
Bir yapı çalıştırılmadan önce şirket içinde barındırılan aracının çalışma dizinini temizlemek için farklı biçimler gerçekleştirebilirsiniz.
Genel olarak, şirket içinde barındırılan aracılarınız için daha hızlı performans için depoyu temizlemeyin. Bu durumda, en iyi performansı elde etmek için, oluşturmak için kullandığınız görev ya da aracın tüm Temizleme seçeneklerini devre dışı bırakarak artımlı olarak da oluşturulduğunuzdan emin olun.
Depoyu temizlemeniz gerekiyorsa (örneğin, önceki bir derlemeden kalan dosyalardan kaynaklanan sorunlardan kaçınmak için) seçenekleriniz aşağıda verilmiştir.
Not
Her seferinde yeni bir aracı alacağınız için, Microsoft tarafından barındırılan bir aracı kullanıyorsanız Temizleme işlemi etkili değildir.
İşlem clean hattınızdaki clean adımında ayarı yapılandırabilirsiniz.
steps:
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
clean: boolean # whether to fetch clean each time
fetchDepth: number # the depth of commits to ask Git to fetch
lfs: boolean # whether to download Git-LFS files
submodules: true | recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules
path: string # path to check out source code, relative to the agent's build directory (e.g. \_work\1)
persistCredentials: boolean # set to 'true' to leave the OAuth token in the Git config after the initial fetch
cleantrue Derleme ardışık düzenine ayarlandığında, içindeki tüm değişiklikleri geri alır $(Build.SourcesDirectory) . Daha belirgin olarak, kaynağı getirmeden önce aşağıdaki git komutları yürütülür.
git clean -ffdx
git reset --hard HEAD
Daha fazla seçenek için workspace bir workspaceayarını yapılandırabilirsiniz.
jobs:
- job: string # name of the job, A-Z, a-z, 0-9, and underscore
...
workspace:
clean: outputs | resources | all # what to clean up before the job runs
Bu, aşağıdaki temiz seçenekleri sağlar.
çıktılar: önceki kullanıma alma görevinde açıklanan Temizleme ayarıyla aynı işlem ve ayrıca: siler ve yeniden oluşturur .
$(Build.ArtifactStagingDirectory)Ve ' nin her$(Common.TestResultsDirectory)zaman ve her derlemeden önce bu ayarlardan bağımsız olarak silindiğini ve yeniden oluşturulduğunu unutmayın.kaynaklar: siler ve yeniden oluşturur . Bu, her derleme için yeni, yerel bir git deposunun başlatılmasına neden olur.
Tümü: siler ve yeniden oluşturur . Bu, her derleme için yeni, yerel bir git deposunun başlatılmasına neden olur.
Kaynakları etiketle
Takımınızın her bir dosyanın hangi sürümünün tamamlanmış yapıda ekleneceğini kolayca belirlemesini sağlamak için kaynak kodu dosyalarınızı etiketlemek isteyebilirsiniz. Kaynak kodun tüm derlemeler için mi yoksa yalnızca başarılı derlemeler için mi etiketlenmesi gerektiğini de belirtebilirsiniz.
Bu ayarı şu anda YAML 'de yapılandıramazsınız, ancak klasik düzenleyicide olabilirsiniz. YAML işlem hattını düzenlediğinizde, YAML Düzenleyicisi menüsünden Tetikleyiciler ' i seçerek klasik düzenleyiciye erişebilirsiniz.

Klasik düzenleyiciden YAML' yi seçin, kaynakları al görevini seçin ve ardından istediğiniz özellikleri orada yapılandırın.

Etiket biçiminde , Kullanıcı tanımlı ve "tümü" kapsamına sahip önceden tanımlanmış değişkenleri kullanabilirsiniz. Örneğin:
$(Build.DefinitionName)_$(Build.DefinitionVersion)_$(Build.BuildId)_$(Build.BuildNumber)_$(My.Variable)
İlk dört değişken önceden tanımlanmıştır. My.Variable , My.Variablesizin tarafınızdan tanımlanabilir.
Derleme işlem hattı, kaynaklarınızı bir Git etiketiyle etiketleyebilir.
Bazı derleme değişkenleri geçerli bir etiket olmayan bir değer verebilir. Örneğin, ve gibi değişkenler boşluk $(Build.RequestedFor)$(Build.DefinitionName) içerebilir. Değer boşluk içeriyorsa, etiket oluşturulmaz.
Kaynaklar derleme işlem hattınızla etiketlendikten sonra, tamamlanan yapıya git başvurusu olan bir yapıt refs/tags/{tag} otomatik olarak eklenir. Bu, takımınızdan ek izlenebilirlik sağlar ve derlemeden derlenmiş koda gezinmek için daha kolay bir yol sağlar. Etiket, yapı tarafından üretildiğinden, derleme yapıtı olarak değerlendirilir. Yapı el ile veya bir bekletme ilkesi üzerinden silindiğinde, etiket de silinir.
SSS
Azure Repos tümleştirmeyle ilgili sorunlar üç kategoride yer almalıdır:
- Başarısız Tetikleyiciler: Depoya bir güncelleştirme gönderdiğimde ardışık düzen tetiklenmiyor.
- Kullanıma alma başarısız: Ardışık düzen tetikleniyor, ancak kullanıma alma adımında başarısız oluyor.
- Yanlış sürüm: Ardışık düzen çalışıyor, ancak beklenmeyen bir kaynak/YAML sürümü kullanılıyor.
Başarısız Tetikleyiciler
Yalnızca CI/PR tetikleyicilerine sahip yeni bir YAML işlem hattı oluşturdum, ancak işlem hattı tetiklenmiyor.
Başarısız tetikleyicilerinizdeki sorunları gidermek için bu adımların her birini izleyin:
YAML CI veya PR tetikleyiclarınız Kullanıcı arabirimindeki işlem hattı ayarları tarafından geçersiz kılındımı? İşlem hattınızı düzenlenirken .. . öğesini seçin ve ardından tetikler.

Deponuz için kullanılabilen tetikleyici türleri (sürekli tümleştirme veya çekme isteği doğrulama) için buradaki YAML tetikleyicisini geçersiz kıl ayarını kontrol edin.

- YAML dosyasında ya da depo için dal ilkelerinde PR tetikleyicisini mi yapılandırıyorsunuz? Azure Repos Git deposu için, yaml dosyasında bir PR tetikleyicisi yapılandıramazsınız. Dal ilkelerinikullanmanız gerekir.
Ardışık düzen duraklatıldı veya devre dışı mı? işlem hattının düzenleyicisini açın ve ardından denetlemek için Ayarlar ' yi seçin. İşlem hattınız duraklatılmışsa veya devre dışıysa, Tetikleyiciler çalışmaz.
YAML dosyasını doğru dalda güncelleştirmiş musunuz? Bir dala güncelleştirme göndermeniz durumunda, aynı dalda bulunan YAML dosyası CI davranışını yönetir. Bir güncelleştirmeyi kaynak dalına dağıtırsanız, YAML dosyası kaynak dalı hedef dalı ile birleştirme işlemi, çekme isteği davranışını yönetir. Doğru daldaki YAML dosyasının gerekli CI veya PR yapılandırmasına sahip olduğundan emin olun.
Tetikleyiciyi doğru şekilde yapılandırdınız mı? Bir YAML tetikleyicisi tanımladığınızda, dallar, Etiketler ve yollar için hem dahil etme hem de dışlama yan tümceleri belirtebilirsiniz. Include yan tümcesinin işlemenizden ayrıntılarla eşleştiğinden ve exclude yan tümcesinin bunları dışiçermediğinden emin olun. Tetikleyicilerin sözdizimini denetleyin ve doğru olduğundan emin olun.
Tetikleyiciyi veya yolları tanımlarken değişkenler kullandınız mı? Bu desteklenmez.
YAML dosyanız için şablonlar mı kullanıyorsunuz? Varsa, tetikleyiclerinizin Main YAML dosyasında tanımlandığından emin olun. Şablon dosyaları içinde tanımlanan Tetikleyiciler desteklenmez.
Değişikliklerinizi gönderdiğiniz dalları veya yolları dışlıyorsunuz musunuz? Dahil edilen bir dalda bir değişikliği dahil eden yola göndererek test edin. Tetiklerde bulunan yolların büyük/küçük harfe duyarlı olduğunu unutmayın. Tetikleyicilere yollar belirtirken gerçek klasörlerle aynı durumu kullandığınızdan emin olun.
Yeni bir dal göndermi? Öyleyse, yeni dal yeni bir çalıştırma başlatılamayabilir. "Yeni dallar oluşturulduğunda tetikleyicilerinin davranışı" bölümüne bakın.
CI veya PR Tetikleyicileri sorunsuz şekilde çalışıyor. Ancak, şimdi çalışmayı durdurmuştur.
İlk olarak, önceki sorudaki sorun giderme adımlarına gidin. Ardından, şu ek adımları izleyin:
Çekme ortamınızda birleştirme çakışmalarıyla mı sahipsiniz? İşlem hattını tetiklemeyen bir çekme isteği için onu açın ve bir birleştirme çakışması olup olmadığını kontrol edin. Birleştirme çakışmasını çözün.
İtme veya çekme isteği olaylarının işlenmesinde bir gecikme mi yaşıyor musunuz? Bunu genellikle sorunun tek bir işlem hattına özgü olup olmadığını görebilir veya projenizdeki tüm işlem hatları veya depolarda ortak olduğunu görürsünüz. Depolardan herhangi birine yönelik bir gönderim veya bir PR Güncelleştirmesi bu belirtiyle karşılaşıyorsa, güncelleştirme olaylarını işlerken gecikmeler yaşanıyor olabilir. Durum sayfamızdabir hizmet kesintisi yaşanık olup olmadığını denetleyin. Durum sayfasında bir sorun varsa takımımız üzerinde çalışmaya başlamış olması gerekir. Sorun hakkındaki güncelleştirmeler için sayfayı sık sık denetleyin.
Kullanıcıların YAML dosyasını güncelleştirdiklerinde tetikleyicilerle ilgili dalların listesini geçersiz kılmasını istemiyorum. Bunu nasıl yapabilirim?
Koda katkıda bulunmak için gerekli izinlere sahip kullanıcılar YAML dosyasını güncelleştirin ve ek dalları dahil edin/hariç tutabilirsiniz. Sonuç olarak, kullanıcılar YAML dosyalarına kendi özellik veya kullanıcı dallarını dahil etmek ve bu güncelleştirmeyi bir özellik veya kullanıcı dalına itmek için kullanılabilir. Bu, işlem hattının bu dalda yapılan tüm güncelleştirmeler için tetiklenene neden olabilir. Bu davranışı önlemek için şunları yapmak gerekir:
- İşlem hattını kullanıcı arabiriminde Azure Pipelines düzenleyin.
- Tetikleyiciler menüsüne gidin.
- Buradan YAML sürekli Tümleştirme tetikleyicilerini geçersiz kıl'ı seçin.
- Tetikleyici için dahil etmek veya dışlamak istediğiniz dalları belirtin.
Bu adımları izleyebilirsiniz. YAML dosyasında belirtilen CI tetikleyicileri yoksayılır.
YAML işlem hattımda birden çok depom var. Nasıl yaparım? depo için tetikleyiciler mi ayarlaysınız?
Birden çok depo kullanma içinde tetikleyicilere bakın.
Başarısız olan iade
Geri alma adımı sırasında günlük dosyasında aşağıdaki hatayı görüyorum. Nasıl düzeltebilirim?
remote: TF401019: The Git repository with name or identifier XYZ does not exist or you do not have permissions for the operation you are attempting.
fatal: repository 'XYZ' not found
##[error] Git fetch failed with exit code: 128
Başarısız olan tetikleyicilerinizi gidermek için aşağıdaki adımların her birini izleyin:
Depo hala var mı? İlk olarak, bunu Repos.
Depoya bir betik kullanarak mı erişisiniz? Öyleyse, İş yetkilendirme kapsamını başvurulan depolar ile sınırla Azure DevOps ayarını kontrol edin. İş yetkilendirme kapsamını başvurulan Azure DevOps depolar etkinleştirildiğinde, işlem hattında ilk olarak açıkça başvurulmadıkça git Azure Repos git depolarını bir betik kullanarak kontrol etmek mümkün olmayacaktır.
İşlem hattının iş yetkilendirme kapsamı nedir?
Kapsam koleksiyon ise:
- Bu aralıklı bir hata olabilir. İşlem hattını yeniden çalıştırın.
- Birisi Koleksiyon Derleme Hizmeti hesabına Project kaldırılmış olabilir.
- Deponun mevcut olduğu projenin proje ayarlarına gidin. Repos - > Depolar - belirli > bir depo'ya seçin.
- Kullanıcı Project Koleksiyon Derleme Hizmeti'nin (koleksiyonunuz-adınız) mevcut olup olduğunu kontrol edin.
- Bu hesabın Etiket oluştur ve Okuma erişimine sahip olup olduğunu kontrol edin.
Kapsam proje ise:
- Depo, işlem hattıyla aynı projede mi?
- Evet:
- Bu aralıklı bir hata olabilir. İşlem hattını yeniden çalıştırın.
- Birisi Derleme Hizmeti hesabına Project kaldırılmış olabilir.
- Deponun mevcut olduğu projenin proje ayarlarına gidin. Repos - > Depolar - belirli > bir depo'ya seçin.
- Projenizin-adı Derleme Hizmeti'nin (koleksiyon-adınız) kullanıcı listesinde mevcut olup olduğunu kontrol edin.
- Bu hesabın Etiket oluştur ve Okuma erişimine sahip olup olduğunu kontrol edin.
- Hayır:
- İşlem hattınız genel projede mi?
- Evet: Genel projenizin dışındaki kaynaklara erişesiniz. Projeyi özel yapma.
- Hayır: Erişim izni vermek için ek adımlar atılması gerekir. İşlem hattınızı A projesinde ve deponun B projesinde var olduğunu varsayın.
- Deponun mevcut olduğu projenin proje ayarlarına (B) gidin. Repos - > Depolar - belirli > bir depo'ya seçin.
- Proje-adınız Derleme Hizmeti'nizi (koleksiyonunuz-adınız) kullanıcı listesine ekleyin; burada projenizin-adı, işlem hattınızı (A) bulunduğu projenin adıdır.
- Hesaba Etiket oluşturma ve Okuma erişimi verme.
- İşlem hattınız genel projede mi?
- Evet:
- Depo, işlem hattıyla aynı projede mi?
Yanlış sürüm
İşlem hattında YAML dosyasının yanlış bir sürümü kullanılıyor. Bunun nedeni nedir?
- CI tetikleyicileri için, ittirmekte olduğunu dalda yaml dosyası bir CI derlemesi çalıştıracak olup görmek için değerlendirilir.
- Çekme çekme işlemi tetikleyicileri için, pr'nin kaynak ve hedef dallarının birleştirilmesinden elde edilen YAML dosyası, çekme işlemi derlemenin çalıştırılamayacak şekilde değerlendirilir.



