在GCP云构建上构建Django项目

时间:2018-12-02 13:57:06

标签: python django google-cloud-platform google-cloud-build

最近,我们开始致力于将已建立的Django项目从Docker堆栈转换为Google App Engine。在途中,Google Cloud Build变得很方便。 Cloudbuild在准备推出时会注意一些事项,特别是应用程序的前端部分。

现在,当涉及到python和Django特定任务时,显而易见的选择是也要使用cloudbuild。因此,我们尝试遵循Google为其官方NPM云构建器(here)解释的模式

我们面临的问题如下。使用官方python映像进行构建时,构建步骤如下设置:

steps:
[...]
   8 - name: 'python:3.7'                                                                                                                               
   9   entrypoint: python3                                                           
  10   args: ['-m', 'pip', 'install', '-r', 'requirements.txt']                      
  11 - name: 'python:3.7'                                                            
  12   entrypoint: python3                                                           
  13   args: ['./manage.py', 'collectstatic', '--noinput']

这对于第一步安装所有要求都很好。 GAE在部署应用程序时也会这么做,但是在上传它们之前,有必要从存储库和已安装的django应用程序 collectstatic

第一步成功完成上述步骤,而第二步失败并出现以下错误:

File "./manage.py", line 14, in <module>
) from exc
ImportError: Couldn't import Django. Are you sure it's installed and 
available on your PYTHONPATH environment variable? Did you forget to 
activate a virtual environment?

有没有更好的方法来解决这种情况?

2 个答案:

答案 0 :(得分:1)

/workspace目录之外的任何内容在构建之间均不会保留,因此您要安装的要求不会进入第二步。来自"Creating Custom Build Steps"

  

自定义构建步骤在安装源/workspace的情况下运行,并在/workspace中某个位置的工作目录下运行。给定构建步骤留在/workspace中的所有文件均可用于其他构建步骤,无论这些步骤是同时运行还是随后运行。

解决此问题的一种方法是将它们安装到当前目录中:

- name: 'python:3.7'                                                                                                                               
  entrypoint: python3                                                               
  args: ['-m', 'pip', 'install', '-t', '.', '-r', 'requirements.txt']                      
- name: 'python:3.7'                                                            
  entrypoint: python3                                                           
  args: ['./manage.py', 'collectstatic', '--noinput']

类似地,还可以创建一个虚拟环境并针对需要安装依赖项的每个步骤激活它。

答案 1 :(得分:1)

无需,无需直接在工作空间文件夹中安装需求软件包。 您可以在安装需求时使用-user 标志。 使用-user 时,它将在构建步骤之间保留软件包。

将软件包直接安装在文件夹中时,您将使用应用程序部署上传软件包,从而使上传的内容超出了需要。

您可以使用类似这样的东西。

- name: 'python:3.7'
  entrypoint: python3
  args: ['-m', 'pip', 'install','-r','requirements.txt', '--user']
  id: pip_install
- name: 'python:3.7'                                                            
  entrypoint: python3                                                           
  args: ['./manage.py', 'collectstatic', '--noinput']
  waitFor:
      - pip_install