在 bitbucket 管道中 gcloud 更新容器映像后,在部署后加载 symfony 迁移时出现问题

问题描述

我正在尝试在 bitbucket 管道中设置持续部署管道。以下是管道代码

export GCLOUD_API_KEY_FILE=~/.gcloud-api-key.json
echo $GOOGLE_CONTAINER_REGISTRY_KEY | base64 -d > $GCLOUD_API_KEY_FILE
gcloud auth activate-service-account --key-file $GCLOUD_API_KEY_FILE
gcloud auth configure-docker --quiet

export DOCKER_IMAGE_NAME=eu.gcr.io/project-name/image-name:$BITBUCKET_COMMIT
docker build -t $DOCKER_IMAGE_NAME -f docker/beta/Dockerfile .
docker push $DOCKER_IMAGE_NAME

gcloud config set project project-name
gcloud config set compute/zone europe-west3-a

gcloud compute instances update-container instance-name --container-image $DOCKER_IMAGE_NAME


/bin/bash ./scripts/deploy/beta/test.sh

在 test.sh 中,我检查 gcloud 实例 ssh 是否已启动,如果已启动,则执行部署后脚本:

test.sh

COUNTER=12
POST_DEPLOY="docker exec klt-container-vgpx /application/scripts/deploy/beta/post-deploy.sh"

while [ $COUNTER -gt 0 ]
do
  gcloud compute ssh --verbosity=error --zone="europe-west3-a"  "container-registry-and-compute@instance-name" --command="echo instance Now up"
  if [ $? -eq 0 ]
  then
    gcloud compute ssh container-registry-and-compute@instance-name --verbosity=info --command="$POST_DEPLOY"
    exit 0
  fi

  sleep 10s

  COUNTER=$((COUNTER-1))
done

echo "ERROR: VM instance SSH service is not available"
exit 1 

部署后.sh

#!/bin/sh

#Creates database,loads migrations and fixtures
/application/bin/console doctrine:database:drop --if-exists --force --env=dev
/application/bin/console doctrine:database:create --env=dev
/application/bin/console doctrine:schema:create --env=dev
/application/bin/console doctrine:migrations:migrate --no-interaction --env=dev --quiet
/application/bin/console doctrine:fixtures:load --no-interaction --append --env=dev

问题是没有加载迁移和夹具。 Bitbucket 管道成功运行,但没有执行脚本的所有命令。它只是创建数据库和架构。

如果我在没有 gcloud compute instances update-container 命令的情况下启动管道,post-deploy.sh 脚本会成功执行每个命令。

如果我在 gcloud compute instances update-container 命令之后添加 120s 睡眠也能成功,所以我认为在执行脚本时可能所有服务都没有加载,但问题是是,为什么要创建数据库和模式?我可以在 bitbucket 管道中看到以下日志:

Dropped database `name-db` for connection named default
Created database `name-db` for connection named default
 ! [CAUTION] This operation should not be executed in a production environment! 
 Creating database schema...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)