Despliegue continuo en App Engine con Gitlab CI Fail sin error

Actualmente estoy trabajando en la implementación continua de una aplicación web (server Python, front Node.js) para Google App Engine. Cuando la aplicación se ejecuta en desarrollo o maestro, el server de CI realiza cuatro etapas: instalar dependencies, comstackr, probar e implementar. No hay error durante estos pasos. Cuando se trata de desarrollar, debe cargarse en GAE en la versión de desarrollo sin migrar el tráfico. Al presionar en el maestro, debe cargarse en GAE en la versión prod y migrar automáticamente el tráfico.

Escribí algo muy similar a la documentation de Google para Implementación continua en GAE con TravisCI y CircleCI, pero puedo observar un comportamiento extraño con respecto a los files que se publican en App Engine.

El extraño comportamiento del que estoy hablando es que cuando se despliega en GAE con el command:

gcloud app deploy app.yaml --no-promote -v dev 

Puedo ver la versión de desarrollador actualizada en GAE, y que los files servidos no son los mismos, pero a veces corresponde a los files buenos, a veces corresponde a una (muy) vieja confirmación, no siempre la misma, que ha sido presionada semanas hace. De todos modos, el resultado del command deploy (con nivel de debugging) dice que a veces algunos files estáticos se "saltan", a veces no. Sé que al implementar en una versión ya existente, App Engine reconoce qué files se modifican y deben cargarse. Lamentablemente, cuando modifico un solo carácter, por ejemplo, el file no siempre se considera modificado y no se carga.

Al tratar de encontrar el problema, vi que los files se cargan en un cubo en Google Cloud Storage y se renombran con el sha1sum. En el server de CI, el resultado de la etapa de "implementación" con respecto a un file estático dice que está bien cargado, y cuando miro el file cargado en el contenedor, es la versión correcta. Para mi, no hay problema en el lado de GitLab.

 DEBUG: Uploading [/builds/apps/ex-app-name/static/main.js] to [2d660f94a0ec70a64892a1539938bf404d4d45f9] INFO: Uploading [/builds/apps/ex-app-name/static/main.js] to [2d660f94a0ec70a64892a1539938bf404d4d45f9] 

Recientemente, descubrí que todos los files de las versiones anteriores están en el mismo cubo. Un conflicto entre estos files podría eventualmente explicar todos los problemas encontrados y el famoso comportamiento extraño. Por ejemplo, cuando doy un cubo vacío al command deploy (con la opción –bucket), parece que el primer deployment tiene éxito, pero no el segundo y los demás …

Aquí está el contenido de mi .gitlab-ci.yml:

 stages: - install - build - test - deploy variables: CI_PROJECT_ID: ex-ci-project-id PROJECT_ID: ex-project-id APP_NAME: ex-app-name image: eu.gcr.io/$CI_PROJECT_ID/$APP_NAME:latest install_dependencies: stage: install script: - pip install -r requirements.txt -t lib - cd client - npm install cache: key: "$CI_PIPELINE_ID/$CI_BUILD_REF_NAME" paths: - client/node_modules - lib build_app: stage: build script: - cd client - npm run build cache: key: "$CI_PIPELINE_ID/$CI_BUILD_REF_NAME" paths: - client/node_modules - static - lib test_app: stage: test script: - cd client - npm test cache: key: "$CI_PIPELINE_ID/$CI_BUILD_REF_NAME" paths: - client/node_modules - static - lib deploy_app_dev: stage: deploy script: - /google-cloud-sdk/bin/gcloud app deploy app.yaml --verbosity=debug --no-promote -v dev environment: development only: - develop cache: key: "$CI_PIPELINE_ID/$CI_BUILD_REF_NAME" paths: - static - lib deploy_app_prod: stage: deploy script: - /google-cloud-sdk/bin/gcloud app deploy app.yaml --verbosity=debug --promote -v prod environment: production only: - master cache: key: "$CI_PIPELINE_ID/$CI_BUILD_REF_NAME" paths: - static - lib 

Mis preguntas son:

  • ¿Es posible realizar una implementación continua en App Engine con solo dos versiones dev y prod? ¿O debería crear una nueva versión para cada compromiso?
  • ¿El comportamiento de almacenamiento de google se considera normal? Pensé que los files viejos deberían eliminarse del cubo, pero ese no es el caso.

Estoy bastante seguro de que GitLab CI envía los buenos files a App Engine, así que no creo que el problema esté aquí. Todas las proposiciones / sugerencias son bienvenidas.

Gracias de antemano !

Loïc

    Intereting Posts