Найти тему
Записки Одмена

Jenkins. Перенос/export всех секретов. Универсальный скрипт на Python.

Оглавление

Всех категорически приветствую!

Публикую универсальный скрипт на python, который позволит вытащить вам из Jenkins все необходимые секреты, пароли, ssh ключи и т.д.

Скрипт.

Прежде всего необходимо объявить пререквизиты. Тут есть класс RegexpDict, для синтаксического сахара, чтобы было удобно обращаться к ключу через точку.

переменные
переменные

Секцию с vault можно не использовать, если вам будет достаточно только вытащить креды.

Делаем запрос и парсим ответ.

groovy script
groovy script
ф-я запроса и парсинга ответа от Jenkins
ф-я запроса и парсинга ответа от Jenkins

Тут мы делаем запрос к Jenkins по пути /script в качестве data прикладываем groovy скрипт и получаем ответ, в котором ищем тэг pre и текст class =, что будет означать, что мы нашли список кредов. Далее записываем это как строку в один большой файл.

Делим файл.

Для того, чтобы распарсить каждый кред мы делим большой файл на кучу маленьких кредов по разделителю ---- , делаем это командой csplit в Ubuntu

разбивка файла
разбивка файла

Парсинг кредов по классам креда в Jenkins.

Напишем вспомогательную ф-ю _search_text, для вытаскивания регуляркой из каждого подфайла интересующие нас значения. Также тут есть словарь с паттернами, для удобства обращения к ним через точку далее в коде. Сделан специальный класс RegexpDict

вспомогательная ф-я
вспомогательная ф-я

Далее сам код парсинга классов в Jenkins

парсинг классов в Jenkins
парсинг классов в Jenkins

По каждому подфайлу получившимся после разделения, мы ищем общие id, class_cred, description.

В зависмости от class_cred мы по разному вытаскиваем секрет. Кред класса FileCredentialsImpl не уникален, поэтому распарсить его универсально не получится.

Закомментированные строки необходимы для загрузки в vault, если это вам не нужно так и оставьте.

main ф-я.

-7

тут есть доп. ф-я, которая позволит очищать разделённые подфайлы, если раскомментировать.

Полный код и описание я оставляю на github.

Спасибо за внимание. Посмотрите на моём канале другие полезные статьи, может они вам помогут решить ваши задачи.