LF
August 15

S2E06

  1. Завел .gitlab-ci.yml в проекте devops/infra.
    В проекте infra создал .gitlab-ci.yml с соответствующим инклюдом.
    Актуализировал в infra/inventory ini файлы сред
  2. Сделал джоб инициализации (init). На этом шаге shell-runner вытягивает роли.
  3. Ручной запуск:when: manual.
  4. Выпадающий список - dev/prod.
  5. Дополнительные поля 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 с большой буквы писать. Надо разобраться