Jenkins에서 사용자별, 프로젝트별, 역할별 권한 설정하는 방법을 다룹니다.
Jenkins 관리 > Plugin Manager에서 아래 플러그인을 설치합니다.
https://plugins.jenkins.io/matrix-auth/
(Jenkins 2.375.2 버전 기준으로 Jenkins 설치 시 'Install suggested plugins'를 선택하면 기본으로 설치되는 것 같습니다.)
Jenkins 관리 > Configure Global Security > Authentication > Authorization 에서 Matrix-based security를 선택합니다.
그리고 Add user 버튼을 클릭하여 사용자 계정 생성 시의 계정명(User ID)을 입력하여 사용자를 추가한 후, 각 사용자에게 부여할 권한을 설정하면 됩니다.

예시에서 사용자별 권한 설정은 아래와 같습니다.
프로젝트별로 사용자 권한을 다르게 설정해야할 경우에 사용합니다.
Jenkins 관리 > Configure Global Security > Authentication > Authorization 에서 Project-based Matrix Authorization Strategy를 선택합니다.
Matrix-based security와 동일하게 사용자별 권한을 설정합니다.

권한을 다르게 설정할 프로젝트 > 구성 > General에서 Enable project-based security를 체크합니다.
그리고 Inheritance Strategy를 선택합니다.

예시의 경우, 프로젝트명이 SecretProject로, 권한 설정을 상속받지 않고 별도로 설정하도록 'Do not inherit permission grants from other ACLs' 를 선택하고, 비로그인 사용자, 로그인 사용자 모두 접근 권한이 없게 아무것도 설정하지 않았습니다.
위와 같이 설정하면 어드민이 아닌 계정 로그인 시, 다른 프로젝트는 모두 보이고, SecretProject 프로젝트는 보이지 않게 됩니다.
사용자가 많아 사용자 각각의 권한을 설정하기 어려운 경우, 역할별 권한을 설정하고, 사용자 - 역할을 맵핑하여 권한 설정할 시 사용합니다.
Jenkins 관리 > Plugin Manager에서 아래 플러그인을 설치합니다.
https://plugins.jenkins.io/role-strategy/
Jenkins 관리 > Security > Configure Global Security > Authentication > Authorization 에서 Role-Based Strategy를 선택합니다.
그러면 Jenkins 관리 > Security에서 Manage and Assign Roles 메뉴가 생성됩니다.
Manage and Assign Roles 메뉴 내 Manage Roles 메뉴에서 역할을 설정합니다.
우선 글로벌 역할을 설정합니다.

예시의 경우, 역할 설정은 아래와 같습니다.
여기서 설정 시 주의해야할 점은, 로그인 사용자에게 부여할 역할에 Overall - Read 권한을 주지 않으면, Jenkins URL 접근 시 Access Denied 메시지가 노출되게 됩니다.

프로젝트(item)별 역할을 설정합니다.

예시의 경우, 프로젝트별 역할 설정은 아래와 같습니다.
Manage Roles 메뉴에서 역할 설정이 완료되면, Assign Roles 메뉴에서 사용자별 역할 맵핑을 진행합니다.
우선 사용자 - 글로벌 역할을 맵핑합니다.

그리고 사용자 - 프로젝트(item) 역할을 맵핑합니다.

Item roles에서의 사용자는 위 Global roles에서 사용자에게 부여한 역할의 권한을 상속받게 됩니다. 그래서 예시의 경우, 상연1, 상연2 사용자에게 부여한 developer 역할의 권한을 가지고 있으면서, 추가로 상연1의 경우 Test1_Developer 역할의 권한을, 상연2의 경우 Test2_Developer 역할의 권한을 부여받게 됩니다.
어드민 권한을 가지고 있어 'Jenkins 관리' 메뉴에 접근할 수 있습니다.

예시에서 manager 역할은 별도 제약 없이 모든 프로젝트에 접근할 수 있습니다.('Jenkins 관리' 메뉴, 'Credentials' 메뉴 접근 권한은 없습니다.)

추가로, 뷰나 프로젝트를 삭제할 수 있는 권한을 가지고 있어 'Project 삭제' 메뉴가 노출됩니다.

예시에서 developer 역할은 Credentials 설정 권한을 가지고 있어 'Credentials' 메뉴가 노출되며, Test1_Developer 역할은 프로젝트명이 Test1로 끝나는 경우에만 Job, View 생성/수정 권한을 가지고 있어 Test2 관련 프로젝트는 노출되지 않습니다.

추가로, manager 역할과 달리 프로젝트 삭제 권한이 없어 'Project 삭제' 메뉴가 노출되지 않습니다.

예시에서 Test2_Developer 역할은 프로젝트명이 Test2로 끝나는 경우에만 Job, View 생성/수정 권한을 가지고 있어 상연1이 권한을 가지고 있는 Test1 관련 프로젝트는 노출되지 않습니다.

예시에서 guest 역할은 모든 프로젝트 열람 권한만 가지고 있기 때문에 추가/수정 등은 불가하고 프로젝트 열람만 가능합니다.

그래서 프로젝트 접근 시 '작업공간', '지금 빌드', '구성' 등의 메뉴 노출 없이 '상태', '변경사항' 메뉴만 확인할 수 있습니다.

예시에서 Anonymous 역할에게 아무런 권한을 부여하지 않았기 때문에 Jenkins 로그인 페이지만 노출됩니다.
