LF
August 15
S2E06
- Завел
.gitlab-ci.ymlв проекте devops/infra.
В проекте infra создал.gitlab-ci.ymlс соответствующим инклюдом.
Актуализировал в infra/inventory ini файлы сред - Сделал джоб инициализации (init). На этом шаге shell-runner вытягивает роли.
- Ручной запуск:
when: manual. - Выпадающий список -
dev/prod. - Дополнительные поля
packets+tags. Не совсем по заданию, потому что пытался придумать, как их использовать, чтоб не просто добавить, а для дела. Tags - беру тип работ. Packets - какой софт.
Как оно работает:
Взял ранее созданное, вспомнил, как и что, переделал.
Заданы дефолтные значения для списков и дефолтные значения переменных, которые соответствуют этим значениям. При выборе других значений с помощью условий меняются переменные.
Добавил/проверил наличие блока с проверкой существования софтинки и тэг "check" к этому блоку
https://gitlab.com/littlegreencat/devops/-/blob/master/infra/.gitlab-ci.yml?ref_type=heads
https://gitlab.com/littlegreencat/infra-2
https://gitlab.com/littlegreencat/lf-ansible-roles-2
Для того, чтобы плейбуки крутились, понадобилось:
- очень много раз править найденные косяки и пушить в репу
- вытянутую роль передать по эстафете: прописал в джобе init путь к артефактам: roles/
- поставил основной джобе зависимость от роли init.
- ssh клиент - его устанавливаю в контейнер раннера, т.к. образ без него
- ssh ключ - его задал в переменных проекта, внутри джобы передаю его в файл id_rsa.
- закомментировать строку с путем пароля ansible_vault (оно же в игноре, соответственно докер раннер умирает от недостатка парольного файла)
- отказаться от использования джобы init, т.к. я не понял, зачем ее вообще раньше делал.
Плюс на машине с шелл раннером нет ансибла. - добавить правило для всего ямлика с запретом запуска пайплайнов при пуше коммитов (честно нагуглено первое попавшееся с гитлаб форума)
- добавить строку из предыдущего правила в rules для джобы.
- прицепить раннеры к проекту infra.
- добавить установку гита в образ
- помучаться с передачей ключа в образ для авторизации в гитлабе.
- добавить перевод строки в переменной с ключом.
- сделать chmod 0600 вместо 0700 для файлика с ключом
долго прыгал, добавлял другие ключи, игрался с дебагом и тупил, прежде чем сообразил и исправил. - добавить
~/.ssh/known_hosts.
Когда разобрался с правами и отладка- ssh -i ~/.ssh/key3 -T git@gitlab.com -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nullпоказала мне заветное "Превед, Валя, ты в гитлабе", плейбук упорно продолжал падать.
убрал-o UserKnownHostsFile=/dev/null, но оставил строку проверки подключения, таким образом получил (как я думаю) создание файла при проверке соединения с гитлабом.
Но надо же проверить: убрал вообще всю строку, т.к. в ansible.cfg естьhost_key_checking = false,и все сломалось. Вернул.
- пофиксить второй раз файлики stage.ini и prod.ini. Там некорректные названия групп были, плейбук завершался, не найдя искомые группы
Заметки
- С ssh ключом гита непонятная история, надо доразбираться
- Добавив в самом начале ямлика запрет запускать пайплайн при пуше, я тем самым уже реализовал запуск только руками, как мне кажется.
Но пока оставил when:manual на всякий случай. Запускаю пайплайн вручную и дополнительно тыкаю кнопку на джобе. - Пока бился с авторизацией в гит, в логах заметил, что ключик из /root/.ssh/ тоже подхватывает. Однако, проще добавить приватный ключ, с которым в гитлаб хожу, на раннер. Или добавить ключ раннера в список разрешенных на гитлаб. Но сходу не получилось
- Даже на домашней лабе возникает желание создать свой образ с гитом и ssh, запихать его в репу и работать уже с этим образом
- В ansible.cfg
host_key_checking = falseВозможно, оно регистрозависимое и должно быть False. А возможно, это просто правила хорошего тона - True/False с большой буквы писать. Надо разобраться