最近,我们开始致力于将已建立的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?
有没有更好的方法来解决这种情况?
答案 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