Penembolokan alur

Azure DevOps

Penembolokan alur dapat membantu mengurangi waktu build dengan memungkinkan output atau dependensi yang diunduh dari satu eksekusi untuk digunakan kembali dalam eksekusi nanti, sehingga mengurangi atau menghindari biaya untuk membuat ulang atau mengunduh ulang file yang sama lagi. Penembolokan sangat berguna dalam skenario di mana dependensi yang sama diunduh berulang-ulang di awal setiap eksekusi. Ini sering kali merupakan proses yang memakan waktu yang melibatkan ratusan atau ribuan panggilan jaringan.

Penembolokan dapat efektif untuk meningkatkan waktu build asalkan waktu untuk memulihkan dan menyimpan cache kurang dari waktu untuk menghasilkan output lagi dari awal. Karena itu, penembolokan mungkin tidak efektif dalam semua skenario dan mungkin benar-benar berdampak negatif pada waktu build.

Penembolokan saat ini didukung dalam pekerjaan CI dan penyebaran, tetapi bukan pekerjaan rilis klasik.

Kapan menggunakan artefak versus penembolokan

Penembolokan alur dan artefak alur melakukan fungsi serupa tetapi dirancang untuk skenario yang berbeda dan tidak boleh digunakan secara bergantian.

  • Gunakan artefak alur ketika Anda perlu mengambil file tertentu yang diproduksi dalam satu pekerjaan dan membagikannya dengan pekerjaan lain (dan pekerjaan lain ini kemungkinan akan gagal tanpanya).

  • Gunakan penembolokan alur saat Anda ingin meningkatkan waktu build dengan menggunakan kembali file dari eksekusi sebelumnya (dan tidak memiliki file ini tidak akan memengaruhi kemampuan pekerjaan untuk dijalankan).

Catatan

Penembolokan alur dan artefak alur gratis untuk semua tingkatan (gratis dan berbayar). lihat Konsumsi penyimpanan artefak untuk detail selengkapnya.

Tugas cache: cara kerjanya

Penembolokan ditambahkan ke alur menggunakan tugas Cache. Tugas ini berfungsi seperti tugas lain dan ditambahkan ke bagian steps pekerjaan.

Ketika langkah cache ditemui selama eksekusi, tugas memulihkan cache berdasarkan input yang disediakan. Jika tidak ada cache yang ditemukan, langkah selesai dan langkah berikutnya dalam pekerjaan dijalankan.

Setelah semua langkah dalam pekerjaan telah berjalan dan dengan asumsi status pekerjaan yang berhasil, langkah "Post-job: Cache" khusus secara otomatis ditambahkan dan dipicu untuk setiap langkah "pulihkan cache" yang tidak dilewati. Langkah ini bertanggung jawab untuk menyimpan cache.

Catatan

Cache tidak dapat diubah, yang berarti bahwa setelah cache dibuat, kontennya tidak dapat diubah.

Mengonfigurasi tugas Cache

Tugas Cache memiliki dua argumen yang diperlukan: kunci dan jalur:

  • jalur: jalur folder ke cache. Bisa menjadi jalur absolut atau relatif. Jalur relatif diselesaikan terhadap $(System.DefaultWorkingDirectory).

Catatan

Anda dapat menggunakan variabel yang telah ditentukan sebelumnya untuk menyimpan jalur ke folder yang ingin Anda cache, namun kartubebas tidak didukung.

  • kunci: harus diatur ke pengidentifikasi untuk cache yang ingin Anda pulihkan atau simpan. Kunci terdiri dari kombinasi nilai string, jalur file, atau pola file, di mana setiap segmen dipisahkan oleh | karakter.
  • String:
    Nilai tetap (seperti nama cache atau nama alat) atau diambil dari variabel lingkungan (seperti OS saat ini atau nama pekerjaan saat ini)

  • Jalur file:
    Jalur ke file tertentu yang isinya akan di-hash. File ini harus ada pada saat tugas dijalankan. Perlu diingat bahwa setiap segmen kunci yang "terlihat seperti jalur file" akan diperlakukan seperti jalur file. Secara khusus, ini termasuk segmen yang .berisi . Ini dapat mengakibatkan tugas gagal ketika "file" ini tidak ada.

    Tip

    Untuk menghindari segmen string seperti jalur diperlakukan seperti jalur file, bungkus dengan tanda kutip ganda, misalnya: "my.key" | $(Agent.OS) | key.file

  • Pola file:
    Daftar pola wildcard gaya glob yang dipisahkan koma yang harus cocok dengan setidaknya satu file. Misalnya:

    • **/yarn.lock: semua file yarn.lock di bawah direktori sumber
    • */asset.json, !bin/**: semua file asset.json yang terletak di direktori di bawah direktori sumber, kecuali di bawah direktori bin

Konten file apa pun yang diidentifikasi oleh jalur file atau pola file di-hash untuk menghasilkan kunci cache dinamis. Ini berguna ketika proyek Anda memiliki file yang secara unik mengidentifikasi apa yang sedang di-cache. Misalnya, file seperti package-lock.json, yarn.lock, Gemfile.lock, atau Pipfile.lock biasanya dirujuk dalam kunci cache karena semuanya mewakili sekumpulan dependensi unik.

Jalur file relatif atau pola file diselesaikan terhadap $(System.DefaultWorkingDirectory).

Contoh:

Berikut adalah contoh yang menunjukkan cara menyimpan dependensi yang diinstal oleh Yarn:

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

Dalam contoh ini, kunci cache berisi tiga bagian: string statis ("yarn"), OS tempat pekerjaan berjalan karena cache ini unik per sistem operasi, dan hash yarn.lock file yang secara unik mengidentifikasi serangkaian dependensi dalam cache.

Pada eksekusi pertama setelah tugas ditambahkan, langkah cache akan melaporkan "cache miss" karena cache yang diidentifikasi oleh kunci ini tidak ada. Setelah langkah terakhir, cache akan dibuat dari file di dan diunggah $(Pipeline.Workspace)/s/.yarn . Pada eksekusi berikutnya, langkah cache akan melaporkan "tembolok hit" dan konten cache akan diunduh dan dipulihkan.

Saat menggunakan checkout: self, repositori dicek keluar ke $(Pipeline.Workspace)/s, dan folder Anda .yarn biasanya berada di repositori itu sendiri.

Catatan

Pipeline.Workspace adalah jalur lokal pada agen yang menjalankan alur Anda tempat semua direktori dibuat. Variabel ini memiliki nilai yang sama dengan Agent.BuildDirectory.

Pastikan Anda memperbarui variabel YARN_CACHE_FOLDER jika menggunakan apa pun selain checkout: self karena ini harus menunjuk ke repositori tempat .yarn tinggal.

Memulihkan kunci

restoreKeys dapat digunakan jika seseorang ingin mengkueri beberapa kunci atau awalan kunci yang tepat. Ini digunakan untuk kembali ke kunci lain dalam kasus bahwa key tidak menghasilkan hit. Kunci pemulihan akan mencari kunci dengan awalan dan menghasilkan entri cache terbaru yang dibuat sebagai hasilnya. Ini berguna jika alur tidak dapat menemukan kecocokan yang tepat tetapi ingin menggunakan hit cache parsial sebagai gantinya. Untuk menyisipkan beberapa kunci pemulihan, cukup batasi dengan menggunakan baris baru untuk menunjukkan kunci pemulihan (lihat contoh untuk detail selengkapnya). Urutan kunci pemulihan yang akan dicoba akan berada dari atas ke bawah.

Perangkat lunak yang diperlukan pada agen yang dihost sendiri

Mengarsipkan perangkat lunak / Platform Windows Linux Mac
GNU Tar Wajib Wajib No
BSD Tar Tidak Tidak Diperlukan
7-Zip Disarankan Tidak Tidak

Executable di atas harus berada dalam folder yang tercantum dalam variabel lingkungan PATH. Perlu diingat bahwa agen yang dihosting disertakan dengan perangkat lunak, ini hanya berlaku untuk agen yang dihost sendiri.

Contoh:

Berikut adalah contoh cara menggunakan kunci pemulihan oleh Yarn:

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

Dalam contoh ini, tugas cache mencoba menemukan apakah kunci ada di cache. Jika kunci tidak ada di cache, kunci tersebut mencoba menggunakan kunci yarn | $(Agent.OS)pemulihan pertama . Ini akan mencoba mencari semua kunci yang sama persis dengan kunci tersebut atau memiliki kunci tersebut sebagai awalan. Hit awalan dapat terjadi jika ada segmen hash yang berbeda yarn.lock . Misalnya, jika kunci yarn | $(Agent.OS) | old-yarn.lock berikut berada di cache di mana old-yarn.lock menghasilkan hash yang berbeda dari yarn.lock, kunci pemulihan akan menghasilkan hit parsial. Jika ada kesalahan pada kunci pemulihan pertama, itu kemudian akan menggunakan kunci yarn pemulihan berikutnya yang akan mencoba menemukan kunci apa pun yang dimulai dengan yarn. Untuk hit awalan, hasilnya akan menghasilkan kunci cache yang terakhir dibuat sebagai hasilnya.

Catatan

Alur dapat memiliki satu atau beberapa tugas penembolokan. Tidak ada batasan pada kapasitas penyimpanan penembolokan, dan pekerjaan dan tugas dari alur yang sama dapat mengakses dan berbagi cache yang sama.

Isolasi dan keamanan cache

Untuk memastikan isolasi antara cache dari alur yang berbeda dan cabang yang berbeda, setiap cache termasuk dalam kontainer logis yang disebut cakupan. Cakupan menyediakan batas keamanan yang memastikan pekerjaan dari satu alur tidak dapat mengakses cache dari alur yang berbeda, dan pekerjaan yang membangun PR memiliki akses baca ke cache untuk cabang target PR (untuk alur yang sama), tetapi tidak dapat menulis (membuat) cache di cakupan cabang target.

Ketika langkah cache ditemui selama eksekusi, cache yang diidentifikasi oleh kunci diminta dari server. Server kemudian mencari cache dengan kunci ini dari cakupan yang terlihat oleh pekerjaan, dan mengembalikan cache (jika tersedia). Pada penyimpanan cache (di akhir pekerjaan), cache ditulis ke cakupan yang mewakili alur dan cabang. Baca di bawah ini untuk detail selengkapnya.

CI, manual, dan eksekusi terjadwal

Cakupan Baca Tulis
Cabang sumber Ya Ya
cabang utama (cabang default) Ya Tidak

Permintaan pull berjalan

Cakupan Baca Tulis
Cabang sumber Ya Tidak
Cabang target Ya Tidak
Cabang perantara (seperti refs/pull/1/merge) Ya Ya
cabang utama (cabang default) Ya Tidak

Eksekusi fork permintaan pull

Cabang Baca Tulis
Cabang target Ya Tidak
Cabang perantara (seperti refs/pull/1/merge) Ya Ya
cabang utama (cabang default) Ya Tidak

Tip

Karena cache sudah tercakup ke proyek, alur, dan cabang, tidak perlu menyertakan proyek, alur, atau pengidentifikasi cabang apa pun dalam kunci cache.

Kondisi pada pemulihan cache

Dalam beberapa skenario, pemulihan cache yang berhasil harus menyebabkan serangkaian langkah yang berbeda dijalankan. Misalnya, langkah yang menginstal dependensi dapat dilewati jika cache dipulihkan. Ini dimungkinkan cacheHitVar menggunakan input tugas. Mengatur input ini ke nama variabel lingkungan akan menyebabkan variabel diatur ke true ketika ada hit cache, inexact pada hit cache kunci pemulihan, jika tidak, itu akan diatur ke false. Variabel ini kemudian dapat dirujuk dalam kondisi langkah atau dari dalam skrip.

Dalam contoh berikut, install-deps.sh langkah dilewati saat cache dipulihkan:

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

Bunder

Untuk proyek Ruby menggunakan Bundler, ambil alih variabel lingkungan yang BUNDLE_PATH digunakan oleh Bundler untuk mengatur jalur Bundler akan mencari Gem.

Contoh:

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 adalah cache pengkompilasi untuk C/C++. Untuk menggunakan Ccache di alur Anda, pastikan Ccache diinstal, dan secara opsional ditambahkan ke Anda PATH (lihat mode eksekusi Ccache). Atur CCACHE_DIR variabel lingkungan ke jalur di bawah $(Pipeline.Workspace) dan cache direktori ini.

Contoh:

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)"

Lihat Pengaturan konfigurasi Ccache untuk detail selengkapnya.

Citra Docker

Penembolokan gambar Docker secara dramatis mengurangi waktu yang diperlukan untuk menjalankan alur Anda.

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: (wajib) - pengidentifikasi unik untuk cache.
  • path: (wajib) - jalur folder atau file yang ingin Anda cache.

Golang

Untuk proyek Golang, Anda dapat menentukan paket yang akan diunduh dalam file go.mod . Jika variabel Anda GOCACHE belum diatur, atur ke tempat Anda ingin cache diunduh.

Contoh:

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

Menggunakan dukungan penembolokan bawaan Gradle dapat berdampak signifikan pada waktu build. Untuk mengaktifkan cache build, atur GRADLE_USER_HOME variabel lingkungan ke jalur di bawah $(Pipeline.Workspace) dan jalankan build Anda dengan --build-cache atau tambahkan org.gradle.caching=true ke file Anda gradle.properties .

Contoh:

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: Kunci fallback jika kunci utama gagal (Opsional)

Catatan

Cache tidak dapat diubah, setelah cache dengan kunci tertentu dibuat untuk cakupan tertentu (cabang), cache tidak dapat diperbarui. Ini berarti bahwa jika kunci adalah nilai tetap, semua build berikutnya untuk cabang yang sama tidak akan dapat memperbarui cache meskipun konten cache telah berubah. Jika Anda ingin menggunakan nilai kunci tetap, Anda harus menggunakan restoreKeys argumen sebagai opsi fallback.

Maven

Maven memiliki repositori lokal di mana ia menyimpan unduhan dan artefak bawaan. Untuk mengaktifkan, atur opsi ke maven.repo.local jalur di bawah $(Pipeline.Workspace) dan cache folder ini.

Contoh:

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

Jika Anda menggunakan tugas Maven, pastikan juga untuk meneruskan MAVEN_OPTS variabel karena akan ditimpa sebaliknya:

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

.NET/NuGet

Jika Anda menggunakan PackageReferences untuk mengelola dependensi NuGet langsung dalam file proyek Anda dan memiliki packages.lock.json file, Anda dapat mengaktifkan penembolokan dengan mengatur NUGET_PACKAGES variabel lingkungan ke jalur di bawah $(UserProfile) dan penembolokan direktori ini. Lihat Referensi paket dalam file proyek untuk detail selengkapnya tentang cara mengunci dependensi. Jika Anda ingin menggunakan beberapa packages.lock.json, Anda masih dapat menggunakan contoh berikut tanpa membuat perubahan apa pun. Konten semua file packages.lock.json akan di-hash dan jika salah satu file diubah, kunci cache baru akan dibuat.

Contoh:

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

Ada berbagai cara untuk mengaktifkan penembolokan dalam proyek Node.js, tetapi cara yang disarankan adalah dengan menyimpan direktori cache bersama npm. Direktori ini dikelola oleh npm dan berisi versi cache dari semua modul yang diunduh. Selama penginstalan, npm memeriksa direktori ini terlebih dahulu (secara default) untuk modul yang dapat mengurangi atau menghilangkan panggilan jaringan ke registri npm publik atau ke registri privat.

Karena jalur default ke direktori cache bersama npm tidak sama di semua platform, disarankan untuk mengambil npm_config_cache alih variabel lingkungan ke jalur di bawah $(Pipeline.Workspace). Ini juga memastikan cache dapat diakses dari pekerjaan kontainer dan non-kontainer.

Contoh:

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

Jika proyek Anda tidak memiliki package-lock.json file, referensikan package.json file di input kunci cache sebagai gantinya.

Tip

Karena npm ci menghapus node_modules folder untuk memastikan bahwa set modul yang konsisten dan dapat diulang digunakan, Anda harus menghindari penembolokan node_modules saat memanggil npm ci.

Node.js/Yarn

Seperti halnya npm, ada berbagai cara untuk cache paket yang diinstal dengan Yarn. Cara yang disarankan adalah dengan menyimpan folder cache bersama Yarn. Direktori ini dikelola oleh Yarn dan berisi versi cache dari semua paket yang diunduh. Selama penginstalan, Yarn memeriksa direktori ini terlebih dahulu (secara default) untuk modul, yang dapat mengurangi atau menghilangkan panggilan jaringan ke registri publik atau privat.

Contoh:

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

Siapkan penembolokan alur Anda dengan lingkungan Anaconda:

Contoh

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

Untuk proyek PHP menggunakan Composer, ambil alih variabel lingkungan yang COMPOSER_CACHE_DIRdigunakan oleh Composer.

Contoh:

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

Masalah dan umpan balik yang diketahui

Jika Anda mengalami masalah saat menyiapkan penembolokan untuk alur Anda, periksa daftar masalah terbuka di microsoft/azure-pipelines-tasks repositori. Jika Anda tidak melihat masalah Anda, buat masalah baru dan berikan informasi yang diperlukan tentang skenario Anda.

Q&A

T: Dapatkah saya menghapus cache?

A: Menghapus cache saat ini tidak didukung. Namun, Anda dapat menambahkan string literal (seperti version2) ke kunci cache yang ada untuk mengubah kunci dengan cara yang menghindari temuan apa pun pada cache yang ada. Misalnya, ubah kunci cache berikut dari ini:

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

ke berikut ini:

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

T: Kapan cache kedaluwarsa?

A: Cache kedaluwarsa setelah tujuh hari tanpa aktivitas.

T: Kapan cache diunggah?

A: Setelah langkah terakhir alur Anda, cache akan dibuat dari cache path Anda dan diunggah. Lihat contoh untuk detail selengkapnya.

T: Apakah ada batasan ukuran cache?

A: Tidak ada batasan yang diberlakukan pada ukuran cache individual atau ukuran total semua cache dalam organisasi.