[CI/CD] 젠킨스 설정

유혜지·2024년 2월 23일

해당 게시물은 [초보를 위한 젠킨스 2 활용 가이드] 교재를 기반으로 작성되었습니다.


이번 게시물에서는 다음곽 같은 젠킨스 관리자 작업을 수행하는 방법을 다룬다.

  • 젠킨스 플러그인의 업데이트/설치/제거/다운그레이드
  • 젠킨스 플러그인 수동 설치
  • 젠킨스 백업과 복원
  • 리눅스에서 젠킨스 업그레이드
  • 도커 컨테이너에서 돌아가는 젠킨스 업그레이드
  • 젠킨스 사용자 생성 및 관리
  • 다양한 젠킨스 인증 방식
  • 젠킨스의 다양한 권한 설정 방식

해당 장에서는 젠킨스의 기본적인 관리 작업만을 알아본다.

| 젠킨스 플러그인 매니저

젠킨스 플러그인은 젠킨스에 설치돼 젠킨스의 기능을 강화시키는 소프트웨어라 할 수 있다. 젠킨스에 설치된 플러그인은 젠킨스 잡이나 시스템 설정화면, 혹은 Snippet Generator(서술적 파이프랑니 문법과 호환될 경우) 하의 이벤트에서 파라미터나 설정 가능한 항목으로 나타난다.

다음 화면은 소나큐브(SonarQube) 도구(정적 코드 분석 도구)를 설정하는 젠킨스 시스템 환경 설정 화면이다. 이 설정은 소나큐브를 위한 젠킨스 플러그인의 설치 이후에 가능하다.

이번 절에서는 젠킨스 플러그인 매니저를 이용해 어떻게 플러그인을 관리하는지 알아본다.

  1. 젠킨스 대시보드에서 Jenkins 관리 > Plugins를 클릭한다.
  2. Updates, Available, Installed, Advanced 네 가지의 탭을 볼 수 있을 것이다.

젠킨스 플러그인 업데이트

Updates 탭은 업데이트가 필요한 플러그인의 목록을 나열한다. 난 플러그인을 설치한 지 시간이 얼마 지나지 않아 업데이트할 목록이 없는 모양이다.

젠킨스 공식 홈페이지의 사진을 참고하여 설명하자면, 플러그인을 업데이트하기 위해 해당하는 체크박스를 선택한 후, Download now and install after restart 버튼을 클릭한다.

Updates 탭 페이지 하단에 보면 Check now 버튼을 볼 수 있다. 이 버튼은 플러그인 목록을 리프레시하는 버튼이다. 업데이트할 플러그인을 선택한 뒤, install하고 이 버튼을 눌러주면 Updates 탭에서 사라지는 것을 확인할 수 있을 것이다.

새로운 젠킨스 플러그인 설치

Available 탭은 젠킨스에서 사용 가능한 모든 플러그인의 목록을 나열한다. 이미 설치되어 있는 플러그인은 여기에 나타나지 않는다.

원하는 플러그인에 해당하는 체크박스를 선택한 후, 페이지 하단에서 Install without restart 버튼이나 Download now and install after restart 버튼을 누른다.

위 사진에는 안보이지만, 여기서도Updates 탭과 마찬가지로 페이지 하단에 Check now 버튼이 있다. 이를 누르면 페이지가 리프레시된다.

젠킨스 플러그인을 삭제하거나 다운그레이드하기

Installed 탭은 사용자의 젠킨스에 설치된 모든 플러그인 목록을 나열한다. 다음 화면처럼, 플러그인을 삭제하거나 다운그레이드하기 위한 옵션이 있는 것을 볼 수 있다.

플러그인 업데이트 이후 젠킨스가 불안정하거나 CI/CD 파이프라인이 잘 동작하지 않을 경우 다운그레이드할 수 있다.

Advanced Settings

교재에서는 [젠킨스에 프록시 설정하기] 부분이 있는데, 해당 부분은 현재 젠킨스에서 사라진 것으로 보인다.

Advanced 탭은 아래와 같이 나타난다. Deploy Plugin 영역이 있다. 이를 통해 젠킨스 플러그인을 수작업으로 설치하거나 업데이트할 수 있다.

이 기능은 젠킨스가 인터넷에 연결되어 있지 않은 상태에서 새로운 플러그인을 설치하거나 업데이트해야 할 때 유용하다.

추가로, 이미 설치된 젠킨스 플러그인에 새로운 버전이 릴리스되었을 때 업데이트를 진행할 사이트를 설정할 수도 있다.

젠킨스 백업과 복원

젠킨스 환경 설정을 담당하는 사람이 안정적인 이전 버전의 환경 설정으로 돌아가고 싶은 경우를 생각해보자.

지금까지 배운 내용으로, 젠킨스 설정 전체가 젠킨스 홈 폴더에 저장된다는 것을 알고 있다. 내 작업 환경같은 경우, 우분투이기 때문에 /var/lib/jenkins이다.

ThinBackup 플러그인 설치하기

  1. 젠킨스 대시보드에서 Jenkins 관리 > Plugins를 클릭한다.

  2. Available 탭을 클릭한 뒤, ThinBackup을 검색한다.

  3. 체크박스를 선택한 후, Install 버튼을 누른다.

ThinBackup 플러그인 설정하기

ThinBackup 플러그인을 사용하기 전에 무엇을, 어디에, 얼마나 자주 백업할지 정해야 한다. 다음 단계를 따라하자.

  1. 젠킨스 대시보드에서 Jenkins 관리 > Tools and Actions 영역에 ThinBackup Manager로 이동하자.

  2. 해당 페이지로 처음 접근하게 되면 다음 화면이 나타날텐데, Settings 버튼을 클릭한다.

  3. 설정해야 할 옵션들이 많이 나타난다.

  • Backup directory : 백업을 저장하는 장소
  • Backup schedule for full backups은 언제, 그리고 얼마나 자주 백업을 만들지 지정하는 공간이다. 이 영역은 빈칸으로 남겨두지 말자. 해당 영역은 cron 문법을 지원한다. 예를 들어, 매일 자정 백업하기 위해서는 다음 cron 문법을 사용하면 된다.
H 0 * * *
  • Max number of backup sets: 젠킨스에서 여기 작성된 개수를 초과하는 백업을 정의하지 않게 정의한다. 여기서는 10개로 지정한다.
  • 다음과 같은 많은 체크사항들이 있는데, 이는 다음 설명과 같다.
    • Wait until Jenkins is idle to perform a backup: 백업을 수행하기 위해 Jenkins이 idle 상태가 될 때까지 기다림.
      Force Jenkins to quiet mode after specified minutes: 지정한 시간이 지난 후 Jenkins는 자동모드가 됨
    • Backup build results: 빌드 결과 백업
      Backup build archive: 아카이브 빌드 백업
      Backup only builds marked to keep: 백업만 유지되도록 표시된 빌드
    • Backup UserContent folder: userContent 폴더 백업
    • Backup next build number file: 다음 빌드 번호 파일 백업
    • Backup plugins archives: 아카이브 플러그인 백업
    • Backup additional files: 추가 파일 백업
    • Clean up differential backups: 증분 백업 정리
    • Move old backups to ZIP files: 이전 백업 파일을 ZIP 파일로 이동
    • Stop the backup as soon as an exception occurs in the file handling: 파일 핸들링 중 예외 발생 시 백업 중단


나는 위와 같이 설정하고 Save버튼을 눌러줬다.

젠킨스 백업 생성하기

ThinBackup 플러그인을 설정했으므로, 이제 설정을 테스트하기 위해 백업을 진행해보자. Save 버튼을 누르면 아래와 같은 화면이 나타날 것이다. Backup now 버튼을 클릭하자.

잠깐 로딩 후 백업 디렉토리로 설정한 경로로 가서 확인하면 다음과 같이 백업이 완료된 것을 확인할 수 있다.

젠킨스 백업 복원하기

백업을 복원하기 전에 복원이 잘 진행됐는지 확인하기 위해 몇 가지 환경 설정을 변경해보자.

  1. Jenkins 관리 > System를 클릭한다.
  2. System 영역에서 # of executors 영역의 값을 2에서 5로, Quiet period 영역의 값을 5에서 10으로 변경한 뒤, 페이지 하단의 Save 버튼을 누른다.
  3. 이제 젠킨스를 위 변경 사항을 적용하기 전의 포인트로 복원시켜보자.
  4. Jenkins 관리 > ThinBackup을 클릭한다.
  5. 다음과 같이 나타나는 페이지에서 Restore 버튼을 누른다.
  6. 다음과 같이 백업을 남긴 시간대가 드롭다운 목록으로 나타난다. 적절한 시간대를 설정한 다음 Restore 버튼을 눌러준다.
  7. 페이지를 새로고침한 후 젠킨스 대시보드에서 Jenkins 관리 > System을 클릭한 뒤, 조금 전에 수정했던 # of executorsQuiet period 영역의 값이 각각 2와 5로 설정돼 있는 것을 볼 수 있다.

백업과 복원 로그 확인하기

젠킨스 백업과 복원에 대한 전체 로그를 확인할 수 있다. 로그의 상세 사항을 확인하는 방법은 다음과 같다.

  1. 젠킨스 대시보드에서 Jenkins 관리 > System Log을 클릭한다.
  2. Logs 페이지의 로그 기록기 영역에서 모든 Jenkins 로그을 클릭하면 수행된 백업과 복원 작업의 전체 로그를 볼 수 있다.

| 젠킨스 업그레이드

젠킨스의 릴리스에는 LTS 릴리스와 위클리 릴리스 두 가지 종류가 있다. 젠킨스 위클리 릴리스는 새로운 기능과 수정된 버그들이 적용돼 있고, LTS(Long Term Support) 릴리스는 12주 간격의 안정적인 버전이다. 젠킨스 서버에는 항상 LTS 릴리스를 설치하는 것을 권장한다.

젠킨스의 새로운 버전이 나올 경우 젠킨스 자체에서 이를 알려준다(젠킨스 서버가 인터넷에 연결돼 있어야 한다).

우분투에서 스탠드얼론 젠킨스 업그레이드

교재에는 윈도우, 아파치 톰캣에서 젠킨스를 업그레이드하는 방법도 다루나, 내가 작업 중인 환경인 우분투에서 업그레이드하는 방법만 다루겠다.

다음 단계를 따라하자.

  1. 젠킨스 서버에 root 사용자로 로그인한다.
  2. 다음 명령어를 통해 /tmp 폴더에 최신(LTS) 버전의 jenkins.war를 다운로드한다.
cd /tmp
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
  1. 젠킨스를 업그레이드하기 전에 jenkins_home 폴더를 백업해놓는 것이 매우 중요하다. 이는 '젠킨스 백업과 복원' 절의 '젠킨스 백업 생성하기'를 참고하자.
  2. 이제, 젠킨스 서비스를 중지시킨다.
sudo systemctl stop jenkins
  1. 기존 jenkins.war 파일이 있던 경로로 이동해war 파일을 백업한다. 그리고 jenkins 폴더 이외의 장소로 옮겨놓은 뒤 기존의 jenkins.war 파일을 삭제하자.
cp jenkins.war /tmp/jenkins.war.last.stable.version
rm -r jenkins.war
  1. 그런 다음 새로 다운로드한 jenkins.war을 기존 jenkins가 서비스 중이던 폴더로 이동시키자.
sudo mv {내려받은 war의 경로} {jenkins가 서비스 중이던 war의 경로}
  1. 이제 다음 명령어를 통해 젠킨스 서비스를 시작한다.

| 사용자 관리

이제 젠킨스가 사용자 관리를 위해 어떤 기능을 제공하는지 알아보자. 젠킨스 대시보드에서 Jenkins 관리 > Security로 접속하자.

젠킨스에서 전역 보안의 활성화와 비활성화

Security 페이지에 들어오면 Authorization 영역에 Logged-in users can do anything 옵션이 선택돼 있는 것을 볼 수 있다. 이를 Anyone can do anything으로 바꾸게 되면, 젠킨스 URL을 알고 있는 사람은 어떤 종류의 제한도 없이 젠킨스에 접속할 수 있게 된다.

인증 방식

젠킨스는 다양한 방식의 인증(Authentication) 방식을 제공한다. 다음은 가능한 목록이다.

  • 서블릿 컨테이너에 위임
  • 젠킨스 자체의 데이터베이스
  • LDAP
  • 유닉스 사용자/그룹 데이터베이스

젠킨스 설정 마법사에서 생성한 최초의 사용자 정보는 Jenkins' own user database 아래에 모두 저장된다. 실제 데이터베이스 종류는 존재하지 않고, 모든 정보는 XML 파일로 저장된다.

젠킨스 내부에 새로운 사용자 생성하기

이는 Jenkins' own user database를 인증 방식으로 사용할 경우에만 적용된다. 다음과 같이 새로운 사용자를 젠킨스 서버에 추가하자.

  1. 젠킨스 대시보드에서 Jenkins 관리 > Users를 클릭한다.
  2. 우측 상단의 Create User를 클릭한다.
  3. 다음 화면과 같이 기본적인 정보를 묻는 페이지가 나타날텐데, 해당 빈칸들을 채운 후 Create User 버튼을 누른다.

People 페이지

대시보드의 왼쪽 사이드 메뉴에 사람을 클릭하여 들어가면, 다음 화면과 같이 젠킨스에 접근 가능한 모든 사용자를 보여준다.

젠킨스의 사용자 정보 및 설정

특정 사용자의 ID나 이름을 눌러 해당 사용자의 정보로 들어가면 다음 화면과 같이 나타난다.

사용자의 왼쪽 사이드 메뉴의 옵션들을 상세히 알아보자.

  • 빌드: 현재 사용자로 인해 시작된 모든 빌드의 정보를 보여준다.
  • My Views: 현재 사용자가 접근 가능한 뷰의 종류를 보여준다. 현재 사용자를 위한 뷰가 설정되지 않았다면, My Views 페이지는 젠킨스의 기본 All 뷰를 보여주게 된다.

권한 설정 방식

젠킨스는 다양한 방식의 권한 설정을 지원한다. 다음은 권한 설정 목록이다.

권한 설정은 Jenkins 관리 > Security 페이지로 들어가 Authorization 영역에서 볼 수 있다.

  • Anyone can do anything
    이 옵션을 선택할 경우, 젠킨스는 어떤 권한 관련 제한도 적용하지 않는다. 익명 사용자뿐만 아니라 젠킨스에 접속할 수 있는 모든 사용자라면 모든 권한을 갖는다.
  • Legacy mode
    이 옵션을 선택할 경우 젠킨스는 릴리스 1.164 이전 방식으로 동작한다. 즉, 젠킨스가 사용자 명이 Admin인 사용자를 찾는다. Admin 사용자는 관리자 권한이 주어지며, 이외의 사용자는 익명 사용자로 취급된다.
  • Logged-in users can do anything
    이 옵션은 새로운 젠킨스를 설치했을 때 기본적으로 적용돼 있는 옵션이다. 이름 자체가 의미를 내포하고 있는데, 로그인한 사용자는 기본적으로 관리자가 된다.

    Logged-in users can do anything 영역 아래에 Allow anonymous read access 옵션이 있다. 이 옵션이 활성화되면, 젠킨스 URL에 접근 가능한 모든 사람은 모든 젠킨스 잡에 대해 읽기 전용 권한이 주어지고, 젠킨스 대시보드로 이동된다. 하지만 젠킨스 잡을 수정하거나 환경 설정을 보려면 로그인해야 한다.

  • Matrix-based security
    이 방식은 젠킨스에서 가장 널리 사용되는 권한 설정 방식이다. 다음 단계를 따라하면서 자세히 알아보자.
  1. Matrix-based security 권한 설정 방식을 선택해 이를 적용시킨다. 다음 매트릭스가 나타날 것이다.
  2. 이전 화면에서 젠킨스의 여러 항목을 나타낸 열과, 사용자를 나타낸 행을 볼 수 있다. 매트릭스 하단에 사용자를 추가할 수 있는 옵션이 있다. 새로운 사용자를 추가하고 권한을 부여해보자.
  3. 사용자를 추가하려면 Add User 버튼을 클릭한 후 뜨는 팝업에 사용자명을 입력하면 된다.
  4. 다음 화면에서 세 명의 사용자가 된 것을 확인할 수 있다.
  5. 이제, 적절한 체크박스를 선택해 권한을 부여해보자. 다음 화면에서 보면 Authenticated Users 사용자에게 모든 권한을 부여한 것을 볼 수 있다. hyejiyu 사용자에게는 젠킨스 잡에 대한 읽기와 실행 권한이 주어졌고, Anonymous 사용자는 읽기 권한만 주어졌다.
  6. 이외의 설정은 그대로 유지한 후 페이지 하단의 Save 버튼을 클릭하자.
  • Project-based matrix Authorization Strategy
    앞에서 matrix-based security 권한부여 방식이 사용자와 권한에 충분한 설정 방식을 제공하는 것을 알아봤다.
    하지만 젠킨스 서버가 계속 켜져서 수백 개의 젠킨스 잡과 많은 사용자가 존재하고, 잡 단위에서 권한을 설정하는 것을 상상해보자. 이런 경우에 Project-based Matrix Authorization Strategy가 필요하다.

    이제 Project-based Matrix Authorization Strategy를 어떻게 설정하는지 살펴보자.
  1. Jenkins 관리 > Security로 이동하자.

  2. Project-based Matrix Authorization Strategy를 선택하자. 다음과 같은 매트릭스가 나타날 것이다.

  3. 사용자를 추가해 모든 권한을 부여해보자. Add User 버튼을 클릭해 사용자의 정확한 사용자명을 입력하여 사용자를 추가한다.

  4. 다음 화면에서 hyejiyu 사용자에게 모든 권한을 준 것을 볼 수 있다.

  5. 나머지 설정은 그대로 둔 후 페이지 하단의 Save 버튼을 클릭한다.

  6. 다음으로, 젠킨스 대시보드에서 임의의 job으로 들어가 Configure를 선택한다.

  7. Enable proejct-based security 옵션까지 스크롤한 후 이를 활성화시킨다. 다음 화면과 같은 매트릭스가 나타날 것이다.

  8. 사용자를 추가하고 권한을 부여해보자.

  9. 다음 화면을 보면 hyejiyu2 사용자가 몇 가지 권한과 함께 추가된 것을 알 수 있다.

  10. 완료되면 페이지 하단의 Save 버튼을 클릭한다.

이제 해당하는 젠킨스 잡에 권한을 부여한 사용자로 로그인한다(이 경우 hyejiyu2). 사용자가 접근 권한이 있는 잡만 볼 수 있는 것을 확인할 수 있을 것이다. 유사하게, 젠킨스에서 생성한 모든 잡에 대해 사용자 권한을 설정할 수 있다.

0개의 댓글