Я не работал с GitLab (Jenkins, GitHub workflows, AWS Codebuiuld, TravisCI, ...), но в целом все одинаково.
1) Первое и
главное - расписать и проделать вручную все что должен делать CI pipeline. Советую начать с самого простого - просто построить образ и задейлоить на сервере. Потом добавлять проверки и проч. - вариантов много
https://qna.habr.com/q/1016852#answer_1981278. И добавлять разные вариации для разных branches and targets (типа - для master branch больше всего тестов и проч.)
Как деплоить - ИМХО, стоит это делать простыми контейнерами, без compose, тогда можно будет деплоить всюду - это сегодня самый универсальный формат.
2) Когда четко знаем что - искать как это имплементировать в gitlab или другом инструменте, сочинить самый простой сценарий, отладить, добавать что-то посложнее, отладить, и т.п.
Все как с программированием.
Примеров в интернете много.