Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
İşlem hattı dekoratörleri, her işin başına ve sonuna adım eklemenize olanak sağlar. İşlem hattı dekoratörünü yazma işlemi, bir kuruluştaki tüm işlem hatları için geçerli olduğundan tek bir tanıma adım eklemekten farklıdır.
Kuruluşunuzun yayınlanabilir tüm derleme çıkışlarında bir virüs tarayıcısı çalıştırması gerektiğini varsayalım. İşlem hattı yazarlarının bu adımı eklemeyi hatırlaması gerekmez. Adımı otomatik olarak ekleyen bir dekoratör oluştururuz. İşlem hattı dekoratörümüz, her işlem hattı işinin sonunda virüs taraması yapacak özel bir görev ekler.
Tip
VSS'den uygulama ve geçiş de dahil olmak üzere en son uzantı geliştirme kılavuzu için. SDK, bkz. Azure DevOps Uzantısı SDK geliştirici portalı.
Uzantıya katkı ekleme
Aşağıdaki örnek , katkı modellerini bildiğinizi varsayar.
-
Uzantı oluşturun.
Uzantınız oluşturulduktan sonra bir
vss-extension.jsondosyanız olur. - Yeni işlem hattı dekoratörümüz için dosyaya
vss-extension.jsonkatkılar ekleyin.
vss-extension.json
{
"manifestVersion": 1,
"contributions": [
{
"id": "my-required-task",
"type": "ms.azure-pipelines.pipeline-decorator",
"targets": [
"ms.azure-pipelines-agent-job.post-job-tasks"
],
"properties": {
"template": "my-decorator.yml"
}
}
],
"files": [
{
"path": "my-decorator.yml",
"addressable": true,
"contentType": "text/plain"
}
]
}
Katkı seçenekleri
Şimdi özelliklere ve ne için kullanıldıklarına göz atalım:
| Property | Description |
|---|---|
id |
Katkı tanımlayıcısı. Bu uzantıdaki katkılar arasında benzersiz olmalıdır. |
type |
Bu katkının bir işlem hattı dekoratörü olduğunu belirtir. dizesi ms.azure-pipelines.pipeline-decoratorolmalıdır. |
targets |
Dekoratörler, işinizden/belirtilen görevden önce, sonra veya her ikisi birden çalıştırılabilir. Kullanılabilir seçenekler için aşağıdaki tabloya bakın. |
properties.template |
(Gerekli) Şablon, uzantınıza dahil edilen ve işlem hattı dekoratörünüzün adımlarını tanımlayan bir YAML dosyasıdır. Uzantı klasörünüzün kökünden göreli bir yoldur. |
properties.targettask |
veya ms.azure-pipelines-agent-job.pre-task-tasks hedefleri için ms.azure-pipelines-agent-job.post-task-tasks kullanılan hedef görev kimliği. Gibi GUID dizesi olmalıdır 89b8ac58-8cb7-4479-a362-1baaacc6c7ad |
Targets
| Target | Description |
|---|---|
ms.azure-pipelines-agent-job.pre-job-tasks |
Klasik derleme veya YAML işlem hattındaki diğer görevlerde çalıştırma. Kaynak kodu kullanıma alma işlemindeki farklılıklar nedeniyle bu hedef, YAML işlem hattında kullanıma alma sonrasında ancak klasik derleme işlem hattında kullanıma almadan önce çalışır. |
ms.azure-pipelines-agent-job.post-checkout-tasks |
Klasik derlemede veya YAML işlem hattında son checkout görevden sonra çalıştırın. |
ms.azure-pipelines-agent-job.post-job-tasks |
Klasik bir derlemede veya YAML işlem hattında diğer görevlerin ardından çalıştırın. |
ms.azure-pipelines-agent-job.pre-task-tasks |
Klasik derlemede veya YAML işlem hattında belirtilen görevden önce çalıştırın. |
ms.azure-pipelines-agent-job.post-task-tasks |
Klasik derlemede veya YAML işlem hattında belirtilen görevden sonra çalıştırın. |
ms.azure-release-pipelines-agent-job.pre-task-tasks |
Klasik RM işlem hattında belirtilen görevden önce komutunu çalıştırın. |
ms.azure-release-pipelines-agent-job.post-task-tasks |
Klasik RM işlem hattında belirtilen görevden sonra çalıştır. |
ms.azure-release-pipelines-agent-job.pre-job-tasks |
Klasik RM işlem hattındaki diğer görevlerde çalıştırma. |
ms.azure-release-pipelines-agent-job.post-job-tasks |
Klasik RM işlem hattındaki diğer görevlerin ardından çalıştırın. |
Note
YAML işlem hattındaki dağıtım işleri yalnızca ve ms.azure-pipelines-agent-job.pre-job-tasks hedeflerini desteklerms.azure-pipelines-agent-job.post-job-tasks.
İşler tüm YAML işlem hattı hedeflerini destekler.
Dağıtım işleri klasik yayın işlem hatlarında desteklenmez.
Bu örnekte, tüm derleme işlerinin sonunda çalıştırmak istediğimiz için kullanırız ms.azure-pipelines-agent-job.post-job-tasks .
Bu uzantı bir işlem hattı dekoratörüne katkıda bulunur. Ardından, dekoratörün davranışını tanımlamak için bir şablon YAML dosyası oluşturacağız.
Dekoratör YAML dosyası oluşturma
Uzantının özelliklerinde "my-decorator.yml" adını seçtik. Katkınızın kökünde bu dosyayı oluşturun. Her işten sonra çalıştırılacak adım kümesini tutar. Temel bir örnekle başlıyoruz ve tam görev için çalışıyoruz.
my-decorator.yml (ilk sürüm)
steps:
- task: CmdLine@2
displayName: 'Run my script (injected from decorator)'
inputs:
script: dir
Note
Hizmet bağlantısı kullanımına sahip işlem hattı dekoratör görevleri klasik yayın işlem hatlarında desteklenmez.
Dekoratör yükleme
Kuruluşunuza işlem hattı dekoratörü eklemek için bir uzantı yüklemeniz gerekir. Yalnızca özel uzantılar işlem hattı dekoratörlerine katkıda bulunabilir. Uzantının kullanılabilmesi için önce uzantının yazılması ve kuruluşunuzla paylaşılması gerekir.
Uzantı kuruluşunuzla paylaşıldıktan sonra uzantıyı arayın ve yükleyin.
Dosyayı kaydedin, ardından uzantıyı derleyip yükleyin.
Temel işlem hattı oluşturma ve çalıştırma.
Dekoratör her işin sonuna betiğimizi dir otomatik olarak ekler.
İşlem hattı çalıştırması aşağıdaki örneğe benzer.
Note
Dekoratör, kuruluştaki her işlem hattındaki her işte çalışır. Sonraki adımlarda dekoratörün ne zaman ve nasıl çalıştığını denetlemek için mantık ekleyeceğiz.
Ekleme koşulları
Örneğimizde, yalnızca derleme çıkışları genel kullanıma sunulacaksa virüs tarayıcısını çalıştırmamız gerekir. Yalnızca varsayılan daldan (genellikle main) derlemelerin yayımlandığını varsayalım.
Dekoratör'leri varsayılan dalda çalışan işlerle sınırlamamız gerekir.
Güncelleştirilmiş dosya şöyle görünür:
my-decorator.yml (düzeltilmiş sürüm)
steps:
- ${{ if eq(resources.repositories['self'].ref, resources.repositories['self'].defaultBranch) }}:
- task: CmdLine@2
displayName: 'Run my script (injected from decorator)'
inputs:
script: dir
Bu genişletilebilirlik noktasının gücünü görmeye başlayabilirsiniz. Çalışma zamanında koşullu olarak adımlar eklemek için geçerli işin bağlamını kullanın. Hangi adımların ne zaman ve ne zaman eklenmiş olduğu hakkında kararlar almak için YAML ifadelerini kullanın. Kullanılabilir verilerin tam listesi için bkz. işlem hattı dekoratör ifadesi bağlamı .
Göz önünde bulundurmamız gereken başka bir koşul daha var: Kullanıcı virüs tarama adımını zaten eklemişse ne olur?
Tekrar çalıştırmakla zaman kaybetmemeliyiz.
Bu basit örnekte, işte bulunan tüm script görevlerin virüs tarayıcısını çalıştırdığını varsayacağız.
(Gerçek bir uygulamada bunun yerine denetlemek için özel bir göreviniz olur.)
Betik görevinin kimliği şeklindedir d9bafed4-0b18-4f58-968d-86655b4d2ce9.
Başka bir betik görevi görürsek, bizimkini eklememeliyiz.
my-decorator.yml (son sürüm)
steps:
- ${{ if and(eq(resources.repositories['self'].ref, resources.repositories['self'].defaultBranch), not(containsValue(job.steps.*.task.id, 'd9bafed4-0b18-4f58-968d-86655b4d2ce9'))) }}:
- task: CmdLine@2
displayName: 'Run my script (injected from decorator)'
inputs:
script: dir
Hedef görev belirtme
Hedef görev kimliğini belirtebilir ve görevleri bu hedef görevden önce veya sonra ekleyebilirsiniz. Hedef görevi belirtmek için vss-extension.json bildirim dosyasını aşağıdaki örnekte olduğu gibi değiştirebilirsiniz.
vss-extension.json
{
"contributions": [
{
"id": "my-required-task",
"type": "ms.azure-pipelines.pipeline-decorator",
"targets": [
"ms.azure-pipelines-agent-job.pre-task-tasks",
"ms.azure-pipelines-agent-job.post-task-tasks"
],
"properties": {
"template": "my-decorator.yml",
"targettask": "target-task-id"
}
}
],
...
}
'targettask' özelliğini ayarladığınızda, hedef görevin kimliğini belirtebilirsiniz. Görevler, belirtilen hedef görevin tüm örneklerinden önce/sonra eklenecektir.
Hedef görev girişlerini ekleme
Eklenen göreve giriş olarak eklemek istediğiniz hedef görevin girişlerinin listesini belirtebilirsiniz.
Bu özellik , özel işlem hattı görevleriyle çalışacak şekilde tasarlanmıştır. İşlem hattı değişkenleri aracılığıyla hedef işlem hattı görev girişlerine erişim sağlamak için tasarlanmamıştır.
Hedef işlem hattı görev girişlerine (ön ekli target_ girişler) erişim elde etmek için eklenen işlem hattı görevi, işlem hattı değişkenlerini değil azure-pipelines-tasks-task-lib yöntemini kullanmalıdır. Örneğin const inputString = tl.getInput('target_targetInput')).
Bunu yapmak için kendi özel işlem hattı görevinizi oluşturabilir ve hedef girişleri orada kullanabilirsiniz. gibi CmdLine@2kullanıma hazır görevlerden birinin işlevselliğine ihtiyacınız varsa , CmdLine@2 görevinin bir kopyasını oluşturabilir ve bunu dekoratör uzantınızla yayımlayabilirsiniz.
Note
Bu işlev yalnızca hedef görevden önce veya sonra eklenen görevler için kullanılabilir.
Bu giriş listesini belirtmek için aşağıdaki örnekte olduğu gibi vss-extension.json bildirim dosyasını değiştirebilirsiniz.
vss-extension.json (eklenen görev girişleri sürümü)
{
"contributions": [
{
"id": "my-required-task",
"type": "ms.azure-pipelines.pipeline-decorator",
"targets": [
"ms.azure-pipelines-agent-job.pre-task-tasks",
"ms.azure-pipelines-agent-job.post-task-tasks"
],
"properties": {
"template": "my-decorator.yml",
"targettask": "target-task-id",
"targettaskinputs": ["target-task-input", "target-task-second-input"]
}
}
],
...
}
'targettaskinputs' özelliğini ayarlayarak, eklemesi beklenen girişlerin listesini belirtebilirsiniz.
Bu girişler göreve "target_" ön eki ile eklenir ve gibi target_target-task-inputeklenen görevde kullanılabilir.
Note
Değişkenlerle gizli dizi değerleri alan veya bunları diğer görevlerden alan hedef görev girişleri eklenmez.
Debug
Dekoratörünüzü oluştururken hata ayıklamanız gerekebilir. Ayrıca, bağlam içinde hangi verilere sahip olduğunuzu da görmek isteyebilirsiniz.
bir işlem hattını kuyruğa aldığınızda değişkenini system.debugContexttrue olarak ayarlayabilirsiniz.
Ardından işlem hattı özet sayfasına bakın.
Aşağıdaki görüntüye benzer bir şey görürsünüz.
Çalışma zamanı değerlerini gösteren ve bağlamın kullanılabilir olduğunu gösteren günlükleri görmek için görevi seçin.