Я работаю над развертыванием Google cloud functions
(python) с использованием gitlab.ci
yaml-файлов.
Моя цель - либо обновить уже существующую облачную функцию (удалив и повторно развернув ее), либо развернуть новую функцию на основе имени облачной функции (и региона) в качестве входных аргументов.
Ниже приведен сценарий, который я написал:
#!/usr/bin/env bash
FUNCTION_NAME=$1
REGION=$2
touch functionslist.txt
gcloud beta functions list >> functionslist.txt
isInFile=$(cat functionslist.txt | grep -c FUNCTION_NAME)
if [ $isInFile -eq 0 ]; then
echo "New Cloud Function Name, hence it shall be deployed "
else
echo "Cloud Function Updated, hence it shall be deleted and redeployed"
gcloud beta functions delete ${FUNCTION_NAME} --region${REGION}
fi
Этот скрипт вызывается на следующем этапе развертывания:
deploy:
stage: deploy
image: google/cloud-sdk
script:
- apt-get update && apt-get --only-upgrade install kubectl google-cloud-sdk
- gcloud config set project $GCP_PROJECT_ID
- chmod +x delete_function.sh
- ./delete_function.sh ${FUNCTION_NAME} ${REGION}
- gcloud beta functions deploy ${FUNCTION_NAME} --memory ${MEMORY} --stage-bucket ${STAGE_BUCKET} --region ${REGION} --runtime ${RUNTIME} --trigger-http
Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я запускаю конвейер для обновленной облачной функции, он всегда рассматривает первый случай, поэтому отображается «Новое имя облачной функции, следовательно, оно должно быть развернуто», даже если облачная функция уже существует. Я должен увидеть следующее сообщение: «Облачная функция обновлена, поэтому она должна быть удалена и повторно развернута».
Возможно, сценарий оболочки, который я написал, ошибочен. Любая идея, чтобы решить это.