Hugo: создайте статический сайт с помощью Google Cloud Build

Я хотел бы автоматически создать контейнер Docker, который отображает общедоступные файлы веб-сайта, созданного с помощью платформы Hugo. Поэтому я добавил следующий Dockerfile в корневой каталог сайта Hugo:

FROM klakegg/hugo:0.104.3-onbuild AS hugo

FROM nginx
COPY --from=hugo /target /usr/share/nginx/html

Идея этой многоэтапной сборки состоит в том, чтобы создавать файлы веб-сайта на лету и отображать результат с помощью контейнера nginx. Когда я создаю контейнер локально на своем ПК с Ubuntu 20.04 Linux, а затем запускаю его, все работает, как и ожидалось, и веб-сайт доступен по адресу localhost:8080:

docker build -t hugo-local .
docker run -d -p 8080:80 hugo-local

Если я создал контейнер с помощью Google Cloud Build, процесс сборки завершится успешно. Файлы также копируются в правильный каталог (/usr/share/nginx/html).

steps:
# This step builds the container image.
- name: 'gcr.io/cloud-builders/docker'
  id: Build
  args:
  - 'build'
  - '-t'
  - 'eu.gcr.io/gcp-project/hugo-cloud:$BUILD_ID'
  - '.'

# This step pushes the image to Container Registry
# The PROJECT_ID and SHORT_SHA variables are automatically
# replaced by Cloud Build.
- name: 'gcr.io/cloud-builders/docker'
  id: Push
  args:
  - 'push'
  - 'eu.gcr.io/gcp-project/hugo-cloud'

Однако вместо отображения веб-сайта отображается стандартная страница приветствия nginx:

docker run -d -p 8080:80 hugo-cloud

Что я делаю неправильно? Есть идеи? Обратная связь высоко ценится.

Пробовал разные базовые образы, разные среды.


106
1

Ответ:

Решено

Я не могу воспроизвести вашу проблему.

Я использовал один из моих собственных сайтов Hugo:

git clone \
--recurse-submodules \
[email protected]:me/repo.git

Я могу запустить свой сайт:

hugo server -D

И:

podman run \
--interactive --tty --rm \
--volume=${PWD}:/src \
--publish=1313:1313 \
docker.io/klakegg/hugo:0.104.3 \
  server -D

К вашему вопросу я добавил файлы Dockerfile и cloudbuild.yaml.

Dockerfile:

FROM klakegg/hugo:0.104.3-onbuild AS hugo

FROM nginx
COPY --from=hugo /target /usr/share/nginx/html

И я построил и смог запустить сайт:

podman build \
--tag=snippets:$(git rev-parse HEAD) \
--file=./Dockerfile \
${PWD}

podman run \
--interactive --tty --rm \
snippets:$(git rev-parse HEAD)

cloudbuild.yaml:

steps:
- name: gcr.io/cloud-builders/docker
  id: build
  args:
  - build
  - --tag=gcr.io/${PROJECT_ID}/hugo-cloud:${BUILD_ID}
  - '.'

#- name: gcr.io/cloud-builders/docker
#  id: push
#  args:
#  - push
#  - gcr.io/${PROJECT_ID}/hugo-cloud:${BUILD_ID}

images:
- gcr.io/${PROJECT_ID}/hugo-cloud:${BUILD_ID}

Оба подхода к работе push (по-вашему) docker push и способу Cloud Build по умолчанию для перечисления images.

Построить это:

gcloud builds submit ${PWD} \
--config=cloudbuild.yaml \
--project=${PROJECT}

Получите самый последний идентификатор сборки как TAG и запустите контейнер:

TAG=$(\
  gcloud builds list \
  --limit=1 \
  --project=${PROJECT} \
  --format = "value(id)")

podman run \
--interactive --tty --rm \
--publish=8080:80 \
gcr.io/${PROJECT}/hugo-cloud:${TAG}

Это тоже работает.