воскресенье, 27 октября 2019 г.

Unity3d: Failed to activate/update license. Timeout occured while trying to update license. Please try again later or contact

Есть такой кривой движок (точнее его лицензирование), со сборкой из консоли там беда. И как пример ошибка
Failed to activate/update license. Timeout occured while trying to update license. Please try again later or contact

Вариант первый - заходим на сервер сборки где-то раз в месяц, в Unity Hub, там активируем лицензию (вероятно, надо ещё сделать login в хабе)
Вариант второй: читаем, думаем.
https://unitycoder.com/blog/2017/05/19/install-run-unity-in-linux-terminal/
https://forum.unity.com/threads/5-4-0p1-fails-to-launch-due-to-license.425277/#post-2941499
https://forum.unity.com/threads/unity-5-3-seems-to-break-batchmode-nographics-on-headless-linux.376074/
https://stackoverflow.com/questions/47399488/building-running-headless-unity3d-game-in-ubuntu-docker-container

И вообще типа для консольной сборки нужна про версия (у нас есть, от гемора и танцев не спасает, при этом в 1 поток похоже можно таки собирать и на бесплатной лицензии)

пятница, 11 октября 2019 г.

Jenkins, freestyle job and git commit

Если требуется внести какие-либо изменения в гит ветку через jenkins, у нас есть плагин Git Plugin. Но он хорошо работает только если нам не нужны правки в репе, потому что суть плагина в том что он делает "detached HEAD", через получение id последнего коммита в ветке и git checkout (id), получая тем самым этот detached.
При этом мы можем сделать в сборке коммит (но не можем push - запросит данные для авторизации в гите), а дальше в послесборочных операциях добавляем Git Publisher, который вроде как пушит.. но всё пропадает бесследно. Также проблем добавляет то, что описания (те что в дженкинсе по нажатию вопроса) писал имбецил, из них непонятно ничего. Прежде всего речь про git publisher - branches.
Рекомендуется в Additional Behaviours добавить Clean before checkout
И до начала убеждаемся, что у нас есть права на push, иначе можно очень долго тупить когда будет говорить repository not found.

Что нужно проверить.
В управлении исходным кодом стоит refs/heads/our_branch
В Additional Behaviours добавлено
1) Clean before checkout
2) Custom user name/e-mail address и заполнено
3) Check out to specific local branch - commitbranch (имя можно поставить своё, это временная ветка, если первый пункт не ставить то в имя добавить $BRANCH_ID)
Таким образом, detached HEAD у нас превращается в локальную ветку, с которой гораздо проще работать.

Для успешного пуша необходимо в Branches - add branch добавить ветку,
Branch to push - имя ветки куда мы будем пушить, без префиксов, если пушить надо туда же откуда делали чекаут то нужно распарсить $GIT_BRANCH, взяв только последнюю секцию (без origin/ или refs/heads/), например так ${GIT_BRANCH/refs\/heads\//}
Target remote name - origin

Но есть и "другие варианты"
Итак, вариант первый: в build добавляем
git checkout $GIT_BRANCH и будет нормальный чекаут
https://stackoverflow.com/questions/19922435/how-to-push-changes-to-github-after-jenkins-build-completes/29786580
(но с пушем по прежнему есть нюансы, читаем по ссылке)

Вариант второй: сделать временную ветку и потом мержить её в нужную нам
Additional Behaviours - Check out to specific local branch
commitbranch-$BRANCH_ID
по сути, выше это и описано

Вариант третий:
Пушить не через git publisher а из шелла. Привет проблемы с тем как передать авторизацию, надо читать про git_askpass
https://stackoverflow.com/questions/42627269/jenkins-using-git-askpass-to-set-credentials/42636309
и в общем самый костыльный вариант

И ещё можно почитать
https://riptutorial.com/jenkins/example/27915/configuring-the-auto-push-job
https://stackoverflow.com/questions/14766214/jenkins-git-publisher-how-to-push-back-to-git-branch
https://www.theserverside.com/video/Tips-and-tricks-on-how-to-use-Jenkins-Git-Plugin