Tous les jobs de toutes les branches ont un cache commun. La relance d'un job en dehors d'un pipeline complet crée des effets de bords sur les dépendances utilisées lors des tests.
Le cache de gitlab peut être npmmé pour éviter ce genre d'écueil.
Les essais 60e6de et c645ea ne sont pas concluants.
J'ai eu peur que le cache soit créé avant le git checkout rendant l'accès au script impossible mais ce n'est pas le cas :
Running on runner-tqmcycjh-project-323-concurrent-0 via aubes...Getting source from Git repository 00:06Fetching changes...Reinitialized existing Git repository in /builds/cassiopee/nghyd/.git/Checking out 335f07ad as devel...Removing dist/Removing node_modules/Skipping Git submodules setupRestoring cache 00:40Checking cache for default-8...No URL provided, cache will not be downloaded from shared cache server. Instead a local version of cache will be extracted. Successfully extracted cache
Il est aussi possible de définir cache:key avec le contenu d'un fichier (https://blog.nimbleways.com/let-s-make-faster-gitlab-ci-cd-pipelines/) mais ça ne résoud pas non plus notre problème vu qu'on ne peut pas faire confiance au contenu de "jalhyd_branch" quand on est dans devel et master...
By Dorchies David on 2022-04-22T09:59:32 (imported from GitLab)
Une solution serait de définir 2 jobs dont hériterait les autres : un pour générer un fichier contenant la clé du cache et un pour définir le cache d'après ce fichier.
stages: - jalhyd - install - test - build - clean-stale-branches - deploy-dev - deploy-prod - releases-nightly - releases-versionvariables:# from Gitlab CI/CD environment variables :# - development server :# DEV_HOST : deployment server hostname# DEV_LOGIN : user on deployment server# DEV_PATH : path base on deployment server# - production server :# PROD_HOST : deployment server hostname# PROD_LOGIN : user on deployment server# PROD_PASS : password for user on deployment server# PROD_PATH : path base on deployment server LC_ALL: C.UTF-8 ANDROID_HOME: "/usr/local/android-sdk" # should already be defined in the Docker image ANDROID_SDK_ROOT: "/usr/local/android-sdk" # should already be defined in the Docker image RELEASES_PATH: "$PROD_PATH/cassiopee-releases"before_script: # load private key from GitLab CI variable to deploy on Aubes server - eval $(ssh-agent -s) - ssh-add <(echo "$AUBES_B64_AUTHORIZED_SSH_PRIVATE_KEY" | base64 -d) # load private key from GitLab CI variable to deploy on OVH server - ssh-add <(echo "$OVH_B64_AUTHORIZED_SSH_PRIVATE_KEY" | base64 -d) # disable console prompt for host checking - mkdir -p ~/.ssh - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config#cache:# paths:# - node_modules/.generate_cache_name: script: - JALHYD_BRANCH=`cat jalhyd_branch` - if [ "$CI_COMMIT_REF_NAME" = "master" ]; then JALHYD_BRANCH="master"; fi - if [ "$CI_COMMIT_REF_NAME" = "devel" ]; then JALHYD_BRANCH="devel"; fi - echo $JALHYD_BRANCH > cache-key.set_cache: key: files: cache-keyjalhyd: extends: - .generate_cache_name - .set_cache stage: jalhyd only: - pushes - tags - schedules - web script: - JALHYD_BRANCH=`cat jalhyd_branch` - echo "CI_COMMIT_REF_NAME - $CI_COMMIT_REF_NAME" - if [ "$CI_COMMIT_REF_NAME" = "master" ]; then JALHYD_BRANCH="master"; fi - if [ "$CI_COMMIT_REF_NAME" = "devel" ]; then JALHYD_BRANCH="devel"; fi - echo "Branche JalHyd - $JALHYD_BRANCH" - cd .. - rm -rf jalhyd - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.irstea.fr/cassiopee/jalhyd.git - cd jalhyd - git checkout "$JALHYD_BRANCH" || git checkout master - npm ci --force - npm run buildinstall: extends: - .generate_cache_name - .set_cache stage: install only: - pushes - tags - schedules - web script: - rm -rf node_modules - npm ci --force --unsafe-permtest: extends: - .generate_cache_name - .set_cache stage: test only: - tags - schedules - web script: - npm run e2ebuild: extends: - .generate_cache_name - .set_cache stage: build only: - pushes - tags - schedules - web artifacts: expire_in: 10 min paths: - dist/ script: - npm run build -- --base-href=/cassiopee/$CI_COMMIT_REF_NAME/clean-stale-branches: extends: - .generate_cache_name - .set_cache stage: clean-stale-branches only: - pushes - tags - web script: - ./scripts/remove-stale-branches.sh $DEV_LOGIN@$DEV_HOST $DEV_PATHdeploy-dev: extends: - .generate_cache_name - .set_cache stage: deploy-dev only: - pushes - tags - web dependencies: - build script: # Copie de la branche / du tag - ./scripts/deploy-version.sh $CI_COMMIT_REF_NAME $DEV_LOGIN $DEV_HOST $DEV_PATHdeploy-prod: extends: - .generate_cache_name - .set_cache stage: deploy-prod only: variables: - $CI_COMMIT_REF_NAME == "stable" dependencies: - build script: - ./scripts/deploy-version.sh stable $PROD_LOGIN $PROD_HOST $PROD_PATH $PROD_PASSreleases-nightly: extends: - .generate_cache_name - .set_cache stage: releases-nightly only: - schedules except: # exclude master to apply releases-nightly on devel only - master dependencies: [] script: - ./scripts/release-version.sh nightly $PROD_LOGIN $PROD_HOST $RELEASES_PATHreleases-version: extends: - .generate_cache_name - .set_cache stage: releases-version only: variables: - $CI_COMMIT_REF_NAME =~ /^[0-9]+\.[0-9]+\.[0-9]+$/ # version tag dependencies: [] script: - ./scripts/release-version.sh $CI_COMMIT_REF_NAME $PROD_LOGIN $PROD_HOST $RELEASES_PATH
By Grand Francois on 2022-04-25T12:02:34 (imported from GitLab)