Непрерывная интеграция для документов LaTeX в GitLab

Настала осень - самая прекрасная пора для научно-исследовательских работ. Значит самое время обновить свой подход к написанию научных статей. В последнее время для хранения, управления, коллаборации и прочей работы с исходными кодами я стал использовать gitlab.com.

Первый плюс использования gitlab для научной работы состоит в том, что у вас появляется единая точка для синхронизации с коллегами, а если вы пишете один - резервная копия с историей.

Второй плюс состоит в едином списке задач в виде Issue tracker’а. Могут быть назначены исполнители, сроки, проведены обсуждения. Также прямо в интерфейсе можно разбренчиваться - удобно даже для непосвященных.

Третий плюс, ради которого затевался данный пост, состоит в непрерывной интеграции. При каждом коммите (фиксированной версии рабочей директории), отправленном на сервер gitlab можно запустить команды для сборки проекта. Для программных продуктов собирается, тестируется и выкладывается дистрибутив продукта. Тоже самое доступно и для LaTeX проекта. Можно собрать проект и получить готовый pdf даже не имея полностью установленного LaTeX стека.

При создании непрерывной интеграции создатели gitlab вдохновлялись сервисом travis-ci.org. Соответственно, вся настройка репозитория производится в файле .gitlab-ci.yml. После коммита gitlab runner скачивает этот файл к себе и выполняет описанные в нем действия. Gitlab runner - это программа, которая управляет машиной, на которой происходит сборка. Gitlab имеет партнерское соглашение с Digital Ocean, что позволяет на каждый проект иметь бесплатный runner. Также в качестве runner’а можно зарегистрировать свою машину. Подробности можно узнать в документации (на английском).

Итак, у нас есть в корне репозитория LaTeX-документ с названием report.tex. Остальные части документа импортируются внутри report.tex и также расположены в корне. Для настройки непрерывной интеграции создадим следующий файл:

image: blang/latex
stages:
  - build

latex_build_job:
  stage: build
  script:
    - pdflatex report.tex && pdflatex report.tex
  tags:
    - docker
  artifacts:
    paths:
    - report.pdf

При каждом новом коммите, попавшем в gitlab репозиторий будет происходить следующее:

  1. Runner запускает Docker-образ с latex
  2. В рабочую директорию клонирует репозиторий со статьей
  3. Запускает pdflatex два раза (второй раз нужен для корректного отображения BibTeX’a)
  4. При наличии файла report.pdf помечает билд успешным и выгружает этот файл как артефакт сборки.

После этого вы можете скачать этот файл и убедится, что новые изменения как-то повлияли на статью.

Полезные ссылки

  1. gitlab.com
  2. travis-ci.org
  3. Документация к Gitlab CI (на английском)
  4. Пост о использовании Docker для сборки LaTeX документов (на английском)
Avatar
Иван Белявцев
Developer technology инженер
comments powered by Disqus