본문 바로가기
WEB ( Back, Front)/Spring

[CI/CD] 환경 구축 및 Spring boot Gradle Build 설정(Windows 환경)(2)

by 프리랜서가 들려주는 IT세계 2022. 10. 20.
반응형

Jenkins 를 아직 설치 못하신 분은 아래 포스팅을 통해 설치하시고 오시기 바랍니다.

https://big-brown-bear93.tistory.com/42

 

[CI/CD] 환경 구축 및 Spring boot Gradle Build 설정(Windows 환경)(1)

포스팅에서 다룰 주제는 아래와 같습니다. - Window 환경 : Jenkins 구성 - Gradle Build Script 배포 [Windows Jenkins Install] 1. Install File Download Install URL : https://www.jenkins.io/download/ Jenk..

big-brown-bear93.tistory.com


이번 포스팅은 설정 관련하여 포스팅을 하겠습니다.

천천히 읽으시면서 따라하시면 됩니다. A to Z 모두 담겠습니다!

 

 

 

 

 

이것을 보고 따라하기 전에 제가 하려는 의도는 아래와 같습니다.

[내가 구현하고자 하는 것]

1. Jenkins로 Gradle WAR로 Build

2. Windows Server로 WAR 파일 특정 경로로 배포하기

3. WAS 및 WEB TASK를 분배 하되, 모두 돌아가는 CI/CD 구성

4. windows server로 ftp 사용하여 배포하기

 


 

플러그인 설치

플러그인 설치 항목은 아래와 같습니다

  • Groovy postbuild -> 빌드 후 성공 or 실패의 기록을 한 눈에 볼 수 있도록 하는 Plugin 이다.
  • thinbackup -> 말 그대로 Jenkins 이중화를 위한 Backup Plugin이다

간단히 이렇게만 설치하였습니다.

별도의 작업이 필요하지 않아, 간단히 구성만 하였습니다.

 

설치는 아래와 같습니다.

 

[Jenkins 관리 -> 플러그인 관리]

이와 같이 설치 가능 항목으로 들어가, 설치하고자 하는 플러그인을 설치하시면 됩니다.

 

Git, Jenkins 연동 및 Task 등록

현재 프로젝트에서는 Yona 라는 OpenSource를 사용하고 있어

일반 생각하시는 GitHub와는 구성이 조금 다릅니다. 

 

 

 

Yona를 하기전, Task 먼저 등록하고 연동하겠습니다.

1. Jenkins로 Gradle WAR로 Build

[Task 등록]

 

위까지 선택 후, Repository 선택 -> GIT 선택 후 URL을 넣었더니 아래와 같은 에러가 발생한다.

이와 같이 나오는 에러는 Git 저장소가 "private"이기에 이와 같은 화면이 발생하는 것 입니다.

그러니 당황하시지 말고 아래와 같이 진행하세요.

 

Credentials ==> + Add 버튼 클릭

Jenkins 버튼 누르면 Popup 창이 하나 뜨면 거기서 Git 계정 정보를 적으면 됩니다.

 

 

Username : GIT userName (아무거나 해도 상관X)

Password : GIT 계정 Password

*ID : GIT 계정 ID 

(*An internal unique ID by which these credentials are identified from jobs and other configuration. Normally left blank, in which case an ID will be generated, which is fine for jobs created using visual forms. Useful to specify explicitly when using credentials from scripted configuration.) -> ID 물음표 버튼 누르면 이와같이 나옵니다.

 

위와 같이 Credential 추가 후, 빌드할 Branch 설정하면 됩니다.

 

저는 빌드를 Gradle로 하여, Gradle 설정은 Source에서 진행해야 합니다. (*build.gradle File)

https://docs.gradle.org/current/userguide/war_plugin.html#sec:war_customizing

 

The War Plugin

The default behavior of the War task is to copy the content of src/main/webapp to the root of the archive. Your webapp directory may of course contain a WEB-INF sub-directory, which may contain a web.xml file. Your compiled classes are compiled to WEB-INF/

docs.gradle.org

https://hye0-log.tistory.com/29

 

[Spring Boot]war로 배포하기 (Gradle + 내/외장 톰캣)

JSP를 사용한 Spring boot프로젝트에서 gradle + 내/외장 톰캣을 이용하여 서비스 배포하는 과정을 정리하고자 한다. 이전 포스팅(hye0-log.tistory.com/28)에서 WAR를 이용하여 배포하는 방법은 간단하다고

hye0-log.tistory.com

 

https://kwonnam.pe.kr/wiki/gradle/files

 

gradle:files [권남]

 

kwonnam.pe.kr

위를 참고하여 작성하시면 도움이 될 것입니다.

 

위와 같이 설정을 하고 나서, build 버튼을 누루면,

첫 build라 상당히 오래 걸립니다.

 

 

 

실제 war 로 build가 잘되어있는지 확인하기 위해서 아래와 같이 코드를 추가하였습니다.

 

println("war export path : " + archivePath.parent)

build 후, console LOG를 확인하면, WAR가 빌드된 경로에 가셔서 확인하시면 됩니다.

 

2. Windows Server로 WAR 파일 특정 경로로 배포하기R

이제 WAR로 압축하여 빌드를 성공했다면, 

Windows Server로 FTP로 전송하여 특정경로에 WAR를 배포하는 작업을 하겠습니다.

 

 

 

이번 프로젝트에서는 Windows Server를 사용하기에 FTP전송을 통해 WAR를 전송하는 방식을 선택하였습니다.

Linux 같은 경우, SSH를 통해서 진행을 했을텐데... 조금 아쉽네요ㅎㅎ

 

 

 

FTP 전송 Module은 Jenkins의 기본 Module이 아니기에 설치를 따로 수동으로 진행하셔야 합니다.

 

Plugin Manager 로 가셔서

이와 같이 설치 해주시면 됩니다.

설치가 완료되었다면, Jenkins Task 관리에 들어가시면,

이와 같은 항목을 보실 수 있습니다. (Send build Artifacts over FTP)

 

FTP Server Name 항목에 빈 값이라면 아래와 같이 진행하시면 됩니다.

 

시스템 설정으로 가시면, 맨 하단으로 이동하시면 이와 같은 그림을 확인할 수 있습니다.

여기서 추가 버튼을 눌러 진행하시면

그리고 Test Configuration 버튼을 눌러 확인하시면 됩니다.

 

연결된 이후 FTP Transfers 설정시, source files 안의 값은 ${workspace}\${taskName}\으로 자동으로 잡힌다.

그리고 내가 직접 설정한 war 파일 경로를 입력해주면된다.

 

 

Remove prefix는 아무것도 입력을 안하면,

source files에 입력한 "build\libs"가 Remote directory에 직접 생성되어 최종 war가 source file 구조에 맞게 보낸다.

그래서 Remove prefix는 사용해줌으로써 war만 전달받을 수 있도록 넣어줘야한다.

 

source files 관련 Pattern은 아래 링크에서 확인 가능합니다.

https://ant.apache.org/manual/dirtasks.html#patterns

 

Directory-based Tasks

Directory-based Tasks Some tasks use directory trees for the actions they perform. For example, the javac task, which compiles a directory tree with .java files into .class files, is one of these directory-based tasks. Because some of these tasks do so muc

ant.apache.org

 

 

* WEB FILE -> WINDOWS SERVER 배포.
(* gradle script로 빌드 후, FTP로 전달)

web file들을 압축하여 build script를 작성하여, jenkins gradle script task build하여 

Server로 FTP를 통해 보내는 형식으로 구성하려 한다.

 

build script

task packWebFile(type: Zip) {

	from "folderName" //폴더명
	destinationDir = file(project.projectDir.toString())
	archiveName = "web.war" //압축 후 파일명
	
}

 

Jenkins Gradle 설정 및 배포

 

설정으로 이동 -> Global Tool Configuration 으로 이동 -> Gradle 추가해주면 된다.

 

 

설정이 완료되었으면, Task Setting으로 넘어와, Build Steps을 아래와 같이 만들어주면 된다.

 

*주의할점!

Tasks 명령어는 "gradle"을 쓸 필요없이 Task 명을 바로 입력하면 되며, 
Jenkins Log 정보를 보고 싶다면, 
--info 또는 --debug 를 추가하여 확인하면 됩니다.

 

 

 

3. windows server tomcat stop && start shell 작성

이제 war로 배포까지 확인했다면,

FTP로 파일 전송하기 전, tomcat을 stop을 한 이후 war 배포 -> tomcat Start

Shell을 작성하려 합니다.

 

tomcat Stop --> FTP 전송 --> tomcat Start!

이런식으로 구성하려고 한다.

 

윈도우는 따로 jenkins에서 remote command 모듈이 없는 것으로 알고 있다.

그래서 따로 remote Windows Server에 OpenSSL을 설치 후 ssl을 통해 명령어를 호출하는 방식으로 해야한다.

 

이 부분은 다른 포스트를 통해 다루겠습니다.

 

감사합니다.

 

 

반응형

댓글