Memicu alur satu per satu

Layanan Azure DevOps | Azure DevOps Server 2022 | Azure DevOps Server 2020

Produk besar memiliki beberapa komponen yang bergantung satu sama lain. Komponen-komponen ini sering dibangun secara independen. Ketika komponen upstream (pustaka, misalnya) berubah, dependensi hilir harus dibangun kembali dan divalidasi ulang.

Dalam situasi seperti ini, tambahkan pemicu alur untuk menjalankan alur Anda setelah berhasil menyelesaikan alur pemicu.

Catatan

Sebelumnya, Anda mungkin telah menavigasi ke editor klasik untuk alur YAML Anda dan mengonfigurasi pemicu penyelesaian build di UI. Meskipun model itu masih berfungsi, model tersebut tidak lagi direkomendasikan. Pendekatan yang disarankan adalah menentukan pemicu alur langsung dalam file YAML. Pemicu penyelesaian build seperti yang didefinisikan dalam editor klasik memiliki berbagai kelemahan, yang sekarang telah ditangani dalam pemicu alur. Misalnya, tidak ada cara untuk memicu alur pada cabang yang sama dengan alur pemicu menggunakan pemicu penyelesaian build.

Mengonfigurasi pemicu sumber daya alur

Untuk memicu alur setelah selesainya alur lain, konfigurasikan pemicu sumber daya alur.

Contoh berikut mengonfigurasi pemicu sumber daya alur sehingga alur bernama app-ci berjalan setelah eksekusi security-lib-ci alur selesai.

Contoh ini memiliki dua alur berikut.

  • security-lib-ci - Alur ini berjalan terlebih dahulu.

    # security-lib-ci YAML pipeline
    steps:
    - bash: echo "The security-lib-ci pipeline runs first"
    
  • app-ci - Alur ini memiliki pemicu sumber daya alur yang mengonfigurasi app-ci alur untuk berjalan secara otomatis setiap kali security-lib-ci eksekusi alur selesai.

    # 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 menentukan nama sumber daya alur. Gunakan label yang ditentukan di sini saat merujuk ke sumber daya alur dari bagian lain dari alur, seperti saat menggunakan variabel sumber daya alur atau mengunduh artefak.
  • source: security-lib-ci menentukan nama alur yang dirujuk oleh sumber daya alur ini. Anda dapat mengambil nama alur dari portal Azure DevOps di beberapa tempat, seperti halaman arahan Alur. Secara default, alur dinamai sesuai repositori yang berisi alur. Untuk memperbarui nama alur, lihat Pengaturan alur. Jika alur terkandung dalam folder, sertakan nama folder, termasuk yang di depan \, misalnya \security pipelines\security-lib-ci.
  • project: FabrikamProject - Jika alur pemicu berada di proyek Azure DevOps lain, Anda harus menentukan nama proyek. Properti ini bersifat opsional jika alur sumber dan alur yang dipicu berada dalam proyek yang sama. Jika Anda menentukan nilai ini dan alur Anda tidak terpicu, lihat catatan di akhir bagian ini.
  • trigger: true - Gunakan sintaks ini untuk memicu alur ketika versi alur sumber selesai. Lihat bagian berikut dalam artikel ini untuk mempelajari cara memfilter versi penyelesaian alur sumber mana yang akan memicu eksekusi. Saat filter ditentukan, eksekusi alur sumber harus cocok dengan semua filter untuk memicu eksekusi.

Jika alur pemicu dan alur yang dipicu menggunakan repositori yang sama, kedua alur akan berjalan menggunakan penerapan yang sama ketika satu memicu yang lain. Ini berguna jika alur pertama Anda membangun kode dan alur kedua mengujinya. Namun, jika kedua alur menggunakan repositori yang berbeda, alur yang dipicu akan menggunakan versi kode di cabang yang ditentukan oleh Default branch for manual and scheduled builds pengaturan, seperti yang dijelaskan dalam Pertimbangan cabang untuk pemicu penyelesaian alur.

Catatan

Dalam beberapa skenario, cabang default untuk build manual dan build terjadwal tidak menyertakan refs/heads awalan. Misalnya, cabang default mungkin diatur ke main alih-alih ke refs/heads/main. Dalam skenario ini, pemicu dari proyek yang berbeda tidak berfungsi. Jika Anda mengalami masalah saat Anda mengatur project ke nilai selain alur target, Anda dapat memperbarui cabang default untuk disertakan refs/heads dengan mengubah nilainya ke cabang yang berbeda, lalu dengan mengubahnya kembali ke cabang default yang ingin Anda gunakan.

Mengonfigurasi pemicu penyelesaian alur tidak didukung dalam templat YAML. Anda masih dapat menentukan sumber daya alur dalam templat.

Filter cabang

Anda dapat secara opsional menentukan cabang yang akan disertakan atau dikecualikan saat mengonfigurasi pemicu. Jika Anda menentukan filter cabang, alur baru dipicu setiap kali eksekusi alur sumber berhasil diselesaikan yang cocok dengan filter cabang. Dalam contoh berikut, app-ci alur berjalan jika security-lib-ci selesai di cabang apa pun releases/* , kecuali untuk releases/old*.

# app-ci YAML pipeline
resources:
  pipelines:
  - pipeline: securitylib
    source: security-lib-ci
    trigger: 
      branches:
        include: 
        - releases/*
        exclude:
        - releases/old*

Untuk memicu alur anak untuk cabang yang berbeda tempat induk dipicu, sertakan semua filter cabang tempat induk dipicu. Dalam contoh berikut, app-ci alur berjalan jika security-lib-ci selesai pada cabang atau cabang utama apa pun releases/* , kecuali untuk releases/old*.

# app-ci YAML pipeline
resources:
  pipelines:
  - pipeline: securitylib
    source: security-lib-ci
    trigger: 
      branches:
        include: 
        - releases/*
        - main
        exclude:
        - releases/old*

Catatan

Jika filter cabang Anda tidak berfungsi, coba gunakan awalan refs/heads/. Misalnya, gunakan refs/heads/releases/old*, bukan releases/old*.

Filter tag

Catatan

Dukungan filter tag untuk sumber daya alur memerlukan Azure DevOps Server 2020 Update 1 atau yang lebih tinggi.

tags Properti trigger filter tempat peristiwa penyelesaian alur dapat memicu alur Anda. Jika alur pemicu cocok dengan semua tag dalam tags daftar, alur akan berjalan.

resources:
  pipelines:
  - pipeline: MyCIAlias
    source: Farbrikam-CI
    trigger:
      tags:        # This filter is used for triggering the pipeline run
      - Production # Tags are AND'ed
      - Signed

Catatan

Sumber daya alur juga memiliki tags properti. Properti tags sumber daya alur digunakan untuk menentukan eksekusi alur mana yang akan diambil artefaknya, ketika alur dipicu secara manual atau oleh pemicu terjadwal. Untuk informasi selengkapnya, lihat Sumber Daya: alur dan Evaluasi versi artefak.

Filter tahapan

Catatan

Filter tahapan untuk pemicu sumber daya alur memerlukan Azure DevOps Server 2020 Update 1 atau yang lebih besar.

Anda dapat memicu alur Anda saat satu atau beberapa tahap alur pemicu selesai dengan menggunakan stages filter. Jika Anda menyediakan beberapa tahap, alur yang dipicu berjalan saat semua tahap yang tercantum selesai.

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. 

Pertimbangan cabang

Pemicu penyelesaian alur menggunakan cabang Default untuk pengaturan build manual dan terjadwal untuk menentukan versi cabang filter cabang alur YAML mana yang akan dievaluasi saat menentukan apakah akan menjalankan alur sebagai hasil dari penyelesaian alur lain. Secara default pengaturan ini menunjuk ke cabang default repositori.

Ketika alur selesai, runtime Azure DevOps mengevaluasi filter cabang pemicu sumber daya alur dari alur apa pun dengan pemicu penyelesaian alur yang mereferensikan alur yang telah selesai. Alur dapat memiliki beberapa versi di cabang yang berbeda, sehingga runtime mengevaluasi filter cabang dalam versi alur di cabang yang ditentukan oleh Default branch for manual and scheduled builds pengaturan. Jika ada kecocokan, alur berjalan, tetapi versi alur yang berjalan mungkin berada di cabang yang berbeda tergantung pada apakah alur yang dipicu berada di repositori yang sama dengan alur yang selesai.

  • Jika kedua alur berada di repositori yang berbeda, versi alur yang dipicu di cabang yang ditentukan oleh Default branch for manual and scheduled builds dijalankan.
  • Jika kedua alur berada di repositori yang sama, versi alur yang dipicu di cabang yang sama dengan alur pemicu dijalankan (menggunakan versi alur dari cabang tersebut pada saat kondisi pemicu terpenuhi), bahkan jika cabang tersebut berbeda dari , dan bahkan jika versi tersebut Default branch for manual and scheduled buildstidak memiliki filter cabang yang cocok dengan cabang alur yang selesai. Ini karena filter cabang dari Default branch for manual and scheduled builds cabang digunakan untuk menentukan apakah alur harus berjalan, dan bukan filter cabang dalam versi yang ada di cabang alur yang telah selesai.

Jika pemicu penyelesaian alur Anda tampaknya tidak diaktifkan, periksa nilai cabang Default untuk pengaturan build manual dan terjadwal untuk alur yang dipicu. Filter cabang dalam versi alur cabang tersebut digunakan untuk menentukan apakah pemicu penyelesaian alur memulai eksekusi alur. Secara default, Default branch for manual and scheduled builds diatur ke cabang default repositori, tetapi Anda dapat mengubahnya setelah alur dibuat.

Skenario umum di mana pemicu penyelesaian alur tidak diaktifkan adalah ketika cabang baru dibuat, filter cabang pemicu penyelesaian alur dimodifikasi untuk menyertakan cabang baru ini, tetapi ketika alur pertama selesai pada cabang yang cocok dengan filter cabang baru, alur kedua tidak memicu. Ini terjadi jika cabang memfilter dalam versi alur di Default branch for manual and scheduled builds cabang tidak cocok dengan cabang baru. Untuk mengatasi masalah pemicu ini, Anda memiliki dua opsi berikut.

  • Perbarui filter cabang di alur di Default branch for manual and scheduled builds cabang sehingga cocok dengan cabang baru.
  • Perbarui cabang Default untuk pengaturan build manual dan terjadwal ke cabang yang memiliki versi alur dengan filter cabang yang cocok dengan cabang baru.

Menggabungkan jenis pemicu

Saat Anda menentukan pemicu CI dan pemicu alur di alur Anda, Anda dapat mengharapkan eksekusi baru dimulai setiap kali pendorongan dilakukan yang cocok dengan filter pemicu CI, dan eksekusi alur sumber selesai yang cocok dengan filter pemicu penyelesaian alur.

Misalnya, pertimbangkan dua alur bernama A dan B yang berada di repositori yang sama, keduanya memiliki pemicu CI, dan B memiliki pemicu penyelesaian alur yang dikonfigurasi untuk penyelesaian alur A. Jika Anda melakukan pendorongan ke repositori:

  • Eksekusi A baru dimulai, berdasarkan pemicu CI-nya.
  • Pada saat yang sama, eksekusi B baru dimulai, berdasarkan pemicu CI-nya. Eksekusi ini mengonsumsi artefak dari eksekusi alur Asebelumnya .
  • Ketika A selesai, ini memicu eksekusi lain dari B, berdasarkan pemicu penyelesaian alur di B.

Untuk mencegah pemicu dua eksekusi B dalam contoh ini, Anda harus menonaktifkan pemicu CI -nya (trigger: none) atau pemicu alur (pr: none).