Wpis z mikrobloga

w jaki sposob moge w Gitlab CI cachowac node_modules miedzy roznymi kontenerami? Korzystam obecnie z docker:dind i taski sobie wykonuje w roznych kontenerach, ale to chyba mi uniemozliwa korzystanie z cache... moj .gitlab-ci.yml wyglada mniej wiecej tak:

image: docker/compose:1.29.2

services:
- docker:dind

stages:
- build
- test

frontend-install-dependencies:
image: node:lts-alpine
stage: build
cache:
key: $CI_COMMIT_REF_SLUG-$CI_PROJECT_DIR
paths:
- node_modules/
script:
- yarn install --progress=false
artifacts:
paths:
- node_modules/
only:
changes:
- yarn.lock

frontend-jest-unit-tests:
image: node:lts-alpine
stage: test
script:
- yarn test

I ten yarn test sie wywali, bo tak w zasadzie to w tym frontend-jest-unit-tests NIE BEDZIE tego katalogu z node_modules.... czy moge jakos miedzy tymi taskami korzystac z tego samego kontenera? Ja ten docker:dind wstawilem glownie z tego powodu, ze w samym #cicd wykonuje:
- odpalanie testow w vuej s
- odpalanie testow w java
- buildowanie obrazow #docker

dzieki temu pod kazdego taska moglem miec jakis inny kontener, ale teraz nie wiem czy ja to moge jakos sprytnie polaczyc miedzy soba...

#programowanie #devops #webdev #gitlab #linux
  • 15
@przepyszna_frytka: no zrobiłeś sobie artefakt z node modules to go użyj dodając tam dependencies i needs tak poza tym to nie cachowanie tylko właśnie przekazywanie artefaktów ciebie tu interesuje i tego hasła szukaj w dokumentacji, jeśli chodzi o cache to tego nie robi się na node modules tylko na folderze yarna który się tam tworzy gdzieś chyba w /usr/local/.share/cache/yarn
@przepyszna_frytka: Nalepiej skorzystać z global cache, np. w twoim .gitlab-ci.yml

cache: &globalcache
key:
files:
- package-lock.json
prefix: ${CI
PROJECTNAME}-dependencies
policy: pull
paths:
- node
modules

// w job'ie instalacji node_modules
install:
cache:
<<: *global_cache
policy: pull-push

// reszta jobów będzie miała z defaultu 'pull cache'
@bruuh: to co mówisz zadziała tylko lokalnie bo masz swój cache i poprzednie buuldu dockerów. Każdy agent w gitlabie potrzebuje odtworzyć cache albo odpalić yarn install od zera chociaż raz, a to często najdłuższy krok builda.
@bruuh: no tez sie zastanawiam nad tym, bo testowalem z tym i bez tego -> jesli zostawie ten warunek to faktycznie sie nie wykonuje ten job, ale jesli gdzies w artefaktach sa te node_modules (czyli kiedys wczesniej wykonalem go) to nie narzeka xd
nie wiem jeszcze jak dlugo te artefakty sa wazne i jesli faktycznie by ich zabraklo to sie wywali

bardziej sie zastanawiam co zrobisz z reszta projektu, bo mam
@bruuh: ok dzieki - ale bede mial jedno pytanie co do tego -> jak buildowanie obrazow wspiera pliki .env? Bo tak by zbuildowac obraz to bede w stanie i raczej ogarne, ale sie zastanawialem jak to bedzie dzialac np:
1. mam apke w vue i sobie robie yarn build
2. ten zbuildowany katalog kopiuje do kontenera z nginx i tam serwuje pliki statyczne
3. mam plik .env i tam mam
@przepyszna_frytka: dziwny masz ten dockerfile, niepotrzebne są takie cuda, odpal po prostu job gitlaba od razu na obrazie node:lts i yarn build.. robisz osobne joby build na proda i stage i podajesz im rózne komendy np. w package.json żeby brał sobie odpowiedniego enva z repo .env.stage albo .env.prod itp. i w następnym stepie przekazany przez artefakty folder dist kopiujesz do dockera z nginx
niestety będziesz miał zduplikowane te joby na każde
@bruuh: no to moja apka, ktora pisze z kolega, wiec tak w zasadzie to moge zrobic tak jak mi sie podoba xD ale w sumie to moze pozniej poeksperymentuje z tym CI/CD, bo na razie to ja robie raczej sam etap CI, a CD juz nie

tak czy siak dzieki