Jenkins access roles
Создание ролей в Jenkins
В Jenkins права распределяются немного "заморочено". Лично до меня дошло не с первого раза, по-тому и появилась эта заметка.
Установить нужные плагины
Можно обойтись только одним плагином role-strategy, но тогда придется следить за именами job и при переименовании права могут ломаться. По этой причине лучше сразу же использовать совместно с плагином role-strategy
role-strategy
java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://127.0.0.1:8080/ install-plugin "role-strategy" --username admin --password r00tme Installing cloudbees-folder from update center
cloudbees-folder
java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://127.0.0.1:8080/ install-plugin "cloudbees-folder" --username admin --password r00tme Installing cloudbees-folder from update center
Перезапуск Jenkins
После установки этих плагинов требуется перезапуск:
java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://127.0.0.1:8080/ safe-restart --username admin --password r00tme
Настройка прав доступа
Уже существуют 2 группы пользователей в LDAP:
- cicd_users
- cicd_administrators
Нужно назначать ограниченные права для группы cicd_users
Создать folder
Тут - проще сделать используя веб-интерфейс чем CLI, так-как create-item принимает на вход XML который еще требуется написать. Как один из вариантов - использовать конфигурацию существующей job.
Новый Item
Создать новый элемент - выбрать пункт New Item
Выбрать имя и задать тип элемента - Folder
Сохранить пока-что пустой Folder
Ожидаемый результат:
Поместить в него job
Создаем новый Job внутри Folder
Тип: FreeStyle
Добавить Build Step: Execute shell.
Это нужно для того что бы тестовая Job-а делала хоть что-то.
Простейший тестовый код - вывести переменные окружения.
Результат - есть Folder и внутри него существует Job
Назначение прав
В разделе Manage Jenkins перейти к Manage and Assign Roles
Создание ролей
В разделе Manage and Assign Roles требуется создать роли - для этого перейти в раздел Manage Roles
Создать 2 глобальные роли
- Админ с полным доступом
- overall/Read - глобальная роль которая имеет только право на чтение глобально
(overall/Read - это название привилегии в Jenkins и роль которая владеет только этой привилегией названа точно так же)
Создать 2 проектные роли:
- pythonFolder c паттерном "pythonFolder"
- pythonFolderChilds c паттерном "pythonFolder/.*"
Первая роль обеспечивает доступ к фолдеру, вторая - к содержимому
Назначение ролей группе пользователей
Перейти в раздел Assign Roles
Добавить Global Role overall/read для группы cicd_users. (Без этой роли пользователи этой группы не смогут читать никакие job - будет сообщение о том что не назначена эта роль)
Назначить группе cicd_users роли pythonFolder и pythonFolderChilds
Проверка ролей
Требуется логин под пользователем test или любым другим из группы cicd_users.
рекомендуется использовать другой браузер что бы не делать постоянный перелогин
Если назначена роль pythonFolder но не назначена pythonFolderChilds то фолдер видно, но его содержимое - нет.
Содержимое фолдера не видно:
Для того что бы видеть в том числе и содержимое - проверить/добавить если не добавлена роль pythonFolderChilds
После чего содержимое фолдера становится доступно:
Согласно политики, у пользователя из группы cicd_users есть права на запуск job но нет более никаких прав.
Если создать фолдер javaFolder то можно убедиться что к нему у пользователя test доступа не будет