Lihat beberapa repositori di alur Anda

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

Alur sering kali mengandalkan beberapa repositori yang berisi sumber, alat, skrip, atau item lain yang Anda butuhkan untuk membangun kode Anda. Dengan menggunakan beberapa checkout langkah dalam alur Anda, Anda dapat mengambil dan memeriksa repositori lain selain yang Anda gunakan untuk menyimpan alur YAML Anda.

Menentukan beberapa repositori

Repositori dapat ditentukan sebagai sumber daya repositori, atau sebaris dengan langkah tersebut checkout .

Jenis repositori berikut didukung.


  • Azure DevOps Server (terbatas pada repositori di organisasi yang sama)
  • Azure DevOps Services

GitHub (github)

  • Azure DevOps Services

GitHubEnterprise (githubenterprise)

  • Azure DevOps Services

Bitbucket Cloud (bitbucket)

  • Azure DevOps Services

Penting

Hanya repositori Azure Repos Git (git) di organisasi yang sama dengan alur yang didukung untuk checkout multi-repo di Azure DevOps Server.

Catatan

Azure Pipelines menyediakan pengaturan Batasi cakupan pekerjaan untuk repositori Azure Repos Git. Untuk memeriksa repositori Azure Repos Git yang dihosting di proyek lain, Batasi cakupan pekerjaan harus dikonfigurasi untuk mengizinkan akses. Untuk informasi selengkapnya, lihat Membatasi cakupan otorisasi pekerjaan.

Kombinasi langkah-langkah checkout berikut didukung.


Tidak ada checkout langkah

Perilaku defaultnya adalah seolah-olah checkout: self merupakan langkah pertama, dan repositori saat ini dicek keluar.


Satu checkout: none langkah

Tidak ada repositori yang disinkronkan atau dicek keluar.


Satu checkout: self langkah

Repositori saat ini dicek keluar.


Satu checkout langkah yang tidak self atau none

Repositori yang ditunjuk diperiksa alih-alih self.


Beberapa checkout langkah

Setiap repositori yang ditunjuk dicek keluar ke folder bernama setelah repositori, kecuali jika berbeda path ditentukan dalam langkah.checkout Untuk memeriksa self sebagai salah satu repositori, gunakan checkout: self sebagai salah satu langkahnya checkout .


Catatan

Saat Anda memeriksa repositori Azure Repos Git selain yang berisi alur, Anda mungkin akan diminta untuk mengotorisasi akses ke sumber daya tersebut sebelum alur berjalan untuk pertama kalinya. Untuk informasi selengkapnya, lihat Mengapa saya diminta untuk mengotorisasi sumber daya saat pertama kali mencoba memeriksa repositori yang berbeda? di bagian FAQ .

Definisi sumber daya repositori

Anda harus menggunakan sumber daya repositori jika jenis repositori Anda memerlukan koneksi layanan atau bidang sumber daya lain yang diperluas. Jenis repositori berikut memerlukan koneksi layanan.

Jenis repositori Koneksi layanan
Bitbucket Cloud Bitbucket Cloud
GitHub GitHub
GitHub Enterprise Server GitHub Enterprise Server
Repositori Azure Repos Git di organisasi yang berbeda dari alur Anda Azure Repos/Team Foundation Server

Anda dapat menggunakan sumber daya repositori meskipun jenis repositori Anda tidak memerlukan koneksi layanan, misalnya jika Anda memiliki sumber daya repositori yang ditentukan sudah untuk templat di repositori yang berbeda.

Dalam contoh berikut, tiga repositori dinyatakan sebagai sumber daya repositori. Repositori Azure Repos Git di organisasi lain, GitHub, dan sumber daya repositori Bitbucket Cloud memerlukan koneksi layanan, yang ditentukan sebagai untuk sumber daya repositori tersebut endpoint . Contoh ini memiliki empat checkout langkah, yang memeriksa tiga repositori yang dinyatakan sebagai sumber daya repositori bersama dengan repositori saat ini self yang berisi YAML alur.

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)

self Jika repositori diberi nama CurrentRepo, script perintah menghasilkan output berikut: CurrentRepo MyAzureReposGitRepo MyBitbucketRepo MyGitHubRepo. Dalam contoh ini, nama repositori (seperti yang ditentukan oleh name properti di sumber daya repositori) digunakan untuk folder, karena tidak path ditentukan dalam langkah checkout. Untuk informasi selengkapnya tentang nama dan lokasi folder repositori, lihat bagian Jalur checkout berikut ini.

Cek keluar sintaksis sebaris

Jika repositori Anda tidak memerlukan koneksi layanan, Anda dapat mendeklarasikannya sebaris dengan langkah Anda checkout .

Catatan

Hanya repositori Azure Repos Git di organisasi yang sama yang dapat menggunakan sintaksis sebaris. Repositori Azure Repos Git di organisasi yang berbeda, dan jenis repositori lain yang didukung memerlukan koneksi layanan dan harus dinyatakan sebagai sumber daya repositori.

steps:
- checkout: self
- checkout: git://MyProject/MyRepo # Azure Repos Git repository in the same organization

Catatan

Dalam contoh sebelumnya, self repositori checkout ditentukan untuk memeriksa sumber repositori yang terkait dengan alur.

Jika Anda menggunakan repositori Azure Repos Git default (yang memiliki nama yang sama dengan proyek), gunakan format - checkout: git://MyRepo/MyRepo.

Jalur checkout

path Kecuali ditentukan dalam langkah, checkout kode sumber ditempatkan di direktori default. Direktori ini berbeda tergantung pada apakah Anda memeriksa satu repositori atau beberapa repositori.

  • Repositori tunggal: Jika Anda memiliki satu checkout langkah dalam pekerjaan Anda, atau Anda tidak memiliki langkah checkout yang setara dengan checkout: self, kode sumber Anda diperiksa ke direktori yang disebut s terletak sebagai subfolder .(Agent.BuildDirectory) Jika (Agent.BuildDirectory) adalah C:\agent\_work\1, kode Anda dicek keluar ke C:\agent\_work\1\s.

  • Beberapa repositori: Jika Anda memiliki beberapa checkout langkah dalam pekerjaan Anda, kode sumber Anda akan dicek keluar ke direktori yang dinamai sesuai repositori sebagai subfolder s di (Agent.BuildDirectory). Jika (Agent.BuildDirectory) adalah C:\agent\_work\1 dan repositori Anda diberi nama tools dan code, kode Anda dicek keluar ke C:\agent\_work\1\s\tools dan C:\agent\_work\1\s\code.

    Catatan

    Jika tidak path ditentukan dalam checkout langkah, nama repositori digunakan untuk folder, bukan repository nilai yang digunakan untuk mereferensikan repositori dalam checkout langkah.

path Jika ditentukan untuk langkahcheckout, jalur tersebut digunakan, relatif terhadap (Agent.BuildDirectory).

Catatan

Jika Anda menggunakan jalur default, menambahkan langkah repositori checkout kedua mengubah jalur default kode untuk repositori pertama. Misalnya, kode untuk repositori bernama tools akan diperiksa ke C:\agent\_work\1\s kapan tools adalah satu-satunya repositori, tetapi jika repositori kedua ditambahkan, tools maka akan diperiksa ke C:\agent\_work\1\s\tools. Jika Anda memiliki langkah-langkah yang bergantung pada kode sumber yang berada di lokasi asli, langkah-langkah tersebut harus diperbarui.

Memeriksa ref tertentu

Cabang default dicek keluar kecuali Anda menunjuk ref tertentu.

Jika Anda menggunakan sintaksis sebaris, tentukan ref dengan menambahkan @<ref>. Misalnya:

- 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.

Saat menggunakan sumber daya repositori, tentukan ref menggunakan ref properti . Contoh berikut memeriksa features/tools/ cabang repositori yang ditunjuk.

resources:
  repositories:
  - repository: MyGitHubRepo
    type: github
    endpoint: MyGitHubServiceConnection
    name: MyGitHubOrgOrUser/MyGitHubRepo
    ref: features/tools

steps:
- checkout: MyGitHubRepo

Contoh berikut menggunakan tag untuk memeriksa penerapan yang dirujuk oleh MyTag.

resources:
  repositories:
  - repository: MyGitHubRepo
    type: github
    endpoint: MyGitHubServiceConnection
    name: MyGitHubOrgOrUser/MyGitHubRepo
    ref: refs/tags/MyTag

steps:
- checkout: MyGitHubRepo

Pemicu

Anda dapat memicu alur saat pembaruan didorong ke self repositori atau ke salah satu repositori yang dideklarasikan sebagai sumber daya. Ini berguna, misalnya, dalam skenario berikut:

  • Anda menggunakan alat atau pustaka dari repositori yang berbeda. Anda ingin menjalankan pengujian untuk aplikasi Anda setiap kali alat atau pustaka diperbarui.
  • Anda menyimpan file YAML Anda di repositori terpisah dari kode aplikasi. Anda ingin memicu alur setiap kali pembaruan didorong ke repositori aplikasi.

Penting

Pemicu sumber daya repositori hanya berfungsi untuk repositori Azure Repos Git di organisasi yang sama dan ketika self jenis repositorinya adalah Azure Repos Git. Mereka tidak berfungsi untuk sumber daya repositori GitHub atau Bitbucket.

batch tidak didukung dalam pemicu sumber daya repositori.

Jika Anda tidak menentukan trigger bagian dalam sumber daya repositori, alur tidak akan dipicu oleh perubahan pada repositori tersebut. Jika Anda menentukan trigger bagian, perilaku untuk pemicu mirip dengan cara kerja pemicu CI untuk repositori mandiri.

Jika Anda menentukan trigger bagian untuk beberapa sumber daya repositori, perubahan pada salah satunya akan memulai eksekusi baru.

Ketika alur dipicu, Azure Pipelines harus menentukan versi file YAML yang harus digunakan dan versi untuk setiap repositori yang harus dicek keluar. Jika perubahan pada self repositori memicu alur, maka penerapan yang memicu alur digunakan untuk menentukan versi file YAML. Jika perubahan pada sumber daya repositori lain memicu alur, maka versi terbaru YAML dari cabangself repositori default digunakan.

Saat pembaruan ke salah satu repositori memicu alur, maka variabel berikut diatur berdasarkan repositori pemicu:

  • Build.Repository.ID
  • Build.Repository.Name
  • Build.Repository.Provider
  • Build.Repository.Uri
  • Build.SourceBranch
  • Build.SourceBranchName
  • Build.SourceVersion
  • Build.SourceVersionMessage

Untuk repositori pemicu, penerapan yang memicu alur menentukan versi kode yang dicek keluar. Untuk repositori lain, ref yang ditentukan dalam YAML untuk sumber daya repositori tersebut menentukan versi default yang dicek keluar.

Pertimbangkan contoh berikut, di mana self repositori berisi file dan repositori A YAML dan B berisi kode sumber tambahan.

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

Tabel berikut menunjukkan versi mana yang dicek keluar untuk setiap repositori oleh alur menggunakan file YAML di atas.

Perubahan dibuat menjadi Alur dipicu Versi YAML Versi self Versi A Versi B
main di self Ya penerapan dari main yang memicu alur penerapan dari main yang memicu alur terbaru dari main terbaru dari release
feature di self Ya penerapan dari feature yang memicu alur penerapan dari feature yang memicu alur terbaru dari main terbaru dari release
main di A Ya terbaru dari main terbaru dari main penerapan dari main yang memicu alur terbaru dari release
main di B Ya terbaru dari main terbaru dari main terbaru dari main penerapan dari main yang memicu alur
release di B Ya terbaru dari main terbaru dari main terbaru dari main penerapan dari release yang memicu alur

Anda juga dapat memicu alur saat membuat atau memperbarui permintaan pull di salah satu repositori. Untuk melakukan ini, deklarasikan sumber daya repositori dalam file YAML seperti dalam contoh di atas, dan konfigurasikan kebijakan cabang di repositori (hanya Azure Repos).

Detail repositori

Saat Anda memeriksa beberapa repositori, beberapa detail tentang self repositori tersedia sebagai variabel. Saat Anda menggunakan pemicu multi-repo, beberapa variabel tersebut memiliki informasi tentang repositori pemicu sebagai gantinya. Detail tentang semua repositori yang digunakan oleh pekerjaan tersedia sebagai objek konteks templat yang disebut resources.repositories.

Misalnya, untuk mendapatkan ref dari repositori non-self , Anda dapat menulis alur seperti ini:

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"

FAQ

Mengapa saya tidak dapat memeriksa repositori dari proyek lain? Sebelumnya hal ini berfungsi.

Azure Pipelines menyediakan cakupan otorisasi pekerjaan Batasi pada pengaturan proyek saat ini, yang saat diaktifkan, tidak mengizinkan alur untuk mengakses sumber daya di luar proyek yang berisi alur. Pengaturan ini dapat diatur pada tingkat organisasi atau proyek. Jika pengaturan ini diaktifkan, Anda tidak bisa memeriksa repositori di proyek lain kecuali Anda secara eksplisit memberikan akses. Untuk informasi selengkapnya, harap lihat Otorisasi.

Mengapa saya diminta untuk mengotorisasi sumber daya saat pertama kali mencoba memeriksa repositori yang berbeda?

Saat Anda memeriksa repositori Azure Repos Git selain yang berisi alur, Anda mungkin akan diminta untuk mengotorisasi akses ke sumber daya tersebut sebelum alur berjalan untuk pertama kalinya. Perintah ini akan ditampilkan di halaman ringkasan eksekusi alur.

This pipeline needs permission to access a resource

Authorize resource

Pilih Tampilkan atau Otorisasi sumber daya, dan ikuti perintah untuk mengotorisasi sumber daya.

Waiting for review

Permit access

Untuk informasi selengkapnya, harap lihat Pemecahan masalah otorisasi untuk alur YAML.