본문 바로가기
DevOps

[Jenkins] Jenkins

by Haengsin 2022. 8. 11.
Jenkins

젠킨스는 소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴이다.

 

흔히 말하는 CI/CD 중 CI(지속적 통합, Continuous Integration) 을 구현하기 위한 툴이다.

개발 중인 저장소(git, svn 등) 에 업로드된 소스를 테스트, 빌드, 빌드 후 작업 등을 자동 동작하게 해주어 개발자의 리소스 소모가 줄어든다.

 

젠킨스는 정기적인 빌드에서 한발 나아가 서브버전, Git 과 같은 버전관리시스템과 연동하여 소스의 커밋을 감지하면 자동적으로 자동화 테스트가 포함된 빌드가 작동되도록 설정할 수 있다.

 

 

Jenkins 이점

개발중인 프로젝트에서 커밋은 매우 빈번히 일어나기 때문에 커밋 횟수만큼 빌드를 실행하는 것이 아니라 작업이 큐잉되어 자신이 실행될 차례를 기다리게 된다

 

코드의 변경과 함께 이뤄지는 이 같은 자동화된 빌드와 테스트 작업들은 다음과 같은 이점들을 가져다 준다.

  • 프로젝트 표준 컴파일 환경에서의 컴파일 오류 검출
  • 자동화 테스트 수행
  • 정적 코드 분석에 의한 코딩 규약 준수여부 체크
  • 프로파일링 툴을 이용한 소스 변경에 따른 성능 변화 감시
  • 결합 테스트 환경에 대한 배포작업

이 외에도 젠킨스는 500여가지가 넘는 플러그인을 온라인으로 간단히 인스톨 할 수 있는 기능을 제공하고 있으며 파이썬과 같은 스크립트를 이용해 손쉽게 자신에게 필요한 기능을 추가 할 수도 있다.

 

 

Jenkins 구조

  •  Jenkins Master Node
  •  Jenkins Agent Nodes/Clouds (Slave)
  •  Jenkins Web Interface

 

1. Jenkins Master (Server)

Jenkins 서버이자 Master Node 는 Jenkins Pipeline 으로 정의된 모든 흐름을 관장하는 컨트롤 서버라고 할 수 있다.

Jenkins Slave 들에게 각각의 할 일을 정해주고 분배한다.

 

2. Jenkins 작업

 

(1) Git 에서 PUSH 되어 받는 자료를 Git Hook  을 통해 정기적으로 Jenkins 가 확인함.

(2) Jenkins 테스트 과정을 다양한 Jenkins Agent (Slave) 에서 실행시키면서 독자적인 테스트 환경을 만듬.

(3) 따라서, Jenkins Slave 를 통해 얻은 결과물을 Jenkins Master 가 받아 테스트를 보고 함.

 

3.  Jenkins 플러그인 ( /var/lib/jenkins )

jenkins 에도 플러그인이 있는데, 대표적으로 AWS 와 연동할 수 있는 Plugin 이 존재한다.

- 연동한 플러그인 파일들은 /var/lib/jenkins 폴더 아래에서 확인할 수 있다.

 

4. Jenkins Global Security (전역 보안)

주로 3가지 타입의 인증 방법이 존재.

(1) Jenkins 자체 유저 DB : Jenkins 자체적으로 운영되는 DB 내 유저 정보로 XML 파일로 구성.

(2) LDAP 통합 : LDAP 에다가 Server/User/Group/Manager 정보들을 기입해 사용.

(3) SSO(Single Sign-On) 사용 : 보안 보장 마크업 언어(SAML) 을 활용해 구글 클라우드나 Azure 와 같은 사용자 인증 정보로 로그인 함.

 

5. Jenkins Credentials ( $JENKINS_HOME/secrets )

Jenkins Pipeline 을 구축할 때 다른 클라우드 계정, 서버, DB 에 연결하는 경우가 있다.

그런 경우, 연결 시 보안에 필요한 정보들을 Jenkins 에 저장할 수 있다. 

아래의 중요 정보들은 $JENKINS_HOME/secrets 폴더에 존재해 추후 백업도 가능하다.

(1) Secret text

(2) Username & Password

(3) SSH Keys

 

6. Jenkins Logs

Jenkins 는 작업 Log, Plugin Log, Web Hook Log 등의 정보를 포함한 모든 서버의 정보를 제공해준다.

 

7. Jenkins Agent

Jenkins Agent 는 Jenkins Master Node 가 작업을 시켰을 때 일을 하는 Node 라고 볼 수 있다.

Master Node 에서 작업을 발생시키면 실제 작업이 Agent Node 위에서 작동되지만, 

Agent Node 없이 Master 만으로도 작업을 진행할 수 있다. 그러나, 이 경우 작업들이 서로 겹치며 충돌이 발생될 수 있기에 권장하는 방법은 아니다.

 

8. Jenkins Master-Agent 연결(Connectivity)

Master와 Agent를 연결하는 방법에는 두 가지 방법이 있다.

(1) SSH : SSH 프로토콜을 사용해서 Agent 에 연결하는 것으로 Master 에서 연결이 시작.

(2) JNPL : JNPL(Java Network Launch Protocol) 을 50000 포트에서 사용해 Agent 로부터 연결하는 작업으로 사전에 Master 방화벽을 열어놓아야 가능하다.

 

9. Jenkins Data ( /var/lib/jenkins )

Jenkins Data는 주로 /var/lib/jenkins 에 저장된다. 작업/플러그인 config 파일이나 보안 및 노드 정보를 담고 있으며 Jenkins 로의 정보 이전이 쉽게 설계되어 있다.

 

Jenkins 설치

(1) 패키지 관리자 업데이트

sudo yum update

(2)  Jenkins 환경에 필요한 JDK 다운로드

jenkins는 java로 작성된 프로그램으로 jdk8 또는 jdk11을 이용하여 동작한다.

따라서 jdk를 설치해야 한다.

 sudo yum install java-1.8.0-openjdk-devel.x86_64
 
 echo $JAVA_HOME
 
 which javac
 
 readlink -f /bin/javac

현재 JAVA_HOME 이 설정되어 있는지 확인. 아무것도 뜨지 않으면 설정이 안 되어 있는것.

따라서 환경변수를 설정해야한다.

먼저 which javac 를 입력해 javac 명령어의 위치를 찾는다.

이후 readlink -f [javac 명령어 위치] 를 입력해 JAVA_HOME 경로를 얻어낸다.

 

(3) 환경변수 등록

위의 경로를 JAVA_HOME 환경변수로 등록해야한다.

sudo vi /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/bin/javac

 

(3) jenkins repository 추가

  • https://pkg.jenkins.io/redhat-stable/jenkins.repo 경로의 파일을 다운로드 받아 /etc/yum.repos.d/jenkins.repo 경로에 복사.
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

(4) jenkins 설치

sudo yum install -y jenkins

  • public key for jenkins-2.346.3-1.1.noarch.rpm is not installed

(5) key 추가

sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key

(6) jenkins 다시 설치

sudo yum install jenkins

(7) jenkins 설정 파일 열기

(8) Jenkins 구동 확인

sudo systemctl start jenkins
sudo systemctl status jenkins
sudo systemctl enable jenkins

 

jenkins 실행 후 http://{jenkins를 설치한 서버 IP}:{설정한 jenkins port} 로 접속하면 다음과 같이 Administrator password를 요구한다.

 

 

Administrator password는 이미지에서 명시되어 있는것과 같이 아래의 경로에 작성되어 있다.

 sudo cat /var/lib/jenkins/secrets/initialAdminPassword

 

plugins를 직접 선택할 필요 없다면 추천해주는 plugins가 설치되도록 진행

 

 

Reference