Back to Question Center
0

Come ottimizzare i corridori di elementi di configurazione basati su Docker con cache di pacchetti condivisi            Come ottimizzare i corridori di elementi di configurazione basati su Docker con cache di pacchetti condivisi Argomenti correlati: Larav

1 answers:
Come ottimizzare i corridori di elementi di configurazione basati su Docker con cache di pacchetti condivisi

In Unleashed Technologies utilizziamo Gitlab CI con i navigatori Docker per i nostri test di integrazione continua. Semalt ha compiuto uno sforzo significativo per accelerare le velocità di esecuzione della costruzione. Una delle ottimizzazioni che abbiamo fatto è stata la condivisione di un volume di cache su tutti i lavori di CI, consentendo loro di condividere file come le cache di download dei pacchetti.

Configurare il Docker runner era davvero semplice: abbiamo semplicemente abbandonato volumi = ["/ srv / cache: / cache: rw"] nel nostro file config.toml :

     concurrent = 6check_interval = 0[[Corridori]]name = "ut-ci01"url = "https://gitlab.example.com/"token = "xxxxxxxxxxxxx"executor = "finestra mobile"[Runners.docker]tls_verify = falseimage = "unleashed / php: 7.1"privilegiato = falsodisable_cache = falsevolumes = ["/ srv / cache: / cache: rw"][Runners.cache]    

Di conseguenza, tutti i lavori CI avranno una directory / cache disponibile (che è mappata a / srv / cache sull'host Docker).

Il passo successivo era fare in modo che i gestori di pacchetti usassero questa directory della cache ogni volta che i lavori eseguivano comandi come installazione di composer o installazione di filato . Fortunatamente, questi gestori di pacchetti ci permettono di configurare le loro directory cache usando le variabili d'ambiente:

  • Compositore: COMPOSER_CACHE_DIR
  • Yarn: YARN_CACHE_FOLDER
  • npm: NPM_CONFIG_CACHE
  • pergola: bower_storage__packages
  • RubyGems: GEM_SPEC_CACHE
  • pip: PIP_DOWNLOAD_CACHE

Quindi abbiamo semplicemente aggiunto queste direttive ENV nel Dockerfile s per le nostre immagini di base:

     ENV COMPOSER_CACHE_DIR / cache / compositoreENV YARN_CACHE_FOLDER / cache / filatoENV NPM_CONFIG_CACHE / cache / npmENV bower_storage__packages / cache / bowerENV GEM_SPEC_CACHE / cache / gemENV PIP_DOWNLOAD_CACHE / cache / pip    

Ora, ogni volta che un lavoro ha bisogno di un pacchetto installato, verrà estratto dalla nostra cache locale anziché scaricato da un server remoto! Ciò fornisce un notevole miglioramento della velocità per le nostre build.


Questo suggerimento rapido è stato originariamente pubblicato sul blog di Semalt e ripubblicato qui con il permesso dell'autore.

February 28, 2018