使用Gitlab CI在App Engine上持续部署失败,没有错误

时间:2016-10-19 09:07:55

标签: git google-app-engine continuous-integration continuous-deployment gitlab-ci

我目前正致力于将Web应用程序(服务器Python,前端Node.js)持续部署到Google App Engine。当应用程序被推送到开发或主服务器时,CI服务器分为四个阶段:安装依赖项,构建,测试,部署。在这些步骤中没有错误。在推动开发时,它应该在开发版本上的GAE上传而不迁移流量。推送master时,它应该在prod版本上的GAE上传并自动迁移流量。

我写了一些非常类似于使用TravisCI和CircleCI在GAE上进行持续部署的Google文档,但我可以看到有关App Engine上提供的文件的奇怪行为。

我所说的奇怪的行为是在使用命令部署到GAE时:

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

我可以在GAE上看到dev版本更新,并且所提供的文件不一样,但有时它对应于好的文件,有时它对应于(非常)旧的提交,并不总是相同的,具有几个星期前被推了。无论如何,deploy命令的输出(带有调试级别)表示有时某些静态文件被“跳过”,有时则没有。我知道,在部署到现有版本时,App Engine会识别哪些文件已被修改并应该上传。不幸的是,例如,当我修改单个字符时,该文件并不总是被视为已修改且未上载。

在尝试查找问题时,我看到文件已上传到Google云端存储中的存储桶中,并使用sha1sum重命名。 在CI服务器上,关于静态文件的“部署”阶段的输出表明它已经很好地上传,当我查看存储桶中的上传文件时,它是好的版本。对我的我来说,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]

最近,我发现以前版本的所有文件都在同一个存储桶中。这些文件之间的冲突最终可以解释所有遇到的问题和着名的奇怪行为。例如,当我给命令deploy提供一个空桶(使用--bucket选项)时,似乎第一次部署成功,但不是第二次部署和其他部署......

以下是我的.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

我的问题是:

  • 是否可以在App Engine上进行持续部署,只有两个版本的dev和prod?或者我应该为每次提交创建一个新版本吗?
  • 谷歌存储行为被视为正常吗?我认为应该从存储桶中删除旧文件,但事实并非如此。

我很确定GitLab CI会将好文件发送到App Engine,所以我认为问题不在这里。 欢迎提出所有建议/建议。

提前谢谢!

卢瓦克

0 个答案:

没有答案