Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Autobuild with Travis + Docker image #152

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
Open

Autobuild with Travis + Docker image #152

wants to merge 14 commits into from

Conversation

timtonk
Copy link
Contributor

@timtonk timtonk commented Aug 20, 2016

ПР для обсуждения предложенных изменений.

  1. Сделан docker образ (файлы Dockerfile + provision дирка) для компиляции проекта в конфигурации pdflatex + biber - PsCyr. Это совпало по времени с TexLive and Docker #146, но, как и у всего в этой стране, у меня получился "свой особенный путь". Вместо использования встроенных убунтовых пакетов я установил всё из архива texlive. Для того, чтобы поэкономить место, я установил только минимально необходимый набор, а все остальные пакеты устанавливаю в скрипте. С одной стороны это гарантирует всегда наличие распоследних версий пакетов; это поощряется авторами texlive из-за установки без суперправ; это приведёт к значительно более быстрой и экономной сборке билда, чем установка всего подряд. С другой стороны, придется список пакетов обновлять при добавлении зависимостей, иначе травис зафейлится.
    Использовать образ очень просто - надо в дирке с проектом запустить

       docker run -v `pwd`:/data phd-latex
  2. Сделана проверка сборки с помощью докер образа через travis. Тут единственное, чем я могу помочь, это предоставить шаблон .travis.yml. Потом его все равно нужно под репу затачивать

После обсуждения я сожму коммиты, обновлю чего надо и сделаю новый реквест

- docker
before_install:
- sudo apt-get update
- sudo apt-get -o Dpkg::Options::="--force-confnew" install -y docker-engine
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

у трависа стоит старый докер, а dockerfile использует новые директивы, поэтому надо обновить в образе, благо это быстро делается

@Lenchik
Copy link
Collaborator

Lenchik commented Aug 20, 2016

Как тестить этот PR?

Как я понимаю, что происходит:

  1. Travis даёт нам виртуальный удалённый сервер, на котором можно что-то творить, в данном случае по событию deploy (то есть как раз по тегу в коммите).
  2. Перед событием по скрипту он выполняет команды, ставит docker и выполняет на нём скрипт.
  3. Этот скрипт настраивает убунту по заданным правилам и потом выполняет make pdflatex.
  4. Из результатов он оставляет pdf диссертации и кладёт его в релизы.

Я прав?

@timtonk
Copy link
Contributor Author

timtonk commented Aug 20, 2016

  1. Не, травис запускает билд на любую активность в репе, будь это просто коммит напрямую, либо PR (в данном случае будет нотификашка висеть, мол травис говорит, что в вашем ПР рака нет). Но если в коммите будет ещё и тег, то для него запустится секция с релизом. Итого - травис прежде всего нужен для билда и проверки по любому поводу. Релизная часть - приятное дополнение.

1.1. Сервер как таковой он не даёт напрямую, но суть примерно такая же. На их облаке предоставляется возможность запустить свой билд за просто так.
2. Да, но по сути это и есть часть нашего трависного скрипта.
3. Да, но лучше разделять ответственность, чтобы легче усвоить. Докерный скрипт настраивает убунту внутри образа, трависный скрипт инициирует запуск этого докерного скрипта, а потом запускает полученный докерный образ, который исполняет make pdflatex
4. Скорее просто ищет заданный по имени файл и кладет в релиз тега.

Пока тут очевидным образом можно потестировать только докерную часть. Скопировать себе в корень Dockerfile и provision дирку, запустить docker build -t phd-latex ., а потом

    docker run -v `pwd`:/data phd-latex

В результате в текущей дирке должна появиться скомпиленая пдфка.

@dustalov
Copy link
Contributor

Я не уверен, что запускать Docker в сборках на Travis CI — хорошая идея. Стоит рассмотреть вариант контейнерных сборок (sudo: false) и установить TeX Live в блоке before_script. Travis CI умеет кэшировать файлы и долго длиться будет только первый запуск.

@timtonk
Copy link
Contributor Author

timtonk commented Aug 21, 2016

По мне - это как раз хорошая идея и получилась.

  • получаем гомогенную среду для латеха, вместо того, чтобы бороться с косяками и особенностями трависа, докера, пользовательского окружения.
  • вместо двух скриптов (provision для трависа и provision для докера) имеем только один - для докера. Соответственно, поддерживать тоже придется только один скрипт. Можно попробовать сделать унификацию через баш скрипты, но я не уверен, что в условиях неоднородный среды это легко сделать.

С кэшированием тоже для меня не всё очевидно. Если есть кэш, то должна быть и какая-то инвалидация. Судя по докам, автоматической её нет вообще никакой. Если вдруг трависный билд зафейлится из-за того, что версия пакета понадобится другая или ещё какое драматическое изменение, не отраженное в кеше, то лечить это придётся принудительным стиранием кэша руками владельца репы, что не всегда может быть вариантом.
<offtop> В одном из проектов я закешировал между билдами node_modules от npm, но пакеты там все равно часто меняются, поэтому в билд все равно пришлось добавить npm install, чтобы поставить новое, и npm update, чтобы обновить старое. В итоге получилось две команды, вместо одной при чистой установке и только от силы 2 минуты времени </offtop>

Итого, я не уверен, что это в самом деле лучше. Сокращая текущие 5 минут до условной минуты, мы получаем потенциальные проблемы с кэшем и поддержкой скриптов для provision. Не думаю, что так уж высока цена времени билда на этом проекте.

@Lenchik
Copy link
Collaborator

Lenchik commented Aug 21, 2016

Можно скрипт написать, наверное, который будет парсить лог (grep наверное) после команды \listfiles для pdflatex и (xe|lua)latex, чтобы подгружать правильные пакеты. Сделать этот файл локально, залить в реозиторий, в случае ошибок обновлять.

@timtonk
Copy link
Contributor Author

timtonk commented Aug 21, 2016

Это можно и в make запихнуть, раз уж он есть, только я в эту магию немного не умею

@Lenchik
Copy link
Collaborator

Lenchik commented Dec 27, 2016

Где этот ключ для тревиса генерить?
Это @AndreyAkinshin под своей учёткой должен сделать?
Да, это у оунера делается, либо у проекта, если бы у нас был проект.
https://github.com/settings/tokens - вот здесь оно

@AndreyAkinshin, может быть, сделать «организацию», например «Russian-LaTeX-projects»? Затем передать туда этот репозиторий как «PhD-dissertation-template-ru», чтобы можно было настроить туда тревис для непрерывной интеграции и тестирования коммитов, не задействую твой личный token для тревиса.
А в перспективе подтянуть в эту организацию все ценные латех шаблоны и неприкаянные пакеты.
Вроде бы в «организации» можно разграничить и права доступа участников к проектам, чтобы разработчики не подрались.

@dustalov
Copy link
Contributor

Возобновлю обсуждение. Проблема использования TeX Live в Travis CI состоит в устаревших пакетах. Смена окружения не помогает.

Я собрал работоспособную конфигурацию на основе Docker для аналогичного репозитория. Ранее это казалось мне неудачной идеей. В свою очередь, эта идея кажется мне менее неудачной, чем устанавливать LaTeX из сторонних источников.

Без особенных проблем можно адаптировать конфигурацию под этот репозиторий.

@ForNeVeR
Copy link

Господа, вам стоит обратить внимание также на Tectonic: это штуковина, которая умеет ставить пакеты по требованию из снапшотов (наподобие Haskell Stack) и сама по себе является XeLaTeX с плюшками. Я попробовал собрать ей свой талмуд (который составлял на основе очень давней версии сего репозитория), и всё завелось из коробки прям без вопросов.

Возможно, это стоит рассмотреть как более легковесный вариант для воспроизводимых сборок LaTeX-документов.

@kalasxel
Copy link

PSCyr можно устанавливать из deb пакета. https://blog.amet13.name/2014/10/pscyr.html У меня все заработало.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants