djbelyak

пикабушник
187 рейтинг 21 комментарий 5 постов 1 в "горячем"
3

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

Данный пост будет интересен для студентов и ученых, которых утомил Microsoft Word.


Осень - самая прекрасная пора для научно-исследовательских работ. Значит самое время обновить свой подход к написанию научных статей. В последнее время для хранения, управления, коллаборации и прочей работы с исходными кодами я стал использовать 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 помечает билд успешным и выгружает этот файл как артефакт сборки.


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

Показать полностью
Отличная работа, все прочитано!