¿Cuál es el uso correcto de caching / artefactos en Gitlab CI?

Estoy enfrentando un problema cuando los files en caching no se utilizan en las comstackciones de proyectos. En mi caso, deseo download las dependencies de los compositores en la etapa de compilation y luego agregarlas a la carpeta del proyecto final después de que todas las otras etapas tengan éxito. Pensé que si estableces el atributo de cache en el file .gitlab-ci.yml , se compartirá y se usará en otras etapas también. Pero esto a veces funciona y otras no.

La versión de Gitlab es 9.5.4

Aquí está mi file .gitlab-ci.yml :

 image: ponk/debian:jessie-ssh variables: WEBSERVER: "user@example.com" WEBSERVER_DEPLOY_DIR: "/domains/example.com/web-presentation/deploy/" WEBSERVER_CDN_DIR: "/domains/example.com/web-presentation/cdn/" TEST_VENDOR: '[ "$(ls -A ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA}/vendor)" ]' cache: key: $CI_PIPELINE_ID untracked: true paths: - vendor/ before_script: stages: - build - tests - deploy - post-deploy Build sources: image: ponk/php5.6 stage: build script: # Install composer dependencies - composer -n install --no-progress only: - tags - staging Deploy to Webserver: stage: deploy script: - echo "DEPLOYING TO ... ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA}" - ssh $WEBSERVER mkdir -p ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA} - rsync -rzha app bin vendor www .htaccess ${WEBSERVER}:${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA} - ssh $WEBSERVER '${TEST_VENDOR} && echo "vendor is not empty, build seems ok" || exit 1' - ssh $WEBSERVER [ -f ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA}/vendor/autoload.php ] && echo "vendor/autoload.php exists, build seems ok" || exit 1 - echo "DEPLOYED" only: - tags - staging Post Deploy Link PRODUCTION to Webserver: stage: post-deploy script: - echo "BINDING PRODUCTION" - ssh $WEBSERVER unlink ${WEBSERVER_DEPLOY_DIR}production-latest || true - ssh $WEBSERVER ln -s ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA} ${WEBSERVER_DEPLOY_DIR}production-latest - echo "BOUNDED $CI_COMMIT_SHA -> production-latest" - ssh $WEBSERVER sudo service php5.6-fpm reload environment: name: production url: http://www.example.com only: - tags Post Deploy Link STAGING to Webserver: stage: post-deploy script: - echo "BINDING STAGING" - ssh $WEBSERVER unlink ${WEBSERVER_DEPLOY_DIR}staging-latest || true - ssh $WEBSERVER ln -s ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA} ${WEBSERVER_DEPLOY_DIR}staging-latest - echo "BOUNDED ${CI_COMMIT_SHA} -> staging-latest" - ssh $WEBSERVER sudo service php5.6-fpm reload environment: name: staging url: http://staging.example.com only: - staging 

En la documentation de Gitlab dice: la cache is used to specify a list of files and directories which should be cached between jobs.

Por lo que entiendo, configuré la memory caching correctamente: he desmarcado establecido en verdadero, la ruta incluye la carpeta del proveedor y la key está configurada en ID de canalización, que también debería ser igual en otras etapas.

He visto algunas configuraciones que contenían Artifacts , pero a less que lo uses con Dependencies , no debería tener ningún efecto.

No sé lo que estoy haciendo mal. Primero necesito download las dependencies de los compositores para poder copyrlas a través de rsync en la siguiente etapa. ¿Tienes alguna idea / solución? Gracias

Los artefactos deben usarse para poner permanentemente a disposition todos los files que pueda necesitar al final de una canalización, por ejemplo, binarys generados, files requeridos para la próxima etapa de la canalización, informes de cobertura o incluso una image de disco. Pero la memory caching debe usarse para acelerar el process de compilation, por ejemplo, si comstack un binary C / C ++, generalmente tarda mucho time para la primera compilation, pero las comstackciones posteriores suelen ser más rápidas porque no comienza desde cero, por lo que si fueron para almacenar los files temporales hechos por el comstackdor mediante el uso de caching, esto aceleraría la compilation en diferentes tuberías.

Entonces, para responderlo, debe usar artefactos porque parece que necesita ejecutar el compositor en cada canalización, pero desea pasar los files al siguiente trabajo. No necesita definir explícitamente dependencies en su gitlab-ci.yml porque si no se define, cada trabajo extrae todos los artefactos de todos los trabajos anteriores. La memory caching debería funcionar pero no es confiable y es mejor para una configuration en la que mejora pero no es una necesidad.