İş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ği geri yükleme ve kaydetme süresi sıfırdan çıktıyı yeniden oluşturma süresinden azsa, önbelleğe alma, 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.
Not
İşlem hattı önbelleğe alma, hem YAML hem de Klasik işlem hatları için aracı havuzu işlerinde desteklenir. Ancak, Klasik yayın işlem hatlarında 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, Önbellek görevi kullanılarak bir işlem hattına eklenir. 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 verileri 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.lock
veya Pipfile.lock
gibi package-lock.json
dosyalara 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)/s
olur 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.BuildDirectory
sahiptir.
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ı bir anahtarı ön eke göre 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ı göstermek için yeni bir satır kullanarak bunları sınırlandırın (daha fazla ayrıntı için örn. 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, 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.lock
dö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 yarn
herhangi 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 |
main dal |
Yes | Hayır |
master 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 |
main dal |
Yes | Hayır |
master 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 |
main dal |
Yes | Hayır |
master 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 projeleri için Bundler tarafından kullanılan ortam değişkenini geçersiz kılarak BUNDLE_PATH
Bundler'ın Gems'i arama yolunu 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
Docker görüntülerini önbelleğe almak 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ı olmayan 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 ci
yaparken ö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.
Sorular ve Cevaplar
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'
Bunun için:
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.