Gitlab Pages: публикуем статик-сайты через CI

Аналогично Github Pages в гитлабе существует собственный: Gitlab Pages.

Это хостинг статических сайтов, который собирается через Gitlab CI по исходникам в репозитории. О Gitlab CI уже писал, так что за подробностями туда. Хотя и здесь постараюсь описать понятно, даже если ты, читатель, с ним не особо знаком.

Gitlab CI позволяет выполнять скрипты над файлами в репозитории из под какого-либо контейнера. Соответственно, можно собрать сайт через различные static site generator, а можно скриптами самому. Я, например, собирал и публиковал Kotlin JS — запускал Gradle скрипты сборки, тесты и публиковал сайты на Gitlab Pages. Именно на этом примере мы и рассмотрим вкратце, что да как.

Чтобы наш проект опубликовался на Pages, положим в корень файл .gitlab-ci.yaml В нём должна быть определена задача pages, в результате выполнения которой собирался артефакт из папки public. Важно: все имена должны быть точно такими. Вот пример:

image: openjdk:8

pages: # название таски
  stage: deploy
  script:
    - ./gradlew bundle
    - mkdir .public
    - cp -r src/main/web/* .public
    - cp -r build/bundle/* .public
    - mv .public public
  artifacts: # необходимый артефакт
    paths:
      - public
  only: # собирать только из ветки мастера
    - master

Здесь в докер контейнере openjdk выполняется скрипт, запускающий gradle и кладущий результат в папку public.

Затем создается артефакт из этой папки, который и отображается как сайт.

Всё, готово! Чтобы понять адрес сайта, нужно зайти в репозитории в setting → pages. Но обычно он такого вида: https://your-user-name.gitlab.io/project-name

Погружение

  • Много официальных примеров для различных языков и технологий здесь
  • Документация
  • А ещё, конечно же, можно прикрепить свой домен или субдомен
  • Есть автоматическая интеграция с Let’s encrypt, чтобы соединение всегда было защищено сертификатом, когда вы используете свой домен. Гитлаб будет автоматически следить и за продлением сертификата

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *