Ardı ardına bir işlem hattı tetikleme
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Büyük ürünlerin birbirine bağımlı çeşitli bileşenleri vardır. Bu bileşenler genellikle bağımsız olarak oluşturulur. Yukarı akış bileşeni (örneğin bir kitaplık) değiştiğinde aşağı akış bağımlılıklarının yeniden oluşturulması ve yeniden doğrulanması gerekir.
Böyle durumlarda, tetikleme işlem hattının başarıyla tamamlanmasının ardından işlem hattınızı çalıştırmak için bir işlem hattı tetikleyicisi ekleyin.
Not
Daha önce YAML işlem hattınızın klasik düzenleyicisine gidip kullanıcı arabiriminde derleme tamamlama tetikleyicilerini yapılandırmış olabilirsiniz. Bu model çalışmaya devam etse de artık önerilmez. Önerilen yaklaşım, işlem hattı tetikleyicilerini doğrudan YAML dosyası içinde belirtmektir. Klasik düzenleyicide tanımlandığı gibi derleme tamamlama tetikleyicileri, artık işlem hattı tetikleyicilerinde ele alınan çeşitli dezavantajlara sahiptir. Örneğin, derleme tamamlama tetikleyicilerini kullanarak tetikleyen işlem hattınınkiyle aynı dalda işlem hattını tetiklemenin bir yolu yoktur.
İşlem hattı kaynak tetikleyicilerini yapılandırma
Başka bir işlem hattı tamamlandıktan sonra işlem hattını tetikleme için bir işlem hattı kaynak tetikleyicisi yapılandırın.
Aşağıdaki örnek, işlem hattının herhangi bir çalıştırması tamamlandıktan sonra adlı app-ci
işlem hattının çalışması için bir işlem hattı kaynak tetikleyicisi security-lib-ci
yapılandırmaktadır.
Bu örnekte aşağıdaki iki işlem hattı vardır.
security-lib-ci
- Bu işlem hattı önce çalışır.# security-lib-ci YAML pipeline steps: - bash: echo "The security-lib-ci pipeline runs first"
app-ci
- Bu işlem hattı, işlem hattının her çalıştırmasıapp-ci
tamamlandığında işlem hattını otomatik olarak çalışacak şekilde yapılandıran bir işlem hattı kaynak tetikleyicisinesecurity-lib-ci
sahiptir.# app-ci YAML pipeline # We are setting up a pipeline resource that references the security-lib-ci # pipeline and setting up a pipeline completion trigger so that our app-ci # pipeline runs when a run of the security-lib-ci pipeline completes resources: pipelines: - pipeline: securitylib # Name of the pipeline resource. source: security-lib-ci # The name of the pipeline referenced by this pipeline resource. project: FabrikamProject # Required only if the source pipeline is in another project trigger: true # Run app-ci pipeline when any run of security-lib-ci completes steps: - bash: echo "app-ci runs after security-lib-ci completes"
- pipeline: securitylib
işlem hattı kaynağının adını belirtir. İşlem hattı kaynak değişkenlerini kullanma veya yapıtları indirme gibi işlem hattının diğer bölümlerinden işlem hattı kaynağına başvururken burada tanımlanan etiketi kullanın.source: security-lib-ci
bu işlem hattı kaynağı tarafından başvuruda bulunan işlem hattının adını belirtir. İşlem hattı adını Azure DevOps portalından İşlem Hatları giriş sayfası gibi çeşitli yerlerde alabilirsiniz. varsayılan olarak işlem hatları, işlem hattını içeren depodan sonra adlandırılır. İşlem hattının adını güncelleştirmek için bkz . İşlem hattı ayarları. İşlem hattı bir klasörde yer alıyorsa, baştaki\
gibi klasör adını ekleyin; örneğin\security pipelines\security-lib-ci
.project: FabrikamProject
- Tetikleyen işlem hattı başka bir Azure DevOps projesindeyse proje adını belirtmeniz gerekir. Hem kaynak işlem hattı hem de tetiklenen işlem hattı aynı projedeyse bu özellik isteğe bağlıdır. Bu değeri belirtirseniz ve işlem hattınız tetiklemezse, bu bölümün sonundaki nota bakın.trigger: true
- Kaynak işlem hattının herhangi bir sürümü tamamlandığında işlem hattını tetikleme için bu söz dizimini kullanın. Tamamlayan kaynak işlem hattının hangi sürümlerinin bir çalıştırmayı tetiklediğini filtrelemeyi öğrenmek için bu makaledeki aşağıdaki bölümlere bakın. Filtreler belirtildiğinde, kaynak işlem hattı çalıştırmasının bir çalıştırmayı tetikleyebilmesi için tüm filtrelerle eşleşmesi gerekir.
Tetiklenen işlem hattı ve tetiklenen işlem hattı aynı depoyu kullanıyorsa, biri diğerini tetiklediğinde her iki işlem hattı da aynı işlemeyi kullanarak çalışır. İlk işlem hattınız kodu derlerse ve ikinci işlem hattı bunu test ederse bu yararlı olur. Ancak, iki işlem hattı farklı depolar kullanıyorsa tetiklenen işlem hattı, işlem hattı tamamlama tetikleyicileri için dal konuları bölümünde açıklandığı gibi, ayar tarafından Default branch for manual and scheduled builds
belirtilen daldaki kodun sürümünü kullanır.
Not
Bazı senaryolarda, el ile derlemeler ve zamanlanmış derlemeler için varsayılan dal ön refs/heads
ek içermez. Örneğin, varsayılan dal yerine olarak main
refs/heads/main
ayarlanabilir. Bu senaryoda, farklı bir projeden tetikleyici çalışmaz. Hedef işlem hattının değeri dışında bir değere ayarladığınızda project
sorunlarla karşılaşırsanız, değerini farklı bir dal olarak değiştirip kullanmak istediğiniz varsayılan dala geri döndürerek varsayılan dalı içerecek refs/heads
şekilde güncelleştirebilirsiniz.
İşlem hattı tamamlama tetikleyicilerinin yapılandırılması YAML şablonlarında desteklenmez. Şablonlarda işlem hattı kaynaklarını tanımlamaya devam edebilirsiniz.
Dal filtreleri
İsteğe bağlı olarak tetikleyiciyi yapılandırırken dahil etmek veya dışlamak için dalları belirtebilirsiniz. Dal filtreleri belirtirseniz, dal filtreleri ile eşleşen bir kaynak işlem hattı çalıştırması başarıyla tamamlandığında yeni bir işlem hattı tetiklenir. Aşağıdaki örnekte işlem hattı, app-ci
dışında releases/old*
herhangi bir releases/*
dalda tamamlanırsa security-lib-ci
çalışır.
# app-ci YAML pipeline
resources:
pipelines:
- pipeline: securitylib
source: security-lib-ci
trigger:
branches:
include:
- releases/*
exclude:
- releases/old*
Üst öğesinin tetiklendiği farklı dallar için alt işlem hattını tetikleme için, üst öğesinin tetiklendiği tüm dal filtrelerini ekleyin. Aşağıdaki örnekte işlem hattı, app-ci
dışında releases/old*
herhangi bir releases/*
dalda veya ana dalda tamamlanırsa security-lib-ci
çalışır.
# app-ci YAML pipeline
resources:
pipelines:
- pipeline: securitylib
source: security-lib-ci
trigger:
branches:
include:
- releases/*
- main
exclude:
- releases/old*
Not
Dal filtreleriniz çalışmıyorsa ön ekini refs/heads/
kullanmayı deneyin. Örneğin, yerine releases/old*
kullanınrefs/heads/releases/old*
.
Etiket filtreleri
Not
İşlem hattı kaynakları için etiket filtresi desteği için Azure DevOps Server 2020 Güncelleştirme 1 veya üzeri gerekir.
İşlem tags
hattı tamamlama olaylarının trigger
işlem hattınızı tetikleyebileceği filtrelerin özelliği. Tetikleyen işlem hattı listedeki tüm etiketlerle tags
eşleşiyorsa işlem hattı çalışır.
resources:
pipelines:
- pipeline: MyCIAlias
source: Farbrikam-CI
trigger:
tags: # This filter is used for triggering the pipeline run
- Production # Tags are AND'ed
- Signed
Not
İşlem hattı kaynağının da bir tags
özelliği vardır. İşlem tags
hattı kaynağının özelliği, işlem hattı el ile veya zamanlanmış bir tetikleyici tarafından tetiklendiğinde yapıtları almak için hangi işlem hattı çalıştırmasını belirlemek için kullanılır. Daha fazla bilgi için bkz . Kaynaklar: işlem hatları ve Yapıt sürümünün değerlendirilmesi.
Aşama filtreleri
Not
İşlem hattı kaynak tetikleyicileri için aşama filtreleri için Azure DevOps Server 2020 Güncelleştirme 1 veya üzeri gerekir.
Tetikleyici işlem hattının bir veya daha fazla aşaması tamamlandığında filtreyi stages
kullanarak işlem hattınızı tetikleyebilirsiniz. Birden çok aşama sağlarsanız, listelenen tüm aşamalar tamamlandığında tetiklenen işlem hattı çalışır.
resources:
pipelines:
- pipeline: MyCIAlias
source: Farbrikam-CI
trigger:
stages: # This stage filter is used when evaluating conditions for
- PreProduction # triggering your pipeline. On successful completion of all the stages
- Production # provided, your pipeline will be triggered.
Dal ile ilgili dikkat edilmesi gerekenler
İşlem hattı tamamlama tetikleyicileri, başka bir işlem hattının tamamlanmasının sonucu olarak işlem hattının çalıştırılıp çalıştırılmayacağını belirlerken değerlendirilecek YAML işlem hattının dal filtrelerinin hangi dal sürümünün belirleneceğini belirlemek üzere el ile ve zamanlanmış derlemeler için Varsayılan dalı kullanır. Varsayılan olarak bu ayar, deponun varsayılan dalını gösterir.
İşlem hattı tamamlandığında Azure DevOps çalışma zamanı, tamamlanan işlem hattına başvuran işlem hattı tamamlama tetikleyicilerine sahip tüm işlem hatlarının işlem hattı kaynak tetikleyici dal filtrelerini değerlendirir. bir işlem hattının farklı dallarda birden çok sürümü olabilir, bu nedenle çalışma zamanı, ayar tarafından Default branch for manual and scheduled builds
belirtilen daldaki işlem hattı sürümündeki dal filtrelerini değerlendirir. Eşleşme varsa işlem hattı çalışır, ancak işlem hattının çalışan sürümü, tetiklenen işlem hattının tamamlanan işlem hattıyla aynı depoda olup olmadığına bağlı olarak farklı bir dalda olabilir.
- İki işlem hattı farklı depolardaysa, tarafından
Default branch for manual and scheduled builds
belirtilen dalda tetiklenen işlem hattı sürümü çalıştırılır. - İki işlem hattı aynı depodaysa, tetiklenen işlem hattı sürümü tetikleyici işlem hattıyla aynı dalda çalıştırılır (tetikleyici koşulu karşılandığında söz konusu daldan işlem hattının sürümü kullanılarak), bu daldan
Default branch for manual and scheduled builds
farklı olsa bile ve bu sürüm tamamlanmış işlem hattının dalı ile eşleşen dal filtrelerine sahip olmasa bile çalıştırılır. Bunun nedeni, daldakiDefault branch for manual and scheduled builds
dal filtrelerinin, tamamlanan işlem hattı dalındaki sürümdeki dal filtrelerinin değil, işlem hattının çalıştırılıp çalıştırılmaması gerektiğini belirlemek için kullanılmasıdır.
İşlem hattı tamamlama tetikleyicileriniz tetiklenmiyor gibi görünüyorsa, tetiklenen işlem hattı için el ile ve zamanlanmış derlemeler için Varsayılan dalın değerini denetleyin. bu dalın işlem hattı sürümündeki dal filtreleri, işlem hattı tamamlama tetikleyicisinin işlem hattı çalıştırmasını başlatıp başlatmadığını belirlemek için kullanılır. Varsayılan olarak, Default branch for manual and scheduled builds
deponun varsayılan dalı olarak ayarlanır, ancak işlem hattı oluşturulduktan sonra bunu değiştirebilirsiniz.
İşlem hattı tamamlama tetikleyicisinin tetiklenmediği tipik bir senaryo, yeni bir dal oluşturulduğunda işlem hattı tamamlama tetikleyicisi dal filtreleri bu yeni dalı içerecek şekilde değiştirilir, ancak ilk işlem hattı yeni dal filtreleri ile eşleşen bir dalda tamamlandığında ikinci işlem hattı tetiklenmez. Daldaki işlem hattı sürümündeki Default branch for manual and scheduled builds
dal filtreleri yeni dalla eşleşmiyorsa bu durum ortaya çıkar. Bu tetikleyici sorununu çözmek için aşağıdaki iki seçeneğiniz vardır.
- Daldaki işlem hattındaki
Default branch for manual and scheduled builds
dal filtrelerini yeni dalla eşleşebilecek şekilde güncelleştirin. - El ile ve zamanlanmış derlemeler için Varsayılan dalı ayarını, yeni dalla eşleşen dal filtreleri ile işlem hattının bir sürümüne sahip bir dal olarak güncelleştirin.
Tetikleyici türlerini birleştirme
İşlem hattınızda hem CI tetikleyicilerini hem de işlem hattı tetikleyicilerini belirttiğinizde, CI tetikleyicisinin filtreleriyle eşleşen her gönderim yapıldığında yeni çalıştırmaların başlatılmasını ve işlem hattı tamamlama tetikleyicisinin filtreleriyle eşleşen kaynak işlem hattının çalıştırılmasının tamamlanmasını bekleyebilirsiniz.
Örneğin, adlı ve B
aynı depoda yer alan, her ikisinin de CI tetikleyicileri olan ve B
işlem hattının tamamlanması için yapılandırılmış bir işlem hattı tamamlama tetikleyicisi olan iki A
işlem hattını A
göz önünde bulundurun. Depoya gönderim yaparsanız:
- CI tetikleyicisine
A
göre yeni bir çalıştırma başlatılır. - Aynı zamanda, CI tetikleyicisine
B
bağlı olarak yeni bir çalıştırma başlatılır. Bu çalıştırma, önceki bir işlem hattıA
çalıştırmasından yapıtları tüketir. - tamamlandığında
A
, içindeki işlem hattı tamamlama tetikleyicisineB
bağlı olarak başka bir çalıştırmasını tetiklerB
.
Bu örnekte iki çalıştırmanın B
tetiklenmesini önlemek için CI tetikleyicisini (trigger: none
) veya işlem hattı tetikleyicisini (pr: none
) devre dışı bırakmanız gerekir.