Aracılığıyla paylaş


İşlem hattınızdaki işleri belirtin

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

İşlem hattınızı işler halinde düzenleyebilirsiniz. Her işlem hattının en az bir işi vardır. İş, birim olarak sıralı olarak çalışan bir dizi adımdır. Başka bir deyişle, çalışma, zamanlanabilen en küçük iş birimidir.

İşlem hattını oluşturan temel kavramlar ve bileşenler hakkında bilgi edinmek için bkz . Yeni Azure Pipelines kullanıcıları için temel kavramlar.

Azure Pipelines, YAML işlem hatları için iş önceliğini desteklemez. İşlerin ne zaman çalıştırılacağını denetlemek için koşulları ve bağımlılıkları belirtebilirsiniz.

Tek bir iş tanımlama

En basit durumda işlem hattının tek bir işi vardır. Bu durumda, bir job kullanmadıkça anahtar sözcüğünü açıkça kullanmanız gerekmez. YAML dosyanızdaki adımları doğrudan belirtebilirsiniz.

Bu YAML dosyası, Microsoft tarafından barındırılan bir aracıda görevi çalıştırır ve çıktılar.

pool:
  vmImage: 'ubuntu-latest'
steps:
- bash: echo "Hello world"

Bu işte daha fazla özellik belirtmek isteyebilirsiniz. Bu durumda anahtar sözcüğünü job kullanabilirsiniz.

jobs:
- job: myJob
  timeoutInMinutes: 10
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - bash: echo "Hello world"

İşlem hattınızın birden çok işi olabilir. Bu durumda anahtar sözcüğünü jobs kullanın.

jobs:
- job: A
  steps:
  - bash: echo "A"

- job: B
  steps:
  - bash: echo "B"

İşlem hattınızın birden çok aşaması olabilir ve her birinin birden çok işi olabilir. Bu durumda anahtar sözcüğünü stages kullanın.

stages:
- stage: A
  jobs:
  - job: A1
  - job: A2

- stage: B
  jobs:
  - job: B1
  - job: B2

İş belirtmek için tam söz dizimi şöyledir:

- job: string  # name of the job, A-Z, a-z, 0-9, and underscore
  displayName: string  # friendly name to display in the UI
  dependsOn: string | [ string ]
  condition: string
  strategy:
    parallel: # parallel strategy
    matrix: # matrix strategy
    maxParallel: number # maximum number simultaneous matrix legs to run
    # note: `parallel` and `matrix` are mutually exclusive
    # you may specify one or the other; including both is an error
    # `maxParallel` is only valid with `matrix`
  continueOnError: boolean  # 'true' if future jobs should run even if this job fails; defaults to 'false'
  pool: pool # agent pool
  workspace:
    clean: outputs | resources | all # what to clean up before the job runs
  container: containerReference # container to run this job inside
  timeoutInMinutes: number # how long to run the job before automatically cancelling
  cancelTimeoutInMinutes: number # how much time to give 'run always even if cancelled tasks' before killing them
  variables: { string: string } | [ variable | variableReference ] 
  steps: [ script | bash | pwsh | powershell | checkout | task | templateReference ]
  services: { string: string | container } # container resources to run as a service container

İş belirtmek için tam söz dizimi şöyledir:

- job: string  # name of the job, A-Z, a-z, 0-9, and underscore
  displayName: string  # friendly name to display in the UI
  dependsOn: string | [ string ]
  condition: string
  strategy:
    parallel: # parallel strategy
    matrix: # matrix strategy
    maxParallel: number # maximum number simultaneous matrix legs to run
    # note: `parallel` and `matrix` are mutually exclusive
    # you may specify one or the other; including both is an error
    # `maxParallel` is only valid with `matrix`
  continueOnError: boolean  # 'true' if future jobs should run even if this job fails; defaults to 'false'
  pool: pool # agent pool
  workspace:
    clean: outputs | resources | all # what to clean up before the job runs
  container: containerReference # container to run this job inside
  timeoutInMinutes: number # how long to run the job before automatically cancelling
  cancelTimeoutInMinutes: number # how much time to give 'run always even if cancelled tasks' before killing them
  variables: { string: string } | [ variable | variableReference ] 
  steps: [ script | bash | pwsh | powershell | checkout | task | templateReference ]
  services: { string: string | container } # container resources to run as a service container
  uses: # Any resources (repos or pools) required by this job that are not already referenced
    repositories: [ string ] # Repository references to Azure Git repositories
    pools: [ string ] # Pool names, typically when using a matrix strategy for the job

İşinizin birincil amacı uygulamanızı dağıtmaksa (uygulamanızı derlemek veya test etmek değil), dağıtım işi adlı özel bir iş türü kullanabilirsiniz.

Dağıtım işinin söz dizimi şöyledir:

- deployment: string        # instead of job keyword, use deployment keyword
  pool:
    name: string
    demands: string | [ string ]
  environment: string
  strategy:
    runOnce:
      deploy:
        steps:
        - script: echo Hi!

Dağıtım görevleri için adımlar job içinde ekleyebilirsiniz, ancak bunun yerine bir dağıtım işi kullanmanızı öneririz. Kurulum işinin bazı faydaları vardır. Örneğin, dağıttığınız şeyin geçmişini görebilme gibi avantajları içeren bir ortama dağıtabilirsiniz.

İş türleri

İşler, çalıştıkları yere bağlı olarak farklı türlerde olabilir.

  • Temsilci havuzu görevleri, temsilci havuzundaki bir temsilcide çalışır.
  • Sunucu işleri, Azure DevOps Server üzerinde çalışır.
  • Kapsayıcı işleri, bir aracı havuzundaki aracı üzerinde çalışan kapsayıcıda yürütülür. Kapsayıcı seçme hakkında daha fazla bilgi için Kapsayıcı işlerini tanımlama bölümüne bakın.

Ajan havuzu görevleri

Ajan havuzu işleri en yaygın işlerdir. Bu işler, aracı havuzundaki bir aracı üzerinde çalışır. İşin hangi havuzda çalıştırılacağını belirtebilir ve ayrıca bir aracının işinizi çalıştırmak için sahip olması gereken özellikleri belirlemek amacıyla talepler belirleyebilirsiniz. Aracılar Microsoft tarafından barındırılabilir veya kendi sunucusunda barındırılabilir. Daha fazla bilgi için bkz. Azure Pipelines aracısı.

  • Microsoft tarafından barındırılan aracıları kullanırken, işlem hattındaki her görev yeni bir aracı alır.
  • Kendi kendine barındırılan aracıları kullanırken, bir aracının işinizi çalıştırmak için sahip olması gereken özellikleri belirtmek amacıyla gereksinimlerini kullanabilirsiniz. Aracı havuzunuzda işlem hattınızın taleplerine uyan birden fazla aracı olup olmadığına bağlı olarak ardışık işler için aynı aracıyı alabilirsiniz. Havuzunuzda işlem hattının gereksinimlerini karşılayan tek bir aracı varsa, işlem hattı bu aracı kullanılabilir olana kadar bekler.

Notu

Talep ve özellikler, işleri işin gereksinimlerini karşılayan bir aracıyla eşleştirmek amacıyla kendi kendine barındırılan aracılarla kullanılmak üzere tasarlanmıştır. Microsoft tarafından barındırılan aracıları kullanırken, aracı için işin gereksinimleriyle eşleşen bir görüntü seçersiniz. Microsoft tarafından barındırılan bir aracıya özellik eklemek mümkün olsa da, microsoft tarafından barındırılan aracılarla özellikleri kullanmanız gerekmez.

pool:
  name: myPrivateAgents    # your job runs on an agent in this pool
  demands: agent.os -equals Windows_NT    # the agent must have this capability to run the job
steps:
- script: echo hello world

Veya birden çok talep:

pool:
  name: myPrivateAgents
  demands:
  - agent.os -equals Darwin
  - anotherCapability -equals somethingElse
steps:
- script: echo hello world

Aracı özellikleri hakkında daha fazla bilgi edinin.

Sunucu işleri

Sunucu, bir sunucu işinde görevleri düzenler ve yürütür. Sunucu işi için bir aracı veya herhangi bir hedef bilgisayar gerekmez. Bir sunucu işinde şu anda yalnızca birkaç görev destekleniyor. Sunucu işi için en uzun süre 30 gündür.

Aracısız işlerin desteklediği görevler

Şu anda aracısız görevler için doğrudan yalnızca aşağıdaki görevler desteklenmektedir:

Görevler genişletilebilir olduğundan, uzantıları kullanarak daha fazla aracısız görev ekleyebilirsiniz. Aracısız işler için varsayılan zaman aşımı 60 dakikadır.

Sunucu işini belirtmek için tam söz dizimi şöyledir:

jobs:
- job: string
  timeoutInMinutes: number
  cancelTimeoutInMinutes: number
  strategy:
    maxParallel: number
    matrix: { string: { string: string } }

  pool: server # note: the value 'server' is a reserved keyword which indicates this is an agentless job

Basitleştirilmiş söz dizimini de kullanabilirsiniz:

jobs:
- job: string
  pool: server # note: the value 'server' is a reserved keyword which indicates this is an agentless job

Bağımlılıklar

Tek bir aşamada birden çok iş tanımladığınızda, aralarındaki bağımlılıkları belirtebilirsiniz. İşlem hatları, bağımlılıkları olmayan en az bir görev içermelidir. Varsayılan olarak Azure DevOps YAML işlem hattı işleri, dependsOn değeri ayarlanmadığı sürece paralel olarak çalıştırılır.

Notu

Her araç aynı anda sadece bir işi çalıştırabilir. Birden çok işi paralel olarak çalıştırmak için birden çok aracı yapılandırmanız gerekir. Ayrıca yeterli paralel iş gerekir.

Birden çok iş ve bağımlılıklarını tanımlamak için söz dizimi şöyledir:

jobs:
- job: string
  dependsOn: string
  condition: string

Sıralı olarak oluşturulan örnek işler:

jobs:
- job: Debug
  steps:
  - script: echo hello from the Debug build
- job: Release
  dependsOn: Debug
  steps:
  - script: echo hello from the Release build

Paralel olarak çalışan (bağımlılık olmadan) örnek işler:

jobs:
- job: Windows
  pool:
    vmImage: 'windows-latest'
  steps:
  - script: echo hello from Windows
- job: macOS
  pool:
    vmImage: 'macOS-latest'
  steps:
  - script: echo hello from macOS
- job: Linux
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - script: echo hello from Linux

Dağılım örneği:

jobs:
- job: InitialJob
  steps:
  - script: echo hello from initial job
- job: SubsequentA
  dependsOn: InitialJob
  steps:
  - script: echo hello from subsequent A
- job: SubsequentB
  dependsOn: InitialJob
  steps:
  - script: echo hello from subsequent B

Fan-in örneği:

jobs:
- job: InitialA
  steps:
  - script: echo hello from initial A
- job: InitialB
  steps:
  - script: echo hello from initial B
- job: Subsequent
  dependsOn:
  - InitialA
  - InitialB
  steps:
  - script: echo hello from subsequent

Koşullar

Her işin hangi koşullar altında çalıştırılacağını belirtebilirsiniz. Varsayılan olarak, bir iş başka bir işe bağımlı değilse veya bağımlı olduğu tüm işler başarıyla tamamlandıysa çalışır. Önceki bir iş başarısız olsa bile bir işi çalıştırmaya zorlayarak veya özel bir koşul belirterek bu davranışı özelleştirebilirsiniz.

Önceki bir görevin çalıştırılma durumuna göre bir görevi çalıştırma örneği:

jobs:
- job: A
  steps:
  - script: exit 1

- job: B
  dependsOn: A
  condition: failed()
  steps:
  - script: echo this will run when A fails

- job: C
  dependsOn:
  - A
  - B
  condition: succeeded('B')
  steps:
  - script: echo this will run when B runs and succeeds

Özel koşul kullanma örneği:

jobs:
- job: A
  steps:
  - script: echo hello

- job: B
  dependsOn: A
  condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/main'))
  steps:
  - script: echo this only runs for master

Bir işin, önceki bir işte ayarlanan bir çıkış değişkeninin değerine göre çalıştırılmasını belirtebilirsiniz. Bu durumda, yalnızca doğrudan bağımlı işlerde ayarlanan değişkenleri kullanabilirsiniz:

jobs:
- job: A
  steps:
  - script: "echo '##vso[task.setvariable variable=skipsubsequent;isOutput=true]false'"
    name: printvar

- job: B
  condition: and(succeeded(), ne(dependencies.A.outputs['printvar.skipsubsequent'], 'true'))
  dependsOn: A
  steps:
  - script: echo hello from B

Zaman aşımları

İşiniz yanıt vermediğinde veya çok uzun süre beklerken kaynak almaktan kaçınmak için, işinizin ne kadar süreyle çalışabileceğine ilişkin bir sınır ayarlayabilirsiniz. İşi çalıştırma sınırını dakika cinsinden belirtmek için iş zaman aşımı ayarını kullanın. Değeri sıfır olarak ayarlamak, işin çalışmasına izin verir.

  • Kendi sunucusunda barındırılan ajanlarda süresiz
  • Microsoft tarafından barındırılan aracılarda ortak proje ve genel depo ile 360 dakika (6 saat) boyunca
  • Özel bir proje veya özel depoya sahip Microsoft tarafından barındırılan aracılarda 60 dakika boyunca (ek kapasite ödenmediği sürece)

Zaman aşımı süresi, iş çalışmaya başladığında başlar. İşin kuyruğa alındığı veya bir vekil ya da görevli beklediği süreyi içermez.

, timeoutInMinutes iş yürütme süresi için bir sınır ayarlanmasına izin verir. Belirtilmediğinde varsayılan değer 60 dakikadır. 0 belirtildiğinde üst sınır kullanılır.

cancelTimeoutInMinutes, önceki bir görev başarısız olduğunda dağıtım görevinin çalışmaya devam etmeyi sürdürmesi için ayarlandığında, iş iptal süresi için bir sınır belirlenmesine izin verir. Belirtilmediğinde varsayılan değer 5 dakikadır. Değer 1ile 35790 dakika arasında olmalıdır.

jobs:
- job: Test
  timeoutInMinutes: 10 # how long to run the job before automatically cancelling
  cancelTimeoutInMinutes: 2 # how much time to give 'run always even if cancelled tasks' before stopping them

Zaman aşımları aşağıdaki bir öncelik seviyesine sahiptir.

  1. Microsoft tarafından barındırılan aracılarda işler , proje türüne göre ne kadar süreyle çalışabilecekleri ve ücretli paralel iş kullanılarak çalıştırılıp çalıştırılmadıklarıyla sınırlıdır. Microsoft tarafından barındırılan işin zaman aşımı aralığı dolduğunda, iş sonlandırılır. Microsoft tarafından barındırılan aracılarda, işlerde belirtilen iş düzeyi zaman aşımlarından bağımsız olarak işler bu aralıktan daha uzun süre çalışamaz.
  2. İş düzeyinde yapılandırılan zaman aşımı, işin çalışması için en uzun süreyi belirtir. İş düzeyi zaman aşımı aralığı geçtiğinde iş sonlandırılır. İş, Microsoft tarafından barındırılan bir aracıda çalıştırıldığında, iş düzeyi zaman aşımını, yerleşik Microsoft tarafından barındırılan iş düzeyi zaman aşımından daha büyük olarak ayarlamak, işleyişte herhangi bir değişiklik yaratmaz.
  3. Ayrıca her görev için zaman aşımını ayrı ayrı ayarlayabilirsiniz. Bkz . görev denetimi seçenekleri. Görev tamamlanmadan önce iş düzeyi zaman aşımı aralığı ulaşırsa, görev daha uzun bir zaman aşımı aralığıyla yapılandırılmış olsa bile, yürütülmekte olan iş durdurulur.

Çok işli yapılandırma

Oluşturduğunuz tek bir işten, birden çok aracı üzerinde paralel olarak birden çok iş çalıştırabilirsiniz. Bazı Örnekler:

  • Çoklu yapılandırma derlemeleri: Birden çok yapılandırmayı paralel olarak oluşturabilirsiniz. Örneğin, debug ve release platformlarının her ikisinde de x86 ve x64 yapılandırmalar için bir Visual C++ uygulaması oluşturabilirsiniz. Daha fazla bilgi için Visual Studio Derleme - Birden Çok Platform için Birden Çok Yapılandırma konusuna bakın.

  • Çoklu yapılandırma dağıtımları: Birden çok dağıtımı, örneğin farklı coğrafi bölgelere paralel olarak çalıştırabilirsiniz.

  • Çoklu yapılandırma testi: Birden çok yapılandırmayı paralel olarak test edebilirsiniz.

  • Çoklu yapılandırma değişkeni boş olsa bile, çoklu yapılandırma her zaman en az bir iş oluşturur.

Strateji, matrix bir işin farklı değişken kümeleriyle birden çok kez gönderilmesini sağlar. etiketi paralellik maxParallel miktarını kısıtlar. Aşağıdaki iş, belirtilen Konum ve Tarayıcı değerleriyle üç kez yürütülür. Ancak, aynı anda yalnızca iki iş çalışır.

jobs:
- job: Test
  strategy:
    maxParallel: 2
    matrix: 
      US_IE:
        Location: US
        Browser: IE
      US_Chrome:
        Location: US
        Browser: Chrome
      Europe_Chrome:
        Location: Europe
        Browser: Chrome

Notu

Matris yapılandırma adları (örnekteki US_IE gibi) yalnızca temel Latin alfabesi harflerini (A - Z, a - z), sayıları ve alt çizgilerini (_) içermelidir. Bunlar bir harf ile başlamalıdır. Ayrıca, 100 karakter veya daha kısa olmalıdır.

Matris oluşturmak için çıkış değişkenlerini kullanmak da mümkündür. Bu yöntem, bir betik kullanarak matris oluşturmanız gerekiyorsa kullanışlı olabilir.

matrix dizeli bir JSON nesnesi içeren bir çalışma zamanı ifadesi kabul eder. Bu JSON nesnesi genişletildiğinde matris söz dizimine uygun hale gelmesi gerekir. Aşağıdaki örnekte JSON dizesini sabit kodladık, ancak bunu bir betik dili veya komut satırı programıyla oluşturabilirsiniz.

jobs:
- job: generator
  steps:
  - bash: echo "##vso[task.setVariable variable=legs;isOutput=true]{'a':{'myvar':'A'}, 'b':{'myvar':'B'}}"
    name: mtrx
  # This expands to the matrix
  #   a:
  #     myvar: A
  #   b:
  #     myvar: B
- job: runner
  dependsOn: generator
  strategy:
    matrix: $[ dependencies.generator.outputs['mtrx.legs'] ]
  steps:
  - script: echo $(myvar) # echos A or B depending on which leg is running

Dilimleme

Aracı işi, bir test paketini paralel olarak çalıştırmak için kullanılabilir. Örneğin, tek bir ajan üzerinde 1.000 test içeren geniş kapsamlı bir dizi çalıştırabilirsiniz. Alternatif olarak, iki aracı kullanabilir ve her birinde paralel olarak 500 test çalıştırabilirsiniz.

Dilimleme uygulamak için, işteki görevler ait oldukları dilimi anlayacak kadar akıllı olmalıdır.

Visual Studio Test görevi, test dilimlemesi destekleyen bu tür görevlerden biridir. Birden çok aracı yüklediyseniz, Visual Studio Test görevinin bu aracılarda paralel olarak nasıl çalıştırılacağını belirtebilirsiniz.

Strateji, parallel bir işin birçok kez çoğaltılabilmesini sağlar. değişkenler System.JobPositionInPhase ve System.TotalJobsInPhase her işe eklenir. Değişkenler sonrasında betikleriniz içinde işleri işler arasında bölmek için kullanılabilir. Bkz. Aracı işlerini kullanarak paralel ve birden çok yürütme.

Aşağıdaki iş, System.JobPositionInPhase ve System.TotalJobsInPhase değerleri uygun şekilde ayarlanarak beş kez gönderilir.

jobs:
- job: Test
  strategy:
    parallel: 5

İş değişkenleri

YAML kullanıyorsanız, iş üzerinde değişkenler belirtilebilir. Değişkenler, $(variableName) makro söz dizimi kullanılarak görev girişlerine geçirilebilir veya aşama değişkeni kullanılarak bir betik içinde erişilebilir.

Burada, bir işte değişkenleri tanımlama ve bunları görevler içinde kullanma örneği verilmiştir.

variables:
  mySimpleVar: simple var value
  "my.dotted.var": dotted var value
  "my var with spaces": var with spaces value

steps:
- script: echo Input macro = $(mySimpleVar). Env var = %MYSIMPLEVAR%
  condition: eq(variables['agent.os'], 'Windows_NT')
- script: echo Input macro = $(mySimpleVar). Env var = $MYSIMPLEVAR
  condition: in(variables['agent.os'], 'Darwin', 'Linux')
- bash: echo Input macro = $(my.dotted.var). Env var = $MY_DOTTED_VAR
- powershell: Write-Host "Input macro = $(my var with spaces). Env var = $env:MY_VAR_WITH_SPACES"

Koşul kullanma hakkında bilgi için Koşulları belirtme bölümüne bakın.

Çalışma alanı

Ajan havuzu işini çalıştırdığınızda, ajan üzerinde bir çalışma alanı oluşturur. Çalışma alanı, kaynağı indirdiği, adımları çalıştırdığı ve çıkışlar ürettiği bir dizindir. İşinizde Pipeline.Workspace değişkeni kullanılarak çalışma alanı dizinine başvurulabilir. Bunun altında çeşitli alt dizinler oluşturulur:

  • Build.SourcesDirectory , görevlerin uygulamanın kaynak kodunu indirdiği yerdir.
  • Build.ArtifactStagingDirectory görevlerin işlem hattı için gereken yapıtları indirdiği veya yapıtları yayımlanmadan önce yüklediği yerdir.
  • Build.BinariesDirectory, görevlerin çıktısını yazdığı yerdir.
  • Common.TestResultsDirectory, görevlerin test sonuçlarını yükledikleri yerdir.

$(Build.ArtifactStagingDirectory) ve $(Common.TestResultsDirectory) her derlemeden önce her zaman silinir ve yeniden oluşturulur.

Kendinize ait bir aracıda işlem hattı çalıştırdığınızda, varsayılan olarak, ardışık iki çalıştırma arasında $(Build.ArtifactStagingDirectory) ve $(Common.TestResultsDirectory) dışında kalan alt dizinlerin hiçbiri temizlenmez. Sonuç olarak, görevler bunları kullanacak şekilde uygulanırsa, artımlı olarak derlemeler ve dağıtımlar yapabilirsiniz. İş üzerindeki workspace ayarını kullanarak bu davranışı geçersiz kılabilirsiniz.

Önemli

Çalışma alanı temizleme seçenekleri yalnızca kendi barındırdığı ajanlar için geçerlidir. Görevler her zaman Microsoft tarafından barındırılan ajanla yeni bir ajan üzerinde çalıştırılır.

- job: myJob
  workspace:
    clean: outputs | resources | all # what to clean up before the job runs

Seçeneklerden birini belirttiğinizde clean , bunlar aşağıdaki gibi yorumlanır:

  • outputs: Yeni bir iş çalıştırmadan önce silin Build.BinariesDirectory .
  • resources: Yeni bir iş çalıştırmadan önce silin Build.SourcesDirectory .
  • all: Yeni bir iş çalıştırmadan önce dizinin tamamını Pipeline.Workspace silin.
  jobs:
  - deployment: MyDeploy
    pool:
      vmImage: 'ubuntu-latest'
    workspace:
      clean: all
    environment: staging

Notu

Ajanlarınızın özelliklerine ve iş akışı taleplerine bağlı olarak, her iş kendi kendine barındırılan havuzunuzda farklı bir ajana yönlendirilebilir. Sonuç olarak, sonraki işlem hattı çalıştırmaları (veya aynı işlem hattındaki aşamalar veya işler) için yeni bir temsilci edinebilirsiniz, bu nedenle yerine temizliği yapıldığında, bu sonraki çalıştırmaların, işlerin veya aşamaların önceki çalıştırmalardan, işlerden veya aşamalardan gelen çıkışlara erişebilmesi için bir garanti değildir. Bir işlem hattı işini çalıştırmak için hangi aracıların kullanılacağını belirtmek için aracı özelliklerini ve işlem hattı taleplerini yapılandırabilirsiniz. Ancak havuzda talepleri karşılayan tek bir aracı olmadığı sürece, sonraki işlerin önceki işlerle aynı aracıyı kullanmasının garantisi yoktur. Daha fazla bilgi için bkz Talepleri Belirleme.

Temiz çalışma alanına ek olarak, işlem hattı ayarları kullanıcı arabiriminde Temizleme ayarını yapılandırarak temizlemeyi de yapılandırabilirsiniz. Clean ayarı true olduğunda ve varsayılan değeri de budur, bu, işlem hattınızdaki her bir clean: true adımı için belirtmeye eşdeğerdir. clean: truebelirttiğinizde, git getirmeden önce git clean -ffdx ve ardından git reset --hard HEAD çalıştırırsınız. Temizle ayarını yapılandırmak için:

  1. İşlem hattınızı düzenleyin, ...'yi ve ardından Tetikleyiciler'i seçin.

    Tetikleyicileri düzenleme.

  2. YAML'yi seçin, Kaynakları alın ve istediğiniz Temiz ayarını yapılandırın. Varsayılan değer true'dur.

    Temiz ayar.

Nesne indirme

Bu örnek YAML dosyası yapıtı Website yayarlar ve ardından yapıtı $(Pipeline.Workspace) konumuna indirir. Yayınlama adımı yalnızca Derleme adımı başarılı bir şekilde tamamlanırsa çalışır.

# test and upload my code as an artifact named Website
jobs:
- job: Build
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - script: npm test
  - task: PublishPipelineArtifact@1
    inputs:
      artifactName: Website
      targetPath: '$(System.DefaultWorkingDirectory)'

# download the artifact and deploy it only if the build job succeeded
- job: Deploy
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - checkout: none #skip checking out the default repository resource
  - task: DownloadPipelineArtifact@2
    displayName: 'Download Pipeline Artifact'
    inputs:
      artifactName: Website
      targetPath: '$(Pipeline.Workspace)'
  dependsOn: Build
  condition: succeeded()

dependsOn ve koşul kullanımı hakkında bilgi için bkz. Koşulları belirtme.

OAuth belirtecine erişim

Bir görevde çalışan betiklerin geçerli Azure Pipelines OAuth güvenlik jetonuna erişmesine izin verebilirsiniz. Belirteç, Azure Pipelines REST API'sinde kimlik doğrulaması yapmak için kullanılabilir.

OAuth belirteci YAML işlem hatlarında her zaman kullanılabilir. Göreve veya adıma env kullanılarak açıkça eşlenmelidir. Bir örnek aşağıda verilmiştir:

steps:
- powershell: |
    $url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=4.1-preview"
    Write-Host "URL: $url"
    $pipeline = Invoke-RestMethod -Uri $url -Headers @{
      Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
    }
    Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"
  env:
    SYSTEM_ACCESSTOKEN: $(system.accesstoken)

Sırada ne var?