Как запустить модульный тест python для облачных функций Google с помощью Cloud Builds? - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь построить конвейер CI / CD для моих облачных функций Google. То, что я имею право знать, у меня есть локальная среда разработки с gcloud и git. я пишу свой код в локальной среде и у меня есть файл cloudbuilds.yaml. После написания кода я отправляю его в хранилище исходного кода Google, где у меня есть триггер сборки. Он строит функцию и развертывает ее.

Теперь я хотел бы также иметь несколько тестовых файлов вместе с ней. Это означает, что всякий раз, когда я отправляю sh его в исходный репозиторий, он также должен запускать тесты и создавать мой main. пи файл, а затем разверните его. У меня есть файл cloudbuild.yaml

steps:
- name: 'gcr.io/cloud-builders/gcloud'
  args:
  - functions 
  - deploy
  - FunctionName
  - --runtime=python37
  - --source=.
  - --entry-point=function
  - --trigger-topic=topic_name
  - --region=europe-west3 

1 Ответ

1 голос
/ 04 марта 2020

Вы можете добавить шаг в свой Cloud Build. Я не знаю, как вы выполняете свой тест, но вот пример для запуска вашего скрипта в python3 .7 контексте

- name: 'python:3.7'
  entrypoint: 'bash'
  args:
    - '-c'
    - |
       run the python script that you want
       pip install and others.

Обновление

Добавить этот шаг перед вашей функцией развертывания. Если шаг завершился неудачно (код выхода, отличный от 0), процесс построения облака остановился и развертывание не было выполнено.

Обновление 2

Концепция Cloud Build заключается в следующем. достаточно просто. Вы загружаете контейнер (представлен в name). В контейнере только том /workspace прикреплен и сохраняется от одного шага к следующему.

Эта концепция очень важна. Если вы установили переменную окружения или другое за один шаг, шаг после потеряет этот контекст. Сохраняется только файл /workspace. Следующий шаг - вызов только в том случае, если текущий финиш sh правильно (код выхода = 0).

Когда загружен контейнер, запускается команда. Если вы используете cloud Builder , точка входа по умолчанию вызывается по умолчанию (например, gcloud Cloud Builder автоматически запускает команду gcloud). Затем вам нужно только добавить массив args для отправки в эту точку входа. Пример

- name: 'gcr.io/cloud-builders/gcloud'
  args:
  - functions 
  - list

Эта команда представляет gcloud functions list с gcloud в качестве точки входа и functions и list в качестве аргументов.

Если ваш контейнер не имеет точки входа (например, python контейнер) или, если вы хотите переопределить точку входа, вы можете указать ее с помощью ключевого слова entrypoint. В моем первом примере кода требуется несколько linux концепций. Точка входа bash. Аргумент -c для выполнения команды. Канал |, если разрешить ввод команды из нескольких команд (многострочный).

Если у вас есть только одна команда python для запуска, вы можете сделать так:

- name: 'python:3.7'
  entrypoint: 'python3'
  args:
    - 'test_main.py'
    - '.'

Но написанные вами шаги не сработают. Почему? go вернуться к началу моего объяснения: сохраняется только файл /workspace. Если вы выполняете pip3 install, файлы записываются не в каталог /workspace, а в другое место в системе. Когда вы переключаете шаг, вы теряете этот системный контекст.

Вот почему полезна многострочная команда

- name: 'python:3.7'
  entrypoint: 'bash'
  args:
    - '-c'
    - |
       pip3 install -r requirements.txt
       python3 test_main.py .

Надеюсь, эта помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...