스프링을 이용하여 웹 어플리케이션 개발 프로젝트를 진행하면서 .war 파일을 직접 배포하는 과정이 너무 비효율적이라 젠킨스를 이용하여 배포하기로 하였습니다. 톰캣설정이나 여러가지 설정을 해야해서 생각보다 삽질을 많이했네요. 생각보다 설치과정이 길어서 포스팅이 조금 길어졌습니다.

 

현재 JDK, MAVEN 설치를 완료 후 환경변수 설정까지 완료한상태고, 톰캣을 미리 설치하고 서버를 구동하고 있다는 가정하에 진행하도록 하겠습니다. 만약 톰캣을 설치하지 않았다면 하단의 포스팅을 참고해주세요.

 

우분투 톰캣설치 : https://insight-bgh.tistory.com/90?category=857507

 

1. Jenkins 설치

sudo wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo echo deb https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt-get update
sudo apt-get install jenkins

다음 명령어를 한줄씩 입력하여 Jenkins 설치를 진행합니다. 

 

sudo nano /etc/default/jenkins

이제 젠킨스의 포트를 변경해보겠습니다. 톰캣 서버도 기본으로 8080을 사용하고, 젠킨스도 마찬가지로 8080 포트를 사용하기 때문에 충돌이 나지 않게 변경하는게 좋습니다. 저같은 경우에는 30000번째 포트로 변경을 하였습니다.

 

sudo systemctl start jenkins
sudo systemctl status jenkins

이제 설치를 완료한 jenkins를 실행하고, 실제로 동작하는지 상태를 살펴 봅니다.

 

2. Jenkins 접속

웹브라우저에 http://<서버IP>:(변경포트) 를 입력하여 접속하면 다음과 같은 화면을 볼 수 있습니다. 

처음 접속하면 잠금을 풀어야하므로 젠킨스(Jenkins)를 설치할 때 생성된 파일의 내용을 빈칸에 입력해야합니다. 다음 명령어를 실행하여 나온 결과를 입력해줍시다.

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

그리고 나서 Install suggested plugins를 클릭하면 추천하는 plugins을 자동으로 설치해줍니다.

설치가 완료되면 admin 계정을 생성하고 jenkins에 접속을 완료합니다.

3. 젠킨스(Jenkins) 플러그인 설치

왼쪽 메뉴바에서 Jenkins관리 -> 플러그인 관리 -> 설치 가능 메뉴로 이동 후 다음의 플러그인을 설치합니다.

● Deploy to container Plugin

 

4. SSH키 생성

이제 인증을 위한 SSH키 생성을 합니다. 다음의 명령어를 입력하여 키를 생성합시다. 키의 이름은 자신이 정하면 됩니다. 

ssh-keygen -t rsa -f id_rsa

개인키(id_rsa)와 공개키(id_rsa.pub) 2개가 생성되었는데, 개인키(id_rsa)는 젠킨스에 설정해줍니다.

cat id_rsa

cat 명령어를 통해 개인키 값을 보면 나오는 모든 텍스트를 복사합니다. 처음부터 끝까지 전부 복사해 주어야합니다.

-----BEGIN RSA PRIVATE KEY-----
<키값>
-----END RSA PRIVATE KEY-----

 

이제 Jenkins -> credential -> system -> global credential -> add credential 로 들어갑니다.

공개키(id_rsa.pub)는 github에 설정해줍니다. 마찬가지로 cat명령어를 이용합니다.

cat id_rsa.pub

이제 공개키(rsa.pub)를 깃허브에 입력하는 작업을 진행하겠습니다. 깃허브 프로젝트에 Settings에 들어가서 왼쪽 메뉴바에서 Deploy keys를 클릭하고 Add deploy keys를 클릭합니다.

키의 제목을 입력해주고 공개키 값을 KEY에 붙여 넣고 Add key 버튼을 클릭합니다.

5. Jenkins 설정

Jenkins 관리 -> Global Tool Configuration 메뉴에 들어옵니다. JDK, Git, Maven 이 3가지에 대한 설정을 하겠습니다.

5.1 JDK 설정 

다음과 같이 서버에서 JDK가 설치된 폴더의 경로를 적어줍니다. 만약 JDK가 설치되어있지 않다면 JDK를 설치해주고 환경변수 등록까지 해줍니다.

5.2 Git 설정

 

5.3 Maven 설정

Maven도 마찬가지로 Maven이 설치 된 경로를 적어줍니다. 만약 Maven이 설치되어있지 않다면 Maven을 설치하고 환경 변수 등록까지하는 작업을 진행해줍니다.

이렇게 3가지 설정을 완료후 Apply버튼을 누르고 Save 버튼을 클릭해서 저장해줍니다.

 

6. Apache Tomcat 관리자 모드 설정

6.1 Tomcat 관리자 계정 설정

tomcat을 설치한 폴더의 conf 폴더 아래에 tomcat-users.xml 이라는 파일이 있습니다. 여기에서 tomcat 관리자 계정을 설정해줍니다. 다음과 같이 주석을 제거하고 입력해줍니다. user에는 tomcat이라는 유저 이름과 비밀번호로 1234를 예시로 넣어놨습니다.

  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-status"/>
  <role rolename="manager-jmx"/>
  <user username="tomcat" password="1234" roles="manager-gui,manager-status,manager-script,manager-jmx"/>

6.2 manager app 클라이언트 허용 설정

tomcat8/webapps/manager/META-INF 경로에 있는 context.xml을 수정하겠습니다. Context를 다음과 같이 변경해줍니다.

<Context antiResourceLocking="false" privileged="true" >

 <Valve className="org.apache.catalina.valves.RemoteAddrValve"

         allow=".*" />

<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>

</Context>

 

이렇게 적용 후 tomcat8/bin 아래 있는 쉘스크립트를 이용하여 서버를 중지하고 다시 실행하겠습니다.

cd /tomcat8/bin
./shutdown.sh
./startup.sh

7. ITEM 생성

Jenkins메인페이지에서 왼쪽 메뉴바의 ITEM을 클릭합니다. 이제 ITEM의 이름을 입력하고, Freestyle project를 클릭 후 하단의 OK 버튼을 클릭합니다.

7.1 General 설정

다음과 같이 설명에는 아이템의 설명을 적고 Project url에는 자신의 깃허브(github) 주소를 입력합니다. 

7.2 소스 코드 관리

7.3 Build

고급 버튼을 클릭하여 POM의 경로를 지정해줄 수 있습니다. 젠킨스에서 BUILD시 pom.xml의 경로를 잡지 못해서 직접 입력해 주었습니다. POM의 경로는 /var/lib/jenkins/workspace/PickVs  -> 여기서 PickVs에 해당하는 부분은 젠킨스의 아이템 이름과 같습니다. 각자 자신의 아이템 이름을 입력해주세요

-P production

뒤에서 pom.xml 파일에 <profile>을 작성할 것인데, 이 설정은 <id>가 production인 <profile>설정 그대로를 컴파일 하라는 의미입니다. 윈도우 환경의 이클립스에서 톰캣의 Servlet은 런타임 환경에서 자동으로 classpath에 잡히지만, 리눅스에서는 이클립스를 사용하지 않기 때문에 <profile>설정을 해줘야 합니다. (그동안 이클립스에서 maven으로 build를 하지 않기 때문에, pom.xml 파일에서 <profile>을 설정하지 않았습니다. )

 

-D maven.test.skip=true

테스트를 생략하겠다는 설정입니다. Junit을 사용하지 않을 것이므로 생략했습니다.

 

7.4 빌드 후 조치

Deploy war/ear to a container를 선택 후 아래 사진과 같이 WAR/EAR files, Context path를 입력해줍니다. 저는 Tomcat8을 사용중이기 때문에 Containers에 Tomcat8을 선택하였고, Credentials에는 tomcat-users.xml에서 설정한 사용자이름과 비밀번호를 입력합니다. 그리고 Tomcat URL에는 서버 주소를 입력합니다.

Credentails Add 클릭 후 유저아이디, 비밀번호 입력

6번 절에서 tomcat-users.xml에 입력했던 유저아이디와 비밀번호를 넣어줍니다.

8. pom.xml

이제 배포할 프로젝트의 pom.xml을 수정해야합니다 첫번째로는 UTF-8 설정을 넣어줍니다.

	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>3.2.9.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
        
        <!-- Jenkins에서 사용하는 부분 -->
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
	</properties>

두번째로 젠킨스에서 사용할 production 설정입니다.

    <!-- Jenkins에서 사용하는 부분 -->
	<profiles>
		<profile>
			<id>production</id>
			<build>
				<resources>
					<resource>
						<directory>${project.basedir}/src/main/resources</directory>
						<excludes>
							<exclude>**/*.java</exclude>
						</excludes>
					</resource>
				</resources>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-resources-plugin</artifactId>
						<configuration>
							<encoding>UTF-8</encoding>
						</configuration>
					</plugin>
				</plugins>
			</build>
			<dependencies>
				<!-- Servlet -->
				<dependency>
					<groupId>javax.servlet</groupId>
					<artifactId>javax.servlet-api</artifactId>
					<version>3.0.1</version>
					<scope>provided</scope>
				</dependency>
				<dependency>
					<groupId>javax.servlet.jsp</groupId>
					<artifactId>jsp-api</artifactId>
					<version>2.0</version>
					<scope>provided</scope>
				</dependency>
			</dependencies>
		</profile>
	</profiles>

마지막으로 톰캣 매니저 설정입니다. <url>http://localhost/manager/html</url> 안에 localhost대신에 서버의 ip 주소를 넣어도 됩니다. 그리고 username과 password에는 tomcat-users.xml에 입력했던 유저아이디와 비밀번호를 넣어줍니다. <path>에는 제가 만든 프로젝트는 ROOT경로에서 동작하기 때문에 '/' 를 넣었는데 경로가 다르면 '/프로젝트이름' 이런식으로 들어가야할꺼같네요. 이거는 저도 테스트 안해봤습니다. 참고해주세요

	<!-- Jenkins에서 사용하는 부분 -->
	<plugin>
		<groupId>org.codehaus.mojo</groupId>
		<artifactId>tomcat-maven-plugin</artifactId>
		<configuration>
			<url>http://localhost/manager/html</url>
			<path>/</path>
			<username>tomcat</username>
			<password>1234</password>
		</configuration>
	</plugin>

9. Build

만들어진 아이템에 들어와서 왼쪽의 Build Now를 누르고 별 문제 없이 빌드가 성공하였다면 제대로 연동이 완료된것입니다.

 

저도 시행착오를 많이 겪으면서 포스팅을 진행하였는데, 혹시 문제가 있다면 댓글을 달아주세요

'Linux' 카테고리의 다른 글

리눅스 rm 명령어  (0) 2020.01.02
리눅스 기본 폴더 정리  (0) 2019.12.30
[Ubuntu] 메모리 관리 명령어  (0) 2019.10.30
톰캣 관련 명령어  (0) 2019.10.19
[Ubuntu] 2.톰캣(Tomcat) 설치  (0) 2019.07.03
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기