当我试图在gitlab ci上将我的flask应用程序部署为无服务器的lambda函数时,我收到了以下错误。
Error: spawn python3.8 ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:268:19)
at onErrorNT (internal/child_process.js:470:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
Cleaning up project directory and file based variables
ERROR: Job failed: exit code 1
但是,当我在本地运行命令sls deploy
时,它可以工作。
这是我的serverless.yml
:
service: serverless-flask
plugins:
- serverless-python-requirements
- serverless-wsgi
custom:
wsgi:
app: app.app
packRequirements: false
pythonRequirements:
dockerizePip: non-linux
provider:
name: aws
runtime: python3.8
region: eu-west-3
memorySize: 256
timeout: 15
functions:
app:
handler: wsgi_handler.handler
environment: ${file(env.${opt:stage, self:provider.stage}.json)}
events:
- http: ANY /
- http: ANY /{proxy+}
这是我的gitlab-ci.yml
:
image: ubuntu:latest
stages:
- deploy
dev:
only:
- develop
stage: deploy
before_script:
- apt-get update
- ARG DEBIAN_FRONTEND=noninteractive apt-get install -y software-properties-common && add-apt-repository ppa:deadsnakes/ppa && apt-get update && apt-get install -y python3.8 python3-pip && rm -rf /var/lib/apt/lists/*
- apt update
- apt install -y nodejs npm
- npm install -g serverless
- npm install
script:
- serverless deploy --stage dev
environment: dev
我尝试过使用不同的docker图像,如python、node、ubuntu,但我无法使其工作。
我正在通过github操作进行无服务器部署,但遇到了相同的错误消息。希望这将帮助你,如果没有,我认为它将帮助其他人。
看起来无服务器python需求插件将尝试生成provider.runtime中的任何内容,因此在您(和我的(案例中,python3.8
你可以在serverless.yml中覆盖它,如下所示:
custom:
pythonRequirements:
pythonBin: python
如果你的图像有一个"python"可执行文件,它会使用它,它应该可以工作。我意识到,尽管我已经安装了正确的目标python版本(在我的例子中是actions/setup python(,但插件找不到它,所以我认为它是在单独的地方运行的?
一些关注SO/github问题的人说,他们通过将provider.runtime修改为python3.7或python3.9来解决这个问题,如果他们的映像具有相应的可执行文件,这是有意义的。