İşlem hattı önbelleğe alma

Azure DevOps Services

İşlem hattı önbelleğe alma, bir çalıştırmadaki çıkışların veya indirilen bağımlılıkların sonraki çalıştırmalarda yeniden kullanılmasına izin vererek derleme süresini kısaltmaya yardımcı olabilir; böylece aynı dosyaları yeniden oluşturma veya yeniden indirme maliyetini azaltabilir veya önleyebilirsiniz. Önbelleğe Alma, her çalıştırmanın başlangıcında aynı bağımlılıkların tekrar tekrar indirildiği senaryolarda özellikle yararlıdır. Bu genellikle yüzlerce veya binlerce ağ çağrısı içeren zaman alan bir işlemdir.

Önbelleğe Alma, önbelleği geri yükleme ve kaydetme süresi sıfırdan çıktıyı yeniden oluşturma süresinden daha kısa olması koşuluyla derleme süresini geliştirmede etkili olabilir. Bu nedenle önbelleğe alma tüm senaryolarda etkili olmayabilir ve aslında derleme süresini olumsuz etkileyebilir.

Önbelleğe Alma şu anda CI ve dağıtım işlerinde desteklenir, ancak klasik sürüm işlerinde desteklenmez.

Yapıtlar ve önbelleğe alma ne zaman kullanılır?

İşlem hattı önbelleğe alma ve işlem hattı yapıtları benzer işlevleri gerçekleştirir, ancak farklı senaryolar için tasarlanmıştır ve birbirinin yerine kullanılmamalıdır.

  • bir işte üretilen belirli dosyaları almanız ve bunları diğer işlerle paylaşmanız gerektiğinde işlem hattı yapıtlarını kullanın (ve bu diğer işler bunlar olmadan büyük olasılıkla başarısız olur).

  • Önceki çalıştırmalardan dosyaları yeniden kullanarak derleme süresini geliştirmek istediğinizde işlem hattı önbelleğe alma özelliğini kullanın (ve bu dosyalara sahip olmaması işin çalışma yeteneğini etkilemez).

Not

İşlem hattı önbelleğe alma ve işlem hattı yapıtları tüm katmanlar için ücretsizdir (ücretsiz ve ücretli). Daha fazla ayrıntı için bkz . Yapıt depolama tüketimi .

Önbellek görevi: nasıl çalışır?

Önbelleğe Alma kullanılarak işlem hattına eklenir:Önbellek görevi. Bu görev diğer görevler gibi çalışır ve işin bölümüne eklenir steps .

Bir çalıştırma sırasında önbellek adımıyla karşılaşıldığında, görev sağlanan girişlere göre önbelleği geri yükler. Önbellek bulunmazsa, adım tamamlanır ve işteki bir sonraki adım çalıştırılır.

İşin tüm adımları çalıştırıldıktan ve başarılı bir iş durumu varsayıldıktan sonra, atlanmamış her "geri yükleme önbelleği" adımı için otomatik olarak özel bir "post-job: Cache" adımı eklenir ve tetikler. Bu adım önbelleği kaydetmekten sorumludur.

Not

Önbellekler sabittir, yani önbellek oluşturulduktan sonra içeriğinin değiştirilemeyeceği anlamına gelir.

Önbellek görevini yapılandırma

Önbellek görevinin iki gerekli bağımsız değişkeni vardır: anahtar ve yol:

  • path: Önbelleğe alınacak klasörün yolu. Mutlak veya göreli bir yol olabilir. Göreli yollar ile $(System.DefaultWorkingDirectory)çözümlenir.

Not

Önbelleğe almak istediğiniz klasörün yolunu depolamak için önceden tanımlanmış değişkenleri kullanabilirsiniz, ancak joker karakterler desteklenmez.

  • key: geri yüklemek veya kaydetmek istediğiniz önbelleğin tanımlayıcısına ayarlanmalıdır. Anahtarlar dize değerlerinin, dosya yollarının veya her kesimin bir karakterle ayrıldığı dosya desenlerinin birleşiminden | oluşur.
  • Dizeler:
    Sabit değer (önbelleğin adı veya araç adı gibi) veya bir ortam değişkeninden alınan (geçerli işletim sistemi veya geçerli iş adı gibi)

  • Dosya yolları:
    İçeriği karma olarak eklenecek belirli bir dosyanın yolu. Bu dosya, görev çalıştırıldığında mevcut olmalıdır. "Dosya yolu gibi görünen" tüm anahtar kesimlerin dosya yolu olarak ele alınacağını unutmayın. Özellikle, bu bir içeren .segmentleri içerir. Bu durum, bu "dosya" mevcut olmadığında görevin başarısız duruma düşmesine neden olabilir.

    İpucu

    Yol benzeri bir dize kesiminin dosya yolu gibi değerlendirilmesini önlemek için, bunu çift tırnak içine alın, örneğin: "my.key" | $(Agent.OS) | key.file

  • Dosya desenleri:
    En az bir dosyayla eşleşmesi gereken glob stili joker karakter deseninin virgülle ayrılmış listesi. Örneğin:

    • **/yarn.lock: sources dizinindeki tüm yarn.lock dosyaları
    • */asset.json, !bin/**: tüm asset.json dosyaları, bin dizininin altındakiler dışında sources dizininin altındaki bir dizinde yer alır

Bir dosya yolu veya dosya deseni tarafından tanımlanan herhangi bir dosyanın içeriği, dinamik bir önbellek anahtarı oluşturmak için karma olarak oluşturulur. Bu, projenizde önbelleğe alınan öğeleri benzersiz olarak tanımlayan dosyalar olduğunda kullanışlıdır. Örneğin, tümü benzersiz bir bağımlılık kümesini temsil ettiğinden, yarn.lock, , Gemfile.lockveya Pipfile.lock gibi package-lock.jsondosyalara genellikle bir önbellek anahtarında başvurulur.

Göreli dosya yolları veya dosya desenleri ile $(System.DefaultWorkingDirectory)çözümlenir.

Örnek:

Yarn tarafından yüklenen bağımlılıkları önbelleğe alma işlemini gösteren bir örnek aşağıda verilmişti:

variables:
  YARN_CACHE_FOLDER: $(Pipeline.Workspace)/s/.yarn

steps:
- task: Cache@2
  inputs:
    key: '"yarn" | "$(Agent.OS)" | yarn.lock'
    restoreKeys: |
       "yarn" | "$(Agent.OS)"
       "yarn"
    path: $(YARN_CACHE_FOLDER)
  displayName: Cache Yarn packages

- script: yarn --frozen-lockfile

Bu örnekte önbellek anahtarı üç bölümden oluşur: statik dize ("yarn"), bu önbellek işletim sistemi başına benzersiz olduğundan işin üzerinde çalıştığı işletim sistemi ve önbellekteki bağımlılık kümesini benzersiz olarak tanımlayan dosyanın karması yarn.lock .

Görev eklendikten sonraki ilk çalıştırmada, bu anahtar tarafından tanımlanan önbellek mevcut olmadığından önbellek adımı "önbellek hatası" bildirir. Son adımdan sonra, içindeki $(Pipeline.Workspace)/s/.yarn dosyalardan bir önbellek oluşturulur ve karşıya yüklenir. Bir sonraki çalıştırmada önbellek adımı bir "önbellek isabeti" bildirir ve önbelleğin içeriği indirilip geri yüklenir.

kullanırken checkout: self, depo için kullanıma alınmış $(Pipeline.Workspace)/solur ve klasörünüz .yarn genellikle deponun kendisinde bulunur.

Not

Pipeline.Workspace , tüm dizinlerin oluşturulduğu işlem hattınızı çalıştıran aracıdaki yerel yoldur. Bu değişken ile aynı değere Agent.BuildDirectorysahiptir.

Bunun bulunduğu depoya .yarn işaret etmesi gereken dışında checkout: self bir şey kullanıyorsanız değişkeni YARN_CACHE_FOLDER güncelleştirdiğinizden emin olun.

Anahtarları geri yükleme

restoreKeys birden çok tam anahtara veya anahtar ön ekine karşı sorgulama yapmak isterse kullanılabilir. Bu, isabet vermemesi durumunda başka bir key anahtara geri dönmek için kullanılır. Geri yükleme anahtarı, ön eke göre bir anahtar arar ve sonuç olarak en son oluşturulan önbellek girdisini verir. İşlem hattı tam eşleşme bulamazsa ancak bunun yerine kısmi önbellek isabeti kullanmak istiyorsa bu yararlı olur. Birden çok geri yükleme anahtarı eklemek için, geri yükleme anahtarını belirtmek için yeni bir satır kullanarak bunları sınırlandırın (daha fazla ayrıntı için örne bakın). Geri yükleme anahtarlarının deneneceği sıra yukarıdan aşağıya doğru olacaktır.

Şirket içinde barındırılan aracıda gerekli yazılım

Arşiv yazılımı / Platform Windows Linux Mac
GNU Tar Required Required Hayır
BSD Tar Hayır Hayır Gerekli
7-Zip Önerilir Hayır Hayır

Yukarıdaki yürütülebilir dosyalar PATH ortam değişkeninde listelenen bir klasörde olmalıdır. Barındırılan aracıların yazılımla birlikte geldiğini, bunun yalnızca şirket içinde barındırılan aracılar için geçerli olduğunu unutmayın.

Örnek:

Aşağıda Yarn tarafından geri yükleme anahtarlarının nasıl kullanılacağına yönelik bir örnek verilmişti:

variables:
  YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn

steps:
- task: Cache@2
  inputs:
    key: '"yarn" | "$(Agent.OS)" | yarn.lock'
    restoreKeys: |
       yarn | "$(Agent.OS)"
       yarn
    path: $(YARN_CACHE_FOLDER)
  displayName: Cache Yarn packages

- script: yarn --frozen-lockfile

Bu örnekte önbellek görevi, anahtarın önbellekte mevcut olup olmadığını bulmaya çalışır. Anahtar önbellekte yoksa, ilk geri yükleme anahtarını yarn | $(Agent.OS)kullanmayı dener. Bu işlem, bu anahtarla tam olarak eşleşen veya bu anahtara ön ek olarak sahip olan tüm anahtarları aramayı dener. Farklı yarn.lock bir karma kesim varsa ön ek isabeti oluşabilir. Örneğin, aşağıdaki anahtar yarn | $(Agent.OS) | old-yarn.lock önbellekte ise ve değerinden old-yarn.lock farklı bir karma yarn.lockdöndürüldüyse, geri yükleme anahtarı kısmi bir isabet verir. İlk geri yükleme anahtarında bir eksik varsa, ile başlayan yarnherhangi bir anahtarı bulmaya çalışacak bir sonraki geri yükleme anahtarını yarn kullanır. Ön ek isabetleri için sonuç, sonuç olarak en son oluşturulan önbellek anahtarını verir.

Not

İşlem hattında bir veya daha fazla önbelleğe alma görevi olabilir. Önbelleğe alma depolama kapasitesinde bir sınır yoktur ve aynı işlem hattındaki işler ve görevler aynı önbelleğe erişip paylaşabilir.

Önbellek yalıtımı ve güvenlik

Farklı işlem hatlarından ve farklı dallardan gelen önbellekler arasında yalıtım sağlamak için, her önbellek kapsam olarak adlandırılan bir mantıksal kapsayıcıya aittir. Kapsamlar, bir işlem hattındaki bir işin farklı bir işlem hattından önbelleklere erişememesini sağlayan bir güvenlik sınırı sağlar ve çekme isteği oluşturan bir iş, çekme isteğinin hedef dalı (aynı işlem hattı için) için önbelleklere okuma erişimine sahiptir, ancak hedef dalın kapsamında önbellek yazamaz (oluşturamaz).

Bir çalıştırma sırasında önbellek adımıyla karşılaşıldığında, anahtar tarafından tanımlanan önbellek sunucudan istenir. Ardından sunucu, işin görünür olduğu kapsamlardan bu anahtara sahip bir önbellek arar ve önbelleği döndürür (varsa). Önbellek kaydetmede (işin sonunda), işlem hattını ve dalı temsil eden kapsama bir önbellek yazılır. Ayrıntılar için aşağıya bakın.

CI, el ile ve zamanlanmış çalıştırmalar

Kapsam Okundu Yaz
Kaynak dal Yes Yes
ana dal (varsayılan dal) Yes Hayır

Çekme isteği çalıştırmaları

Kapsam Okundu Yaz
Kaynak dal Yes Hayır
Hedef dal Yes Hayır
Ara dal (örneğin refs/pull/1/merge) Yes Yes
ana dal (varsayılan dal) Yes Hayır

Çekme isteği çatal çalıştırmaları

Şube Okundu Yaz
Hedef dal Yes Hayır
Ara dal (örneğin refs/pull/1/merge) Yes Yes
ana dal (varsayılan dal) Yes Hayır

İpucu

Önbelleklerin kapsamı zaten bir proje, işlem hattı ve dal olarak belirlenmiş olduğundan, önbellek anahtarına herhangi bir proje, işlem hattı veya dal tanımlayıcısı eklemeye gerek yoktur.

Önbellek geri yüklemesinde koşullandırma

Bazı senaryolarda, önbelleğin başarıyla geri yüklenmesi farklı bir adım kümesinin çalıştırılmasına neden olmalıdır. Örneğin, önbellek geri yüklendiyse bağımlılıkları yükleyen bir adım atlanabilir. Bu, görev girişi kullanılarak cacheHitVar mümkündür. Bu girişin bir ortam değişkeninin adına ayarlanması, önbellek isabeti olduğunda, inexact geri yükleme anahtarı önbellek isabetinde değişkenin olarak ayarlanmasına true neden olur, aksi takdirde olarak ayarlanırfalse. Bu değişkene daha sonra bir adım koşulunda veya bir betiğin içinden başvurulabilir.

Aşağıdaki örnekte, install-deps.sh önbellek geri yüklendiğinde adım atlanır:

steps:
- task: Cache@2
  inputs:
    key: mykey | mylockfile
    restoreKeys: mykey
    path: $(Pipeline.Workspace)/mycache
    cacheHitVar: CACHE_RESTORED

- script: install-deps.sh
  condition: ne(variables.CACHE_RESTORED, 'true')

- script: build.sh

Paketleyici

Bundler kullanan Ruby projelerinde Bundler tarafından kullanılan ortam değişkenini geçersiz kılarak BUNDLE_PATH Bundler'ın Gems'i arayacağı yolu ayarlayın.

Örnek:

variables:
  BUNDLE_PATH: $(Pipeline.Workspace)/.bundle

steps:
- task: Cache@2
  displayName: Bundler caching
  inputs:
    key: 'gems | "$(Agent.OS)" | Gemfile.lock'
    path: $(BUNDLE_PATH)
    restoreKeys: | 
      gems | "$(Agent.OS)"
      gems   

Ccache (C/C++)

Ccache , C/C++ için bir derleyici önbelleğidir. İşlem hattınızda Ccache kullanmak için yüklü olduğundan ve isteğe bağlı olarak cihazınıza eklendiğinden emin olun Ccache (bkz. Ccache çalıştırma modları).PATH Ortam değişkenini CCACHE_DIR altında $(Pipeline.Workspace) bir yol olarak ayarlayın ve bu dizini önbelleğe alın.

Örnek:

variables:
  CCACHE_DIR: $(Pipeline.Workspace)/ccache

steps:
- bash: |
    sudo apt-get install ccache -y    
    echo "##vso[task.prependpath]/usr/lib/ccache"
  displayName: Install ccache and update PATH to use linked versions of gcc, cc, etc

- task: Cache@2
  displayName: Ccache caching
  inputs:
    key: 'ccache | "$(Agent.OS)" | $(Build.SourceVersion)'
    path: $(CCACHE_DIR)
    restoreKeys: | 
      ccache | "$(Agent.OS)"

Daha fazla ayrıntı için bkz . Ccache yapılandırma ayarları .

Docker görüntüleri

Önbelleğe Alma Docker görüntüleri, işlem hattınızı çalıştırmak için gereken süreyi önemli ölçüde azaltır.

variables:
  repository: 'myDockerImage'
  dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
  tag: '$(Build.BuildId)'

pool:
  vmImage: 'ubuntu-latest'
steps:
  - task: Cache@2
    displayName: Cache task
    inputs:
      key: 'docker | "$(Agent.OS)" | cache'
      path: $(Pipeline.Workspace)/docker
      cacheHitVar: CACHE_RESTORED                #Variable to set to 'true' when the cache is restored
    
  - script: |
      docker load -i $(Pipeline.Workspace)/docker/cache.tar
    displayName: Docker restore
    condition: and(not(canceled()), eq(variables.CACHE_RESTORED, 'true'))

  - task: Docker@2
    displayName: 'Build Docker'
    inputs:
      command: 'build'
      repository: '$(repository)'
      dockerfile: '$(dockerfilePath)'
      tags: |
        '$(tag)'

  - script: |
      mkdir -p $(Pipeline.Workspace)/docker
      docker save -o $(Pipeline.Workspace)/docker/cache.tar $(repository):$(tag)
    displayName: Docker save
    condition: and(not(canceled()), not(failed()), ne(variables.CACHE_RESTORED, 'true'))
  • key: (gerekli) - önbellek için benzersiz bir tanımlayıcı.
  • path: (gerekli) - önbelleğe almak istediğiniz klasörün veya dosyanın yolu.

Golang

Golang projeleri için, go.mod dosyasında indirilecek paketleri belirtebilirsiniz. Değişkeniniz GOCACHE henüz ayarlanmadıysa önbelleğin indirilmesi istediğiniz yere ayarlayın.

Örnek:

variables:
  GO_CACHE_DIR: $(Pipeline.Workspace)/.cache/go-build/

steps:
- task: Cache@2
  inputs:
    key: 'go | "$(Agent.OS)" | go.mod'
    restoreKeys: | 
      go | "$(Agent.OS)"
    path: $(GO_CACHE_DIR)
  displayName: Cache GO packages

Gradle

Gradle'ın yerleşik önbelleğe alma desteğinin kullanılması, derleme süresini önemli ölçüde etkileyebilir. Derleme önbelleğini etkinleştirmek için ortam değişkenini GRADLE_USER_HOME altında $(Pipeline.Workspace) bir yol olarak ayarlayın ve ile derlemenizi --build-cache çalıştırın veya dosyanıza gradle.properties ekleyinorg.gradle.caching=true.

Örnek:

variables:
  GRADLE_USER_HOME: $(Pipeline.Workspace)/.gradle

steps:
- task: Cache@2
  inputs:
    key: 'gradle | "$(Agent.OS)" | **/build.gradle.kts' # Swap build.gradle.kts for build.gradle when using Groovy
    restoreKeys: |
      gradle | "$(Agent.OS)"
      gradle
    path: $(GRADLE_USER_HOME)
  displayName: Configure gradle caching

- task: Gradle@2
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: 'build'
    options: '--build-cache'
  displayName: Build

- script: |   
    # stop the Gradle daemon to ensure no files are left open (impacting the save cache operation later)
    ./gradlew --stop    
  displayName: Gradlew stop
  • restoreKeys: Birincil anahtar başarısız olursa geri dönüş anahtarları (İsteğe bağlı)

Not

Önbellekler sabittir; belirli bir kapsam (dal) için belirli bir anahtara sahip bir önbellek oluşturulduktan sonra önbellek güncelleştirilemez. Bu, anahtar sabit bir değerse, aynı dal için sonraki tüm derlemelerin önbelleğin içeriği değişmiş olsa bile önbelleği güncelleştiremeyeceği anlamına gelir. Sabit bir anahtar değeri kullanmak istiyorsanız, bağımsız değişkenini restoreKeys geri dönüş seçeneği olarak kullanmanız gerekir.

Maven

Maven,indirmeleri ve derlenmiş yapıtları depoladığı yerel bir depoya sahiptir. Etkinleştirmek için seçeneğini altında bir yol $(Pipeline.Workspace) olarak ayarlayın maven.repo.local ve bu klasörü önbelleğe alın.

Örnek:

variables:
  MAVEN_CACHE_FOLDER: $(Pipeline.Workspace)/.m2/repository
  MAVEN_OPTS: '-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)'

steps:
- task: Cache@2
  inputs:
    key: 'maven | "$(Agent.OS)" | **/pom.xml'
    restoreKeys: |
      maven | "$(Agent.OS)"
      maven
    path: $(MAVEN_CACHE_FOLDER)
  displayName: Cache Maven local repo

- script: mvn install -B -e

Maven görevi kullanıyorsanız değişkenin üzerine yazıldığından MAVEN_OPTS da geçtiğinden emin olun:

- task: Maven@4
  inputs:
    mavenPomFile: 'pom.xml'
    mavenOptions: '-Xmx3072m $(MAVEN_OPTS)'

.NET/NuGet

NuGet bağımlılıklarını doğrudan proje dosyanızda yönetmek için kullanıyorsanız PackageReferences ve bir packages.lock.json dosyanız varsa, ortam değişkenini altındaki $(UserProfile) bir yola ayarlayarak NUGET_PACKAGES ve bu dizini önbelleğe alarak önbelleğe almayı etkinleştirebilirsiniz. Bağımlılıkları kilitleme hakkında daha fazla bilgi için bkz . Proje dosyalarında paket başvurusu. Birden çok packages.lock.json kullanmak istiyorsanız, değişiklik yapmadan aşağıdaki örneği kullanmaya devam edebilirsiniz. Tüm packages.lock.json dosyalarının içeriği karma olarak oluşturulur ve dosyalardan biri değiştirilirse yeni bir önbellek anahtarı oluşturulur.

Örnek:

variables:
  NUGET_PACKAGES: $(Pipeline.Workspace)/.nuget/packages

steps:
- task: Cache@2
  inputs:
    key: 'nuget | "$(Agent.OS)" | $(Build.SourcesDirectory)/**/packages.lock.json'
    restoreKeys: |
       nuget | "$(Agent.OS)"
       nuget
    path: $(NUGET_PACKAGES)
  displayName: Cache NuGet packages

Node.js/npm

bir Node.js projesinde önbelleğe almayı etkinleştirmenin farklı yolları vardır, ancak önerilen yol npm'nin paylaşılan önbellek dizinini önbelleğe almaktır. Bu dizin npm tarafından yönetilir ve indirilen tüm modüllerin önbelleğe alınmış bir sürümünü içerir. Yükleme sırasında npm, genel npm kayıt defterine veya özel bir kayıt defterine yapılan ağ çağrılarını azaltabilen veya ortadan kaldırabilen modüller için önce bu dizini (varsayılan olarak) denetler.

npm'nin paylaşılan önbellek dizininin varsayılan yolu tüm platformlarda aynı olmadığından, ortam değişkenini npm_config_cache altındaki $(Pipeline.Workspace)bir yola geçersiz kılmanızı öneririz. Bu ayrıca önbelleğin kapsayıcı ve kapsayıcı dışı işlerden erişilebilir olmasını sağlar.

Örnek:

variables:
  npm_config_cache: $(Pipeline.Workspace)/.npm

steps:
- task: Cache@2
  inputs:
    key: 'npm | "$(Agent.OS)" | package-lock.json'
    restoreKeys: |
       npm | "$(Agent.OS)"
    path: $(npm_config_cache)
  displayName: Cache npm

- script: npm ci

Projenizde dosya package-lock.json yoksa, bunun yerine önbellek anahtarı girişindeki dosyaya başvurun package.json .

İpucu

npm ci Tutarlı, yinelenebilir bir modül kümesinin kullanıldığından emin olmak için klasörü sildiğindennode_modules, çağrısı npm ciyaparken önbelleğe almaktan node_modules kaçınmanız gerekir.

Node.js/Yarn

npm'de olduğu gibi Yarn ile yüklenen paketleri önbelleğe almanın farklı yolları vardır. Önerilen yol, Yarn'ın paylaşılan önbellek klasörünü önbelleğe almaktır. Bu dizin Yarn tarafından yönetilir ve indirilen tüm paketlerin önbelleğe alınmış bir sürümünü içerir. Yükleme sırasında Yarn, bu dizini ilk olarak (varsayılan olarak) modüller için denetler ve bu da genel veya özel kayıt defterlerine yönelik ağ çağrılarını azaltabilir veya ortadan kaldırabilir.

Örnek:

variables:
  YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn

steps:
- task: Cache@2
  inputs:
    key: 'yarn | "$(Agent.OS)" | yarn.lock'
    restoreKeys: |
       yarn | "$(Agent.OS)"
       yarn
    path: $(YARN_CACHE_FOLDER)
  displayName: Cache Yarn packages

- script: yarn --frozen-lockfile

Python/Anaconda

Anaconda ortamlarıyla işlem hattı önbelleğinizi ayarlayın:

Örnek

variables:
  CONDA_CACHE_DIR: /usr/share/miniconda/envs

# Add conda to system path
steps:
- script: echo "##vso[task.prependpath]$CONDA/bin"
  displayName: Add conda to PATH

- bash: |
    sudo chown -R $(whoami):$(id -ng) $(CONDA_CACHE_DIR)
  displayName: Fix CONDA_CACHE_DIR directory permissions

- task: Cache@2
  displayName: Use cached Anaconda environment
  inputs:
    key: 'conda | "$(Agent.OS)" | environment.yml'
    restoreKeys: | 
      python | "$(Agent.OS)"
      python
    path: $(CONDA_CACHE_DIR)
    cacheHitVar: CONDA_CACHE_RESTORED

- script: conda env create --quiet --file environment.yml
  displayName: Create Anaconda environment
  condition: eq(variables.CONDA_CACHE_RESTORED, 'false')
  • Windows

    - task: Cache@2
      displayName: Cache Anaconda
      inputs:
        key: 'conda | "$(Agent.OS)" | environment.yml'
        restoreKeys: | 
          python | "$(Agent.OS)"
          python
        path: $(CONDA)/envs
        cacheHitVar: CONDA_CACHE_RESTORED
    
    - script: conda env create --quiet --file environment.yml
      displayName: Create environment
      condition: eq(variables.CONDA_CACHE_RESTORED, 'false')
    

PHP/Composer

Oluşturucu kullanan PHP projeleri için Composer tarafından kullanılan ortam değişkenini COMPOSER_CACHE_DIR geçersiz kılın.

Örnek:

variables:
  COMPOSER_CACHE_DIR: $(Pipeline.Workspace)/.composer

steps:
- task: Cache@2
  inputs:
    key: 'composer | "$(Agent.OS)" | composer.lock'
    restoreKeys: |
      composer | "$(Agent.OS)"
      composer
    path: $(COMPOSER_CACHE_DIR)
  displayName: Cache composer

- script: composer install

Bilinen sorunlar ve geri bildirim

İşlem hattınız için önbelleğe almayı ayarlarken sorunlarla karşılaşıyorsanız depodaki microsoft/azure-pipelines-tasks açık sorunların listesini denetleyin. Sorununuzu listede görmüyorsanız yeni bir sorun oluşturun ve senaryonuz hakkında gerekli bilgileri sağlayın.

Q&A

S: Önbelleği temizleyebilir miyim?

Y: Önbelleğin temizlenmesi şu anda desteklenmiyor. Ancak, mevcut önbellek anahtarınıza dize değişmez değeri (gibi version2) ekleyerek anahtarı mevcut önbelleklerde herhangi bir isabet oluşmasını önleyecek şekilde değiştirebilirsiniz. Örneğin, aşağıdaki önbellek anahtarını aşağıdakinden değiştirin:

key: 'yarn | "$(Agent.OS)" | yarn.lock'

şu şekilde:

key: 'version2 | yarn | "$(Agent.OS)" | yarn.lock'

S: Önbelleğin süresi ne zaman doluyor?

Y: Önbelleklerin süresi yedi günlük etkinlik olmadan sona erer.

S: Önbellek ne zaman karşıya yüklenir?

Y: İşlem hattınızın son adımından sonra önbelleğinizden path bir önbellek oluşturulur ve karşıya yüklenir. Daha fazla ayrıntı için örne bakın.

S: Önbelleğin boyutuyla ilgili bir sınır var mı?

Y: Tek tek önbelleklerin boyutu veya bir kuruluştaki tüm önbelleklerin toplam boyutu üzerinde zorunlu bir sınır yoktur.