Google 云函数:CI/CD 用于 Python 3.7 运行时
Google Cloud Functions: CI/CD for Python 3.7 Runtime
在关于测试您的云功能的 docs 结尾处有一个关于 CI/CD 的部分。但是,他们给出的唯一示例是节点。我一直在尝试用 python 3.7 做一些事情但无济于事。
每次推送到 Google Source Cloud 存储库时,我都会设置一个触发器。它是一个多功能项目
├── actions
│ ├── action.json
│ └── main.py
├── cloudbuild.yaml
├── Dockerfile
├── graph
│ ├── main.py
│ └── requirements.txt
└── testing
├── test_actions.py
└── test_graph.py
我已经尝试 example 进行自定义构建。
这是我的 cloudbuild.yml
:
steps:
- name: 'gcr.io/momentum-360/pytest'
这是我的 Dockerfile
:
FROM python:3.7
COPY . /
WORKDIR /
RUN pip install -r graph/requirements.txt
RUN pip install pytest
ENTRYPOINT ["pytest"]
当我在云构建环境(非本地)中 运行 时出现以下错误:
"Missing or insufficient permissions.","grpc_status":7}"
E >
The above exception was the direct cause of the following exception:
testing/test_graph.py:7: in <module>
from graph import main
这意味着我没有足够的权限读取我自己的文件?我完全不确定自己是否做对了。
我认为问题出在您的 cloudbuild.yaml
上。您需要配置它以从 Dockerfile 构建图像。 Check the official Google Cloud Build 了解如何创建构建配置文件。
我一直在尝试这个简单的设置,它对我有用:
├── project
├── cloudbuild.yaml
└── Dockerfile
└── test_sample.py
test_sample.py
的内容:
def inc(x):
return x + 1
def test_answer():
assert inc(3) == 4
这里是 cloudbuild.yaml
:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/pytest-image', '.' ]
images:
- 'gcr.io/$PROJECT_ID/pytest-image'
Dockerfile
,重要的是把自己目录下的工程复制到运行pytest.
FROM python:3.7
COPY . /project
WORKDIR /project
RUN pip install pytest
ENTRYPOINT ["pytest"]
现在,在项目目录中我们构建图像:
gcloud builds submit --config cloudbuild.yaml .
我们拉它:
docker pull gcr.io/$PROJECT_ID/pytest-image:latest
和运行它:
docker run gcr.io/$PROJECT_ID/pytest-image:latest
结果:
============================= test session starts ==============================
platform linux -- Python 3.7.2, pytest-4.2.0, py-1.7.0, pluggy-0.8.1
rootdir: /src, inifile:
collected 1 item
test_sample.py . [100%]
=========================== 1 passed in 0.03 seconds ===========================
在关于测试您的云功能的 docs 结尾处有一个关于 CI/CD 的部分。但是,他们给出的唯一示例是节点。我一直在尝试用 python 3.7 做一些事情但无济于事。
每次推送到 Google Source Cloud 存储库时,我都会设置一个触发器。它是一个多功能项目
├── actions
│ ├── action.json
│ └── main.py
├── cloudbuild.yaml
├── Dockerfile
├── graph
│ ├── main.py
│ └── requirements.txt
└── testing
├── test_actions.py
└── test_graph.py
我已经尝试 example 进行自定义构建。
这是我的 cloudbuild.yml
:
steps:
- name: 'gcr.io/momentum-360/pytest'
这是我的 Dockerfile
:
FROM python:3.7
COPY . /
WORKDIR /
RUN pip install -r graph/requirements.txt
RUN pip install pytest
ENTRYPOINT ["pytest"]
当我在云构建环境(非本地)中 运行 时出现以下错误:
"Missing or insufficient permissions.","grpc_status":7}"
E >
The above exception was the direct cause of the following exception:
testing/test_graph.py:7: in <module>
from graph import main
这意味着我没有足够的权限读取我自己的文件?我完全不确定自己是否做对了。
我认为问题出在您的 cloudbuild.yaml
上。您需要配置它以从 Dockerfile 构建图像。 Check the official Google Cloud Build 了解如何创建构建配置文件。
我一直在尝试这个简单的设置,它对我有用:
├── project
├── cloudbuild.yaml
└── Dockerfile
└── test_sample.py
test_sample.py
的内容:
def inc(x):
return x + 1
def test_answer():
assert inc(3) == 4
这里是 cloudbuild.yaml
:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/pytest-image', '.' ]
images:
- 'gcr.io/$PROJECT_ID/pytest-image'
Dockerfile
,重要的是把自己目录下的工程复制到运行pytest.
FROM python:3.7
COPY . /project
WORKDIR /project
RUN pip install pytest
ENTRYPOINT ["pytest"]
现在,在项目目录中我们构建图像:
gcloud builds submit --config cloudbuild.yaml .
我们拉它:
docker pull gcr.io/$PROJECT_ID/pytest-image:latest
和运行它:
docker run gcr.io/$PROJECT_ID/pytest-image:latest
结果:
============================= test session starts ==============================
platform linux -- Python 3.7.2, pytest-4.2.0, py-1.7.0, pluggy-0.8.1
rootdir: /src, inifile:
collected 1 item
test_sample.py . [100%]
=========================== 1 passed in 0.03 seconds ===========================