Я пытаюсь настроить монорепо с несколькими облачными функциями, написанными на Python. В настоящее время я использую Cloud Build и структуру, подобную этой:
.
├── deployment
│ └── cloudbuild.yaml
├── main.py
└── requirements.txt
, которая с помощью этого кода YAML Cloud Build разворачивается хорошо:
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args: [
'functions', 'deploy', '$_FUNCTION_NAME',
'--trigger-resource', '$_TRIGGER_RESOURCE',
'--trigger-event', '$_TRIGGER_EVENT',
'--runtime', 'python37',
'--memory', '1024MB',
'--region', 'europe-west1'
]
Теперь я намерен перейти к этой структуре:
.
├── first_function
│ ├── main.py
│ └── requirements.txt
├── second_function
│ ├── main.py
│ └── requirements.txt
└── cloudbuild.yaml
С помощью триггеров, настроенных для просмотра изменений в соответствующих подпапках, ввода имени функции в качестве переменной env и развертывания правильной функции. Это идея настройки TF:
resource "google_cloudbuild_trigger" "first_function_trigger" {
project = google_project.my_project.name
name = "trigger-first-function"
description = "Trigger for deploying first function"
trigger_template {
repo_name = google_sourcerepo_repository.functions.name
branch_name = "master"
dir = "first_function/**"
}
substitutions = {
_TRIGGER_RESOURCE = google_storage_bucket.my_bucket.name
_TRIGGER_EVENT = "google.storage.object.finalize"
_FUNCTION_NAME = "first_function"
}
filename = "cloudbuild.yaml"
}
Однако, здесь есть одна загвоздка:
Все договоренности с указанием --source
в команде gcloud functions deploy
, просто продолжайте давать мне ошибки например:
ОШИБКА: (gcloud.functions.deploy) аргумент --source
: Указанный каталог не существует
Эта ошибка возникает при попытке использовать следующие значения:
1. --source=.
2. --source=./first_function
3. --source=./first_function/
Номер три работает локально, когда gcloud functions deploy
вызывается из папки root. Я читал о подходе указания хранилища в GCP - но это дополнительная операция загрузки данных, нет? Исходный код уже там - это триггер для изменений в хранилище.
Когда не определено --source
, я получаю эту ошибку:
ОШИБКА: ( gcloud.functions.deploy) OperationError: code = 3, message = Сборка не удалась: подробности ошибки сборки недоступны
Я знаю, что Cloud Build - довольно молодая служба, которая меняется очень быстро, но есть способ упорядочить папки или настроить YAML для облачной сборки, чтобы функции были развернуты правильно? Я действительно не хочу создавать отдельный репозиторий для каждой функции из 100 строк.