Облачные функции Google: CI / CD для Python 3.7 Runtime - PullRequest
0 голосов
/ 09 февраля 2019

В конце документов по тестированию вашей облачной функции есть раздел на 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

Я попробовал пример , чтобы сделать пользовательскую сборку.

вот мой 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

, что означает, что у меня недостаточно прав для чтения моих собственных файлов?Я не уверен, что делаю все правильно.

1 Ответ

0 голосов
/ 11 февраля 2019

Я думаю, что проблема с вашим cloudbuild.yaml.Вам необходимо настроить его для создания образа из Dockerfile. Проверьте официальный 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 ===========================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...