- Блог/
Непрерывная интеграция для документов 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 репозиторий будет происходить следующее:
- Runner запускает Docker-образ с latex
- В рабочую директорию клонирует репозиторий со статьей
- Запускает
pdflatex
два раза (второй раз нужен для корректного отображения BibTeX’a) - При наличии файла
report.pdf
помечает билд успешным и выгружает этот файл как артефакт сборки.
После этого вы можете скачать этот файл и убедится, что новые изменения как-то повлияли на статью.