[Jenkins] Jenkins로 자동 빌드 배포 환경 구축하기

들어가며

 

회사에서는 이미 빌드 배포환경이 구축되어있기 때문에 구축해볼 기회가 없어 사이드프로젝트에 직접 구축해보면 좋을것같아 구축한 내용을 포스팅하고자한다.

 

해당 포스팅은 다음의 환경에서 진행됐다.

 

  • centos 7.5
  • maven 3.6.1
  • spring
  • tomcat 7
  • github 

 

 

 

Jenkins 설치

 

jenkins repository 설정

 

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

 

key import

 

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

 

jenkins 설치

 

yum install jenkins

 

jenkins 포트 변경

 

jenkins는 기본 포트가 8080이다. 만약 8080 포트를 이미 사용중이라면 아래와 같은 경로에 jenkins 파일을 열어 

 

/etc/sysconfig/jenkins

 

JENKINS_PORT의 값을 위의 이미지처럼 8080이외의 값으로 설정하면 된다.


 

jenkins 실행

 

/etc/init.d/jenkins start

 

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

 

 

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

 

/var/lib/jenkins/secrets/initialAdminPassword

 

그리고나서 plugins를 직접 선택할 필요 없다면 추천해주는 plugins가 설치되도록 진행하면된다.

 

 

 

 

 

 

Jenkins 설정

 

구축하려는 환경은 maven과 git을 이용한 spring 웹 애플리케이션 배포이므로 Jenkins Global Tool Configuration 설정에서 git, maven, jdk를 설정한다.

 

아래와 같이 설정 페이지로 이동한다.

 


 

 

 

[JDK 설정]

 

 

Install automatically : 비활성화

Name : 자유롭게 작성

JAVA_HOME : jenkins 서버의 JAVA_HOME 경로를 기입

 

jenkins 서버에 java가 설치되어 있지 않다면 추가적으로 설치해준다.

 

yum install java-1.8.0-openjdk-devel

 

 

 

 

[Git 설정]

 

 

 

Install automatically : 비활성화

Name : 자유롭게 작성

Path to Git executable : jenkins 서버의 git 커맨드 경로를 기입

 

git 역시 설치되어있지 않다면 추가적으로 설치해준다.

 

yum install git

 

 

 

 

[Maven]

 

 

 

Install automatically : 활성화

Name : 자유롭게 작성

Version : 되도록 배포하고자하는 메이븐프로젝트 버전과 일치시켜준다.

 

 

 

 

 

 

 

Job 작성

 

이제 실제 빌드 배포를 수행하는 job을 작성한다. 메뉴는 다음과 같다.

 


 

 

소스 코드 관리

 

Job 실행시 배포할 코드를 github repository에서 가져오기위한 설정을 진행한다.

Branch Specifier는 repository 브랜치를 명시하면된다.

 

 


 

Credentials에 기입되는 내용을 살펴보자.

 

jenkins와 github 연동방식은 다음과 같이

1) 사용자명과 비밀번호

2) SSH

두가지가 존재하지만 첫번째 방식은 보안상 추천되지 않기 때문에 두번째 방식으로 진행하고자 한다.

 

방법은 간단하다. 비대칭키를 생성해 준 후 public key는 github repository에, private key는 위의 이미지의 Credentials에 등록되면 된다.

 

먼저 비대칭키를 생성한다.

 

mkdir /var/lib/jenkins/.ssh
ssh-keygen -t rsa -f /var/lib/jenkins/.ssh/key

 

Passphrase 요구시 모두 Enter를 입력한다.

 

 

그러면 다음과같이 .ssh 디렉토리 안에 private key와 public key가 생성된다.

 

key   key.pub

 

private key 부터 credential에 등록해보자. (.pub가 안붙어있는게 private key 다.)

 

 

private key 내용을 복사해둔 후

 

 

 

 

Credentials Add를 클릭하면 나오는 팝업에서 위와 같이 설정 후 복사한 private key를 기입해주면 된다.

 

 

public key도 마찬가지로 복사해둔 후 빌드 배포하고자하는 github repository의

Settings > Deploy keys > Add deploy key 로 진입한다.

 

 

 

위와 같이 입력을 완료하면 아래와 같이 public key 등록이 완료된것을 확인할 수 있다.

 

아래와 같이 Repository URL에 cloning에 사용되는 URL을 기입해주면된다.

 

 

 

 

 

 

 

Build

 

빌드 설정을 진행한다.

Maven 환경이기 때문에 Invoke top-level Maven targets를 선택해준 후 Goals를 작성해준다.

 

 

 

 

 

 

 

빌드 후 조치

 

maven을 통해 빌드 후 패키징됐다면 패키징된 .war 파일을 톰캣이 구동중인 원격 서버에 배포되어야한다.

아래와 같이

빌드 후 조치 > Deploy war/ear to a container를 선택한다.

 

※ 만약 해당 메뉴가 보이지 않는다면 플러그인 관리에서 Deploy to container Plugin을 설치해준다.

 

 

 

WAR/EAR : 실제 빌드시 /var/lib/jenkins/workspace 디렉토리에 .war 파일이 생성되는데 job 실행시 해당 .war를 가져올 수 있도록 경로를 입력한다.

Context path : 배포시 사용할 컨텍스트를 지정한다.

Containers > Tomcat URL : 배포되는 원격 서버 URL을 입력한다. http://{host}:{tomcat port}

Containers > Credentials : jenkins 서버가 원격서버에 배포할 수 있게 원격서버측에서 jenkins 서버 접근을 허용해줘야 한다.

 

[Jenkins 서버 접속 허용]

 

톰캣이 구축되어있는 원격서버에서 아래 경로의 파일 내용을 수정한다.

 

/webapps/manager/META-INF/context.xml

 

 

<Value> 태그에 allow 속성에서 jenkin서버 IP를 추가해 접근을 허용해준다. (allow 속성 값은 정규식값을 파이프 문자(|)로 구분되어 가진다.)

 

tomcat.apache.org/tomcat-7.0-doc/config/valve.html

 

Apache Tomcat 7 Configuration Reference (7.0.107) - The Valve Component

The valves in this section implement org.apache.catalina.Authenticator interface. Basic Authenticator Valve Introduction The Basic Authenticator Valve is automatically added to any Context that is configured to use BASIC authentication. If any non-default

tomcat.apache.org

 

 

[톰캣 원격 서버 접속 계정 설정]

 

톰캣이 구축되어있는 원격서버에서 아래 경로의 파일 내용을 수정하여 jenkins 서버에서 접속시 사용되는 username, password를 설정해준다.

 

{tomcat path}/conf/tomcat-users.xml

 

 

 

다시 jenkins 설정으로 돌아와 Containers > Credentials > Add 팝업에서 아래의 내용을 기입하여

 

 

Containers > Credentials 값을 기입을 완료해준다.

 

 

※설정을 완료했음에도 불구하고 jenkins에서 톰캣 원격 서버로 커넥션을 맺지 못하거나 TomcatManagerException: The username and password you provided are not correct (error 401) 예외가 발생한다면 톰캣을 리부팅 후 다시시도해 본다.

 

 

 

빌드 배포 작동 테스트

 

 

 

실제 빌드된 .war 파일이 톰캣이 구축된 원격 서버에 배포가 성공한것을 확인할 수 있다.