Google Cloud build не может найти путь к git - PullRequest
0 голосов
/ 15 октября 2019

У меня есть файл Docker, который работает npm install. Когда я отправляю это на gcloud builds submit --tag <tag>, я получаю следующую ошибку:

....
npm ERR! path git
npm ERR! code ENOENT
npm ERR! errno ENOENT
npm ERR! syscall spawn git
npm ERR! enoent Error while executing:
npm ERR! enoent undefined ls-remote -h -t ssh://git@github.com/web3-js/WebSocket-Node.git
npm ERR! enoent
npm ERR! enoent
npm ERR! enoent spawn git ENOENT
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

Из сообщения об ошибке выше, и результаты поиска в Google для "undefined ls-remote -h -t ssh: // git@ github.com ", похоже, проблема в том, что путь git не определен.

Есть ли обходной путь для этого?


РЕДАКТИРОВАТЬ:

# reference: https://www.docker.com/blog/keep-nodejs-rockin-in-docker/

# Operating System

FROM node:10.16.3-slim

# create app directory
WORKDIR /usr/src/app

COPY package-lock.json ./
COPY package.json ./

RUN npm install --no-optional
# for production: RUN npm ci

COPY . .

#EXPOSE 8080
# Environment variables
ENV mode help


CMD ["sh", "-c", "node src/app.js ${mode}"]

Теперь я думаю, что это потому, что я использовал -slim версию образа докера nodejs (в соответствии с рекомендацией в блоге докера). Я не осознавал, что эти образы также включают другие программы, такие как git и т. Д., Которые часто необходимы для nodejs.

1 Ответ

1 голос
/ 15 октября 2019

Есть 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

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