Jenkins access roles: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
(не показано 38 промежуточных версий этого же участника) | |||
Строка 5: | Строка 5: | ||
=Создание ролей в Jenkins= |
=Создание ролей в Jenkins= |
||
+ | |||
+ | В Jenkins права распределяются немного "заморочено". |
||
+ | Лично до меня дошло не с первого раза, по-тому и появилась эта заметка. |
||
+ | |||
+ | |||
+ | ==Установить нужные плагины== |
||
+ | Можно обойтись только одним плагином <B>role-strategy</B>, но тогда придется следить за именами job и при переименовании права могут ломаться. |
||
+ | По этой причине лучше сразу же использовать совместно с плагином <B>role-strategy</B> |
||
+ | |||
+ | ===role-strategy=== |
||
<PRE> |
<PRE> |
||
− | + | 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 |
Installing cloudbees-folder from update center |
||
</PRE> |
</PRE> |
||
+ | |||
+ | ===cloudbees-folder=== |
||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | |||
+ | ==Перезапуск Jenkins== |
||
+ | После установки этих плагинов требуется перезапуск: |
||
+ | <PRE> |
||
+ | java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://127.0.0.1:8080/ safe-restart --username admin --password r00tme |
||
+ | </PRE> |
||
+ | |||
+ | ==Настройка прав доступа== |
||
+ | Уже существуют 2 группы пользователей в LDAP: |
||
+ | * cicd_users |
||
+ | * cicd_administrators |
||
+ | |||
+ | Нужно назначать ограниченные права для группы cicd_users |
||
+ | ===Создать folder=== |
||
+ | Тут - проще сделать используя веб-интерфейс чем CLI, так-как create-item принимает на вход XML который еще требуется написать. Как один из вариантов - использовать конфигурацию существующей job. |
||
+ | |||
+ | ===Новый Item=== |
||
+ | Создать новый элемент - выбрать пункт New Item |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess1.png|400px]] |
||
+ | <BR> |
||
+ | <BR> |
||
+ | Выбрать имя и задать тип элемента - Folder |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess2.png|400px]] |
||
+ | <BR> |
||
+ | <BR> |
||
+ | Сохранить пока-что пустой Folder |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess3.png|400px]] |
||
+ | <BR> |
||
+ | <BR> |
||
+ | Ожидаемый результат: |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess4.png|400px]] |
||
+ | |||
+ | ===Поместить в него job=== |
||
+ | Создаем новый Job внутри Folder |
||
+ | <BR> |
||
+ | Тип: FreeStyle |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess5.png|400px]] |
||
+ | <BR> |
||
+ | |||
+ | Добавить Build Step: Execute shell. |
||
+ | <BR> |
||
+ | Это нужно для того что бы тестовая Job-а делала хоть что-то. |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess6.png|400px]] |
||
+ | <BR> |
||
+ | Простейший тестовый код - вывести переменные окружения. |
||
+ | |||
+ | <BR> |
||
+ | [[image:JenkinsAccess7.png|400px]] |
||
+ | <BR> |
||
+ | Результат - есть Folder и внутри него существует Job |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess8.png|400px]] |
||
+ | <BR> |
||
+ | |||
+ | ===Назначение прав=== |
||
+ | В разделе Manage Jenkins перейти к Manage and Assign Roles |
||
+ | |||
+ | <BR> |
||
+ | [[image:JenkinsAccess9.png|800px]] |
||
+ | <BR> |
||
+ | |||
+ | |||
+ | <BR> |
||
+ | [[image:JenkinsAccess10.png|400px]] |
||
+ | <BR> |
||
+ | ====Создание ролей==== |
||
+ | В разделе Manage and Assign Roles требуется создать роли - для этого перейти в раздел Manage Roles |
||
+ | |||
+ | <BR> |
||
+ | Создать 2 глобальные роли |
||
+ | * Админ с полным доступом |
||
+ | * overall/Read - глобальная роль которая имеет только право на чтение глобально |
||
+ | (overall/Read - это название привилегии в Jenkins и роль которая владеет только этой привилегией названа точно так же) |
||
+ | |||
+ | <BR> |
||
+ | [[image:JenkinsAccess11.png|1000px]] |
||
+ | <BR> |
||
+ | |||
+ | Создать 2 проектные роли: |
||
+ | * pythonFolder c паттерном "pythonFolder" |
||
+ | * pythonFolderChilds c паттерном "pythonFolder/.*" |
||
+ | <BR> |
||
+ | Первая роль обеспечивает доступ к фолдеру, вторая - к содержимому |
||
+ | <BR> |
||
+ | <BR> |
||
+ | |||
+ | <BR> |
||
+ | [[image:JenkinsAccess12.png|400px]] |
||
+ | <BR> |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess13.png|400px]] |
||
+ | <BR> |
||
+ | ====Назначение ролей группе пользователей==== |
||
+ | Перейти в раздел Assign Roles |
||
+ | |||
+ | <BR> |
||
+ | [[image:JenkinsAccess14.png|400px]] |
||
+ | <BR> |
||
+ | |||
+ | Добавить Global Role overall/read для группы cicd_users. |
||
+ | (Без этой роли пользователи этой группы не смогут читать никакие job - будет сообщение о том что не назначена эта роль) |
||
+ | |||
+ | |||
+ | |||
+ | |||
+ | <BR> |
||
+ | [[image:JenkinsAccess15.png|400px]] |
||
+ | <BR> |
||
+ | <BR> |
||
+ | Назначить группе cicd_users роли pythonFolder и pythonFolderChilds |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess16.png|400px]] |
||
+ | <BR> |
||
+ | |||
+ | <BR> |
||
+ | [[image:JenkinsAccess17.png|400px]] |
||
+ | <BR> |
||
+ | <BR> |
||
+ | ====Проверка ролей==== |
||
+ | Требуется логин под пользователем test или любым другим из группы cicd_users. |
||
+ | <BR> |
||
+ | <I>рекомендуется использовать другой браузер что бы не делать постоянный перелогин</I> |
||
+ | <BR> |
||
+ | Если назначена роль pythonFolder но не назначена pythonFolderChilds то фолдер видно, но его содержимое - нет. |
||
+ | <BR> |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess18.png|600px]] |
||
+ | <BR> |
||
+ | Содержимое фолдера не видно: |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess19.png|600px]] |
||
+ | <BR> |
||
+ | |||
+ | Для того что бы видеть в том числе и содержимое - проверить/добавить если не добавлена роль pythonFolderChilds |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess20.png|600px]] |
||
+ | <BR> |
||
+ | |||
+ | После чего содержимое фолдера становится доступно: |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess21.png|600px]] |
||
+ | <BR> |
||
+ | Согласно политики, у пользователя из группы cicd_users есть права на запуск job но нет более никаких прав. |
||
+ | <BR> |
||
+ | [[image:JenkinsAccess22.png|600px]] |
||
+ | <BR> |
||
+ | Если создать фолдер javaFolder то можно убедиться что к нему у пользователя test доступа не будет |
||
=Ссылки= |
=Ссылки= |
||
* https://www.cloudbees.com/products/cloudbees-jenkins-platform/team-edition/features/folders-plugin |
* https://www.cloudbees.com/products/cloudbees-jenkins-platform/team-edition/features/folders-plugin |
||
+ | * https://sinisa229.wordpress.com/2014/11/10/role-strategy-plugin-for-jenkins/ |
Текущая версия на 14:55, 14 декабря 2016
Создание ролей в 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 доступа не будет