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 Repos Git (git
)
- 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 dengancheckout: self
, kode sumber Anda diperiksa ke direktori yang disebuts
terletak sebagai subfolder .(Agent.BuildDirectory)
Jika(Agent.BuildDirectory)
adalahC:\agent\_work\1
, kode Anda dicek keluar keC:\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 subfolders
di(Agent.BuildDirectory)
. Jika(Agent.BuildDirectory)
adalahC:\agent\_work\1
dan repositori Anda diberi namatools
dancode
, kode Anda dicek keluar keC:\agent\_work\1\s\tools
danC:\agent\_work\1\s\code
.Catatan
Jika tidak
path
ditentukan dalamcheckout
langkah, nama repositori digunakan untuk folder, bukanrepository
nilai yang digunakan untuk mereferensikan repositori dalamcheckout
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 cabang self
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.
- Mengapa saya diminta untuk mengotorisasi sumber daya saat pertama kali mencoba memeriksa repositori yang berbeda?
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.
Pilih Tampilkan atau Otorisasi sumber daya, dan ikuti perintah untuk mengotorisasi sumber daya.
Untuk informasi selengkapnya, harap lihat Pemecahan masalah otorisasi untuk alur YAML.