In gitlab-ci
è disponibile un'opzione nel file .gitlab-ci.yml
per eseguire comandi prima dell'esecuzione di uno qualsiasi degli script, denominata before_script
. Gli esempi .gitlab-ci.yml
illustrano l'installazione di programmi ausiliari qui. Tuttavia, quello che ho notato è che queste modifiche non sono memorizzate nella cache in Docker quando si utilizza un esecutore di finestra mobile. Avevo ingenuamente pensato che dopo aver eseguito questi comandi, la finestra mobile avrebbe messo in cache l'immagine, quindi per la prossima esecuzione o test, la finestra mobile caricherà solo l'immagine della cache prodotta dopo before_script
. Ciò accelererebbe drasticamente le build.Esecutore di finestra mobile Gitlab - immagine cache dopo before_script
A titolo di esempio, il mio .gitlab-ci.yml
sembra un po 'come:
image: ubuntu
before_script:
- apt-get update -qq && apt-get install -yqq make ...
build:
script:
- cd project && make
Una possibile soluzione è quella di andare alla macchina corridore e creare un'immagine finestra mobile che può costruire il mio software, senza alcuna altra installazione e quindi fare riferimento nella sezione image
del file yaml. Lo svantaggio di questo è che ogni volta che voglio aggiungere una dipendenza, ho bisogno di accedere alla macchina del corridore e aggiornare l'immagine prima che le build avranno successo. Sarebbe molto più bello se dovessi aggiungere la dipendenza alla fine di apt-get install
e fare in modo che la finestra mobile/gitlab-ci gestisca il caching appropriato.
C'è anche un comando cache
in .gitlab-ci.yml
, che ho provato a installare a untracked: true
, che ho pensato che sarebbe in cache tutto ciò che non era un sottoprodotto del mio progetto, ma non sembrava avere alcun effetto.
C'è un modo per ottenere il comportamento che desidero?
Avevo pensato a questo, e ci sono alcuni aspetti positivi, ma sembra che non sarebbe così difficile eseguire ogni riga di 'before_script' come un comando RUN e quindi avere la finestra mobile fare il caching a quel livello. – Erik
Sì, penso che sia sicuramente possibile, ma la mia migliore ipotesi per la logica alla base sarebbe vicina alla fine della mia risposta, perché se avessi diverse direttive 'before_script' in diversi commit le cose potrebbero diventare un po 'confuse. Anche 'before_script' potrebbe essere usato per fare ogni sorta di cose oltre all'installazione dei pacchetti. Puoi sempre postare sulla loro pagina github se sei curioso. Sono davvero bravi a rispondere. Ciò che ho pubblicato è servito bene al nostro gruppo. – Suever
Ho intenzione di lavorare con qualcosa come descrivi per il momento. – Erik