← CI/CD: практика
12 мин · intro · Урок 1 из 10

Свой проект в GitLab: копия учебного репо

Заводим репозиторий, в котором будем гонять пайплайны: клонируем учебный проект, переключаем origin на свой и делаем первый push.

Что делаем в этом треке

Пять уроков подряд мы собираем один и тот же маленький сайт: два файла, index.html и style.css. Ничего не нужно устанавливать, всё считает GitLab на своей стороне. В конце сайт уедет в интернет по своему адресу, и выкатывать его будет пайплайн, а не вы руками.

Этот урок подготовительный. Нужен аккаунт на GitLab и репозиторий, в который можно свободно пушить.

Аккаунт

Регистрация на gitlab.com обычная: почта, пароль, подтверждение по ссылке из письма. Можно войти через Google или GitHub, если не хочется заводить отдельный пароль.

После регистрации GitLab просит подтвердить личность, и делает это ступенями: сначала почта, при подозрении на риск телефон, и только в верхней ступени банковская карта. Это защита от майнеров: бесплатные раннеры дают чужие вычислительные мощности, и их регулярно пытаются занять своими задачами. Деньги при проверке карты не списываются, GitLab не хранит её данные. Если проверку проходить не хочется, в конце трека есть заметка про свой раннер, он работает без верификации.

Учебный репозиторий

Исходный сайт лежит здесь:

https://gitlab.com/izidevops-learn/ci-start

Репозиторий публичный, клонировать можно без доступов. В корне лежит сам сайт: index.html, style.css и README.md. Рядом папки lesson-06-… и дальше, это материалы поздних уроков, пока они вам не нужны.

Пайплайна в корне нет намеренно, его вы напишете сами в следующем уроке.

Как будет выглядеть результат в конце трека, видно тут: ci-start-148d25.gitlab.io. Эта страница выложена ровно тем пайплайном, который вы соберёте за пять уроков.

git clone https://gitlab.com/izidevops-learn/ci-start.git
cd ci-start

Клонировать в этот репозиторий вы сможете, а пушить — нет: он не ваш. Поэтому дальше меняем адрес, куда уходит push.

Свой пустой проект

В GitLab нажмите New project -> Create blank project. Имя любое, например my-ci-site.

Один пункт важен: снимите галочку Initialize repository with a README. Если её оставить, в проекте появится коммит, которого нет в вашей локальной копии, и первый же push отобьётся с ошибкой rejected (fetch first). Пустой проект такого конфликта не создаёт.

Видимость поставьте Public, тогда на страницу сайта в конце трека можно будет зайти без логина и показать её кому угодно.

Переключаем origin

origin — это имя удалённого адреса, куда git пушит по умолчанию. Сейчас там учебный репозиторий. Смотрим:

git remote -v
origin  https://gitlab.com/izidevops-learn/ci-start.git (fetch)
origin  https://gitlab.com/izidevops-learn/ci-start.git (push)

Меняем адрес на свой проект (URL GitLab показывает на странице пустого проекта, кнопка Clone):

git remote set-url origin https://gitlab.com/<ваш-логин>/my-ci-site.git
git remote -v

Теперь в выводе ваш адрес. История коммитов никуда не делась, поменялась только точка назначения.

Первый push

git push -u origin main

Флаг -u привязывает локальную ветку main к удалённой, дальше хватит просто git push.

Обновите страницу проекта в браузере: index.html, style.css и README.md на месте. Репозиторий готов, можно писать пайплайн.

Если push не проходит

rejected (fetch first) — в проекте всё-таки есть свой коммит (обычно README). Проще всего удалить проект и создать заново без README.

Permission denied (publickey) — вы клонировали по SSH, а ключ в GitLab не добавлен. Для учебного репо достаточно HTTPS-адреса: git remote set-url origin https://.... GitLab спросит логин и токен вместо пароля.

HTTP Basic: Access denied. The provided password or token is incorrect — вместо пароля нужен персональный токен. Он создаётся так: аватар -> Edit profile -> Access -> Personal access tokens, права write_repository.

Что важно запомнить

Клонированный репозиторий не привязан к оригиналу навсегда: git remote set-url origin <адрес> переключает push на любой другой проект.

Галочка README при создании проекта стоит полчаса разбирательств: лишний коммит на стороне GitLab ломает первый push.

Дальше пишем первый .gitlab-ci.yml.

Прошли материал до конца? Отметьте урок пройденным.