РАЗМЕЩЕННЫЙ ПРОТИВ ЛОКАЛЬНОГО: gitlab-ci.yml копирует «статический» каталог в «общедоступный». Как сообщить локальной команде «bundle exec jekyll serve», чтобы сделать это также

#gitlab #jekyll #gitlab-pages

# #gitlab #джекилл #gitlab-pages

Вопрос:

У меня нет опыта создания веб-сайтов. Я следовал инструкциям на gitlab, чтобы создать пример сайта jekyll (включая удаление отношения fork и переименование URL-адреса в groupname). В gitlab файл .gitlab-ci.yml содержит:

 pages:
stage: deploy
script:
- gem install jekyll
- jekyll build -d public/
- cp -r static/* public/
artifacts:
  paths:
  - public
only:
- pages
 

В «корневой» папке на gitlab есть index.html , каталоги (css, статические) и т.д. Вы можете видеть в файле gitlab-ci.yml, gitlab копирует содержимое статического каталога в корневую папку (общедоступную). Хотя при просмотре страницы моего проекта в статическом виде отображаются только файлы (а не копии).

В Linux я установил и запустил jekyll, но он отображается неправильно. Ошибки «не найдено» в командной строке указывают на все ссылочные пути в статическом каталоге (в котором есть подкаталоги для css, font-awesome, fonts, img и js).

Я не хочу связываться с локальными расположениями файлов / каталогов, потому что это может вызвать проблемы, когда я захочу развернуть изменения в gitlab. Как мне локально эмулировать (с помощью команды «bundle exec jekyll serve»), что делает gitlab (копирование статического в корневой каталог)? Или есть другой способ справиться / исправить это?

Редактировать: я также вижу сообщение «Файл конфигурации: нет» при выполнении команды serve. Хотя есть файл _config.yml, я думаю, ему может потребоваться некоторая настройка. И в другой теме gitlab / jekyll есть несколько инструкций по настройке. Мне нужно будет изучить это дальше.

Редактировать после решения:

Основываясь на предложении Росса, я обновил строку в файле .gitlab-ci.yml с «jekyll build -d public /» на «bundle exec jekyll build -d public». Для этого файла я вижу, что другие удалили строку «gem install jekyll», но она все еще у меня, и пока она работает. Хотя мне интересно, должен ли я изменить его на «bundle install», чтобы версии gitlab / local jekyll были одинаковыми. Команда bundle считывает файл Gem, в котором у меня указана версия jekyll. Я не уверен, скажет ли это gitlab использовать определенную версию jekyll или они просто используют свою версию независимо.

Затем локально в Linux я записываю компакт-диск в каталог сайта с помощью .файлы yml, которые я загрузил из gitlab. Затем запустил

 mkdir public
bundle install
bundle exec jekyll build -d public/
cp -r static/* public/
cd public/
jekyll serve
 

Обслуживаемая страница больше не повреждена. Теперь он выглядит точно так же, как фактический gitlab.io страница.

Ответ №1:

Вам нужно будет выполнить те же команды, что и GitLab, чтобы получить тот же результат. Похоже, вы запускаете это:

 bundle install
bundle exec jekyll serve
 

Вы настроили GitLab для запуска этого:

 gem install jekyll
jekyll build -d public/
cp -r static/* public/
 

Вы могли бы установить тот же пункт назначения с -d помощью и запустить эту cp команду локально, чтобы получить аналогичный результат, но вам пришлось бы делать это каждый раз, когда jekyll создает.

Я бы посоветовал вам продолжать использовать команды bundle и настроить GitLab для выполнения того же. В настоящее время вы столкнетесь с проблемами управления версиями, поскольку GitLab будет устанавливать последнюю версию Jekyll для каждой сборки, а любые плагины в Gemfile игнорируются.

Jekyll копирует статические ресурсы по умолчанию, поэтому вы можете просто полагаться на это, а не справляться static/* public , вам нужно будет обновить пути. Вероятно, он уже копирует их, если вы не настроили его так, чтобы игнорировать static папку с этой exclude опцией. Трудно понять, не видя исходных файлов.

Запустите jekyll из той же папки, _config.yml что и, если вы не переопределяете параметры source config командной строки или, чтобы избежать сообщения «Файл конфигурации: нет».

Комментарии:

1. Я обновил свой файл .gitlab-ci.yml. Теперь в нем есть: gem install jekyll, bundle exec jekyll build -d public / , cp -r static / * public/ Как и раньше, я загрузил zip-файл из gitlab и извлек. Затем локальные команды: я записал cd в каталог сайта. На этот раз я создал каталог в каталоге сайта с именем public (mkdir public). Затем: bundle exec jekyll build -d public / На данный момент я подключился к public и попробовал «jekyll serve», но все та же ошибка, что и раньше. Итак, я скопировал статический / * в общедоступный, а затем сработал «jekyll serve». Спасибо за вашу помощь!