S1E20
- Получить в артефакты лог сборки и деплоя проекта
pythoner, для джобовbuild_imagesиdeploy_images. Для секцииscripts, то есть все команды которые выполняются в секцииscriptнужно записать в артефакты + результаты выполнения этих команд. - Артефакты должны храниться неделю
- Артефакты должны попасть в docker образ который раскатывается на сервера в секции deploy. То есть если зайти на сервер и подключиться к контейнеру, в этом контейнере я найду артефакты с логами сборки этого контейнера.
Дополнительное задание (не обязательное):
- Засунуть в артефакты полный RAW лог сборки (а не только команды в разделе
scripts) вместе со служебной информацией которая бежит на экране во время выполнения пайплайна. Вот это:
Начал с раскопок прошлых изысканий. И гуглежа.
Первая попытка:
$CI_JOB_TOKEN - автоматически генерируемый временный токен для каждой задачи.
Использовал его в первом джобе для курла трейса. Получил ошибку - нету курла в докер раннере.
Вторая попытка:
Забил на автоматику и создал Access token с правами на api (два чекбокса - api, read_api).
Создал переменную в api_token в проекте, положил туда токен.
Имена переменных в гитлабе регистрозависимые. Переменная была api_token, а в ямлике написал $API_TOKEN - получил 401 при попытке коннекта. Исправил имя переменной на API_TOKEN.
Торопился и тупил, потому какое-то количество коммитов - отладка и правка тупых ошибок.
Что собирался получить: Три джобы, первая и вторая пишут свои id в файлики с соответствующими названиями, третья курлит трейсы, используя встроенные переменные, id джобов из файлов, и складывает их в директорию проекта.
Третья попытка. Эксперименты:
Итак, логи есть. Но вместо того, чтоб их запихивать в контейнер, я повнимательнее почитал про $CI_JOB_TOKEN и решил попробовать еще раз.
Плюс вместо сборного пути попробовал $CI_JOB_URL
В азарте опять все делал с кучей косяков (в процессе решил складывать вместо корня в docs/ все, соответственно не с первого раза все пути верно вписал, да еще и порядок команд напутал - создавать директорию после того, как пытаемся в нее файл записать, - плохая идея)
После того, как начал получать логи с использованием $CI_JOB_URL и $CI_JOB_TOKEN, приступил к запихиванию их в контейнер(ы):
Логично трейсы обеих джоб запихивать в контейнеры в третьей джобе. Но я сначала сделал так: во второй джобе после деплоя контейнера сразу туда копируется трейс джобы build_image. И получилось. И решил оставить из любви к исусству.
Третья джоба нужна исключительно для копирования трейсов в контейнер.
Можно бы и во второй джобе получить ее же трейс и затолкать в контейнер. Но мне подумалось, что тогда она будет неполной - без "Job succeeded" или "Job failed".
Итого: выполнены все задания, включая необязательное (На то, что трейса третьей джобы не будет, я забил, чтобы не войти в смертельную рекурсию)
[ansible@lf-prod ~]$ docker exec -it my_app ls Dockerfile README.md app.py build.log deploy.log lf-runner-reg.sh lf-runner-shell-reg.sh requirements.txt
В бэклог: надо бы как-то все лишнее из контейнера вырезать
https://gitlab.com/littlegreencat/devops
- еще раз почитал про отличия
$varот${var}(Второе безопаснее) - еще чуть больше узнал про встроенные переменные гитлаба и использовал их
Бонус со звездочкой: Заставил ИИшку разобрать одну из фраз отчета (про азарт) с точки зрения пунктуации.
ИИшка меня похвалила и сказала, что все чотка.