Есть 2 вещи, которые нельзя смешивать:
- Git
tag
- The Cloud Build
tag
Git tag
это значение, которое вы помещаете в свой репозиторий, чтобы получить код в определенный момент времени. Команда git ls-remote
подходит для этого. Однако тег пуст и ls-remote
принимает URL-адрес ssh://
в качестве имени тега.
Cloud Build tag
, если имя вашего контейнера в док-центре gcr. обычно это gcr.io/<project_id>/<name that you want>
Для решения вашей проблемы у вас есть 2 решения:
- Используйте команду
docker build
. Используйте tag
для именования вашего контейнера и используйте переменную окружения -e GIT_TAG=xxx
для использования в Dockerfile для указания тега git - Используйте конфигурационный файл Cloud Build, по умолчанию
cloudbuild.yaml
и используйте ту же логикус переменной окружения в вашем Dockerfile
. Для передачи GIT_TAG
в Cloud Build используйте переменные подстановки . Вы можете использовать собственную переменную подстановки, которая должна начинаться с подчеркивания, или использовать предопределенную переменную TAG_NAME
. В обоих случаях вы должны указать это при запуске команды Cloud Build
Команда: gcloud builds submit --substitutions=TAG_NAME="test"
или gcloud builds submit --substitutions=_MY_TAG_NAME="test"
cloudbuild.yaml
file
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/my-image', '.', '-e', 'GIT_TAG=$_MY_TAG_NAME']
# my-image is pushed to Container Registry
images:
- 'gcr.io/$PROJECT_ID/my-image'
Вы можете видеть, что командная строка docker build
и определение Cloud Build в точности совпадают.
Кстати, вы можете проверить свою сборку с помощью сборки Docker локально (или в Cloud Shell) для более быстрых тестови итерации, а затем упаковать его в файл cloudbuild.yaml
.
ОБНОВЛЕНИЕ
С вашими дополнительными данными у вас нет git, установленного в вашем базовом образе. Добавьте эту строку перед вашим npm install
RUN apt-get update && apt-get install -y git