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 tetikleyicisine security-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/mainayarlanabilir. 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 buildsfarklı 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, daldaki Default 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ı Agö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 tetikleyicisine Bbağlı olarak başka bir çalıştırmasını tetikler B.

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.