Jenkins 사용법
본 장에서는 Jenkins 웹 브라우저의 접속 방법, Jenkins 프로젝트 생성 및 Jenkins 기능에 대해 설명한다.
1. 개요
Jenkins에서는 Git과 연동해서 ProObject의 개발 및 운영을 위하여 형상관리, Source Generation, Build, Deploy 등의 다양한 기능들을 제공한다. Git 연동에 대한 자세한 내용은 GIT 연동을 참고한다.
다음은 Jenkins 기능에 대한 설명이다.
기능 | 설명 |
---|---|
형상관리 |
|
Source Generation |
|
Build |
|
Deploy |
|
2. 시작하기
다음은 Jenkins에 시작하는 과정에 대한 설명이다.
-
웹 브라우저에서 아래와 같이 주소를 입력한다.
http://{서버IP 주소:포트}/{Jenkins Name}/login
-
주소를 입력한 후 서버에 정상적으로 Jenkins가 설치된 경우 로그인 페이지가 나타난다. 사용자 ID와 패스워드를 패스워드를 입력한 후 [로그인] 버튼을 클릭한다. 잘못된 ID나 패스워드를 입력하는 경우 경고 문구가 나타난다.
로그인 화면 -
로그인에 성공하면 대시 보드으로 이동한다. 대시보드에서는 생성한 프로젝트의 목록과 빌드 성공 여부를 확인할 수 있다.
[새로운 Itme] 메뉴를 클릭하면 신규 프로젝트를 생성할 수 있다. 자세한 내용은 프로젝트 생성을 참고한다.
Jenkins 대시보드 -
프로젝트를 생성한 후 대시보드(Jenkins 프로젝트 메인 화면)에서 해당 프로젝트를 클릭하면 Jenkins 프로젝트 메인 화면으로 이동한다. 각 화면의 구성 요소에 대한 자세한 내용은 화면 구성을 참고한다.
Jenkins 프로젝트 메인 화면 -
메인 화면의 오른쪽 상단에 [로그아웃] 버튼을 클릭하면 로그아웃되며 로그인 초기 화면(로그인 화면)으로 이동한다.
3. 화면 구성
프로젝트 생성 후 대시보드(Jenkins 대시보드)에서 해당 프로젝트를 클릭하면 Jenkins 프로젝트 메인 화면으로 이동한다.
다음은 Jenkins 프로젝트 메인 화면 메뉴에 대한 설명이다.
메뉴 | 설명 |
---|---|
[Build with Parameters] |
구성 페이지에 설정한 플로우에 따라 Build job을 수행한다. |
[구성] |
Jenkins 프로젝트별로 빌드할 때 수행할 job을 설정하거나 구성한다. 프로젝트 구성에 대한 자세한 내용은 프로젝트 구성의 설명을 참고한다. |
[Build History] |
Build Job별로 빌드할 때마다 "#+Build Number"를 부여한다. Build Number 앞의 아이콘으로 빌드의 수행 결과를 확인할 수 있다.
자세한 내용은 프로젝트 로그 조회를 참고한다. |
4. 프로젝트 생성
새로운 프로젝트를 생성해야 Jenkins에서 제공하는 기능을 사용할 수 있다. 대시보드(Jenkins 대시보드)에서 [새로운 Itme] 메뉴를 클릭한다. Jenkins의 프로젝트 이름은 입력한 후 'Freestyle project'를 선택하고 [OK] 버튼을 클릭한다.
5. 프로젝트 구성
본 절에서는 System 프로젝트와 DevOps 프로젝트의 구성에 대해서 설명한다.
5.1. System 프로젝트
System 프로젝트는 ProStudo IDE에서 설정한 GIt으로 메타를 Push할 경우 Post-Checkout hook을 실행 ProMinor의 정적 분석과 Test 서버의 관리 테이블에 메타 정보를 설정한다.
Post-Checkout은 다음의 경로에 위치한다.
${WORKSPACE}/${project name}/.git/hooks/post-checkout
Jenkins 프로젝트 메인 화면에서 Jenkins 프로젝트의 [구성] 메뉴를 선택한 후 각 탭 화면의 항목을 설정한다.
-
[빌드 유발] 탭
[General] 탭
소스 코드의 기본적인 정보를 설정한 후 [저장] 버튼을 클릭한다.
[소스 코드 관리] 탭
소스 코드를 관리하는 저장소에 관련한 정보를 설정한 후 [저장] 버튼을 클릭한다.
항목 | 설명 |
---|---|
None/Git |
소스 코드를 관리할 대상을 선택한다. ('Git'을 선택) |
Repository URL |
'Git'을 선택한 경우 Git Repository Url을 설정한다. |
Credentials |
[Add] 버튼을 클릭해서 사용자 Credential을 추가한다. |
Branch Specifier |
연결 및 build할 branch를 설정한다. |
Repository browser |
'(자동)'을 선택한다. |
[빌드 유발] 탭
빌드를 하는 다양한 방식을 설정한다. 예제에서는 'Poll SCM' 항목을 선택한 후 [저장] 버튼을 클릭한다.
항목 | 설명 |
---|---|
빌드를 원격으로 유발 |
외부에서 URL을 통해 빌드를 진행할 수 있도록 한다. |
Build after other project are built |
다른 프로젝트를 빌드한 후 이어서 현재 프로젝트를 빌드한다. |
Build periodically |
빌드를 배치 프로세스처럼 설정해 놓은 시간에 자동으로 빌드를 진행하도록 한다. |
Poll SCM |
형상관리 서버에를 주기적으로 감시하여 변경된 사항이 존재할 때 빌드를 수행한다. (옵션항목) 'Poll SCM'을 선택하면 Git에 push 후 빌드를 trigger하여 자동으로 Build job을 수행할 수 있다. 선택하지 않을 경우 Jenkins 프로젝트 메인 화면의 [Build with Parameters] 메뉴로 Build job을 수행한다. |
5.2. DevOps 프로젝트
Jenkins 프로젝트 메인 화면에서 Jenkins 프로젝트의 [구성] 메뉴를 선택한 후 각 탭 화면의 항목을 설정한다.
-
[소스 코드 관리] 탭 (System 프로젝트의 설명을 참고한다.)
-
[Build] 탭
[General] 탭
소스 코드의 기본 적인 정보를 설정한다. '이 빌드는 매개변수가 있습니다' 체크박스를 선택한 후 Boolean Parameter에 항목을 추가한다. 'Name'에 항목을 'IsFullBuild’로 설정하고 'Default Value' 항목을 선택힌다.
[Build] 탭
다음은 빌드를 진행하는 과정에 대한 설명이다.
-
[Add build Step] 버튼을 클릭해서 'Execute shell'을 추가하고 'Command' 항목에 '${WORKSPACE}/env_insert.sh’와 '${WORKSPACE}/buildRscInfo.sh’를 각각 설정한다.
DevOps 프로젝트 구성 - [Build] 탭다음은 추가한 Execute shell의 설명이다.
파일 설명 env_insert.sh
Jenkins 빌드를 위한 여러 환경 변수들에 관한 설정을 위한 shell script이다.
buildRscInfo.sh
Jenkins 빌드를 위한 데이터를 DB에 저장하기 위한 shell script이다.
-
[Add build Step] 버튼을 클릭해서 Invoke Gradle script를 추가한 후 Full Build와 Partial Build 설정을 한다.
-
Full Build 설정
DevOps 프로젝트 구성 - [Build] 탭 - Invoke Gradle script 설정 (Full Build)-
'Invoke Gradle' 항목을 선택하고 'Gradle Version'을 'Gradle’로 선택한다.
-
빌드 옵션에 따라 'Tasks' 항목에 다음을 설정한다(설정 값을 확인하려면 'Tasks' 항목 끝 화살표를 클릭한다).
cleanDir, appDtoBuild, appSrcCopy, appSrcBuild, dtoBuild, srcCopy, srcBuild, appDtoJar, appSrcJar, dtoJar, srcJar, sgConfigCopy, cleanBuildNumDir
-
'Tasks' 아래 [고급] 버튼을 클릭해서 화면을 확장한 후 'Build File' 항목을 'fullBuild.gradle’로 설정한다.
-
-
Partial Build 설정
DevOps 프로젝트 구성 - [Build] 탭 - Invoke Gradle script 설정 (Partial Build)-
'Invoke Gradle' 항목을 선택하고 'Gradle Version'을 선택한다.
-
빌드 옵션에 따라 'Tasks' 항목에 다음을 설정한다(설정 값을 확인하려면 'Tasks' 항목 끝 화살표를 클릭한다).
makeEmptyDir, appDtoCopy, appDtoBuild, appDtoClassCopy, appSrcCopy, appSrcBuild, appSrcClassCopy, dtoCopy, dtoBuild, dtoClassCopy, srcCopy, srcBuild, srcClassCopy, appDtoJar, appSrcJar, dtoJar, srcJar, sgConfigCopy, cleanDir
-
'Tasks' 아래 [고급] 버튼을 클릭해서 화면을 확장한 후 'Build File' 항목을 'Build.gradle’로 설정한다.
-
-
-
'Execute shell'을 추가하고 Command에 ${WORKSPACE}/deploy.sh를 설정한 후 [저장] 버튼을 클릭한다.
DevOps 프로젝트 구성 - [Build] 탭 - Execute shell 설정다음은 추가한 Execute shell의 설명이다.
파일 설명 deploy.sh
빌드된 리소스를 Deploy Call하기 위한 shell script이다.
6. 프로젝트 Build
설정한 Jenkins 프로젝트에서 Build Job Process는 Jenkins 프로젝트 메인 화면의 [Build with Parameters] 메뉴에서 'IsFullBuild' 선택 여부에 따라 'Partial Build’와 'Full Build’로 나뉜다.
다음은 Full Build와 Partial Build에 따른 설정 값에 대한 설명이다.
-
Full Build
구분 설명 소스젠
기존 리소스 + push 리소스
Compile
전체 범위
jar packaging
전체 범위
-
Partial Build
구분 설명 소스젠
기존 리소스 + push 리소스
Compile
push 리소스
jar packaging
push 리소스
다음은 Jenkins 프로젝트의 Full Build 옵션으로 Job을 빌드하는 과정에 대한 설명이다.
-
Source Generation
Add, Modified Commit된 ProObject의 메타 유형별(dto, dof, bo, so, jo) 소스를 Generation한다.
-
Source Generation된 java file 관리
-
Build
모든 리소스 Full Build 및 Jar 파일을 패키징한다.
-
빌드 결과 바이너리를 빌드 버전별 및 Trunk에 관리
다음은 빌드 결과 바이너리를 관리하는 위치에 대한 설명이다.
종류 관리 위치 java file
-
Do (App) : ${WORKSPACE}/${AppName}/.gen_src/dto/ 하위
-
Do (Sg) : ${WORKSPACE}/${sgName}/.gen_src/dto/ 하위
-
Other Type (App) : ${WORKSPACE}/${AppName}/.gen_src/ 하위
-
Other Type (Sg) : ${WORKSPACE}/${sgName}/.gen_src/ 하위
pojo java file
-
${WORKSPACE}/${sgName}/src/ 하위
meta file
-
App : ${WORKSPACE}/${AppName}/meta/ 하위
-
Sg : ${WORKSPACE}/${sgName}/meta/ 하위
class file
-
App Do(Trunk) : ${poHome}/resources/classes/_build/${projectName}/${appName}/application/${appName}-dto/ 하위
-
Sg Do(Trunk) : ${poHome}/resources/classes/_build/${projectName}/${appName}/${sgName}-dto/ 하위
-
App Other Type(Trunk) : ${poHome}/resources/classes/_build/${projectName}/${appName}/application/${appName}/ 하위
-
Sg Other Type(Trunk) : ${poHome}/resources/classes/_build/${projectName}/${appName}/${sgName}/ 하위
jar file
-
App : ${poHome}/resources/classes/_build/_jar/${projectName}/${buildNum}/${appName}/ 하위
-
Sg : ${poHome}/resources/classes/_build/_jar/${projectName}/${buildNum}/${appName}/${sgName}/ 하위
-
7. 프로젝트 로그 조회
다음은 Build Job Process의 결과 로그에 대한 설명이다.
Jenkins 프로젝트 메인 화면의 [Build History] 메뉴에서 Build Job별로 수행된 Build Number의 [Console Output] 메뉴에서 Build Job Process의 결과 log를 확인할 수 있다.
8. 프로젝트 Deploy
Jenkins 프로젝트를 디플로이하는 과정에 대해서 설명한다.
-
디플로이 설정
Jenkins 프로젝트에서 배포할 수 있는 서버의 타입은 'Runtime Server’과 'Test Server’이다. 이 둘의 설정은 ${WORKSPACE}/gradle.properties의 *'isDeployRequest' 옵션으로 설정할 수 있다.
isDeployRequest = true : [Runtime Server] isDeployRequest = false : [Test Server]
Runtime Server는 사이트의 프로그램이 수행됨으로써 고객들에게 서비스를 제공하는 운영 환경이다. Runtime Server에 디플로이를 위해서는 Jenkins 프로젝트에서 Build Process 후에 Shell Script를 수행해 배포 서비스를 호출하게 된다. Test Server는 개발자가 Test 할 수 있는 개발용 서버환경이다.
-
애플리케이션 및 서비스 그룹 디플로이
Jenkins 프로젝트에서 빌드하는 경우 [IsFullBuild] 메뉴를 선택한 후 빌드한다. Build Job Process 이후 IsFullBuild가 선택됨을 확인하여 개발 서버의 서비스 그룹 배포 서비스 호출 및 수행한다.
-
클래스 디플로이
Jenkins 프로젝트에서 빌드를 하는 경우 [IsFullBuild] 메뉴 선택하지 않고 빌드한다. Build Job Process 이후 IsFullBuild가 해제됨을 확인하여 개발 서버의 클래스 배포 서비스 호출 및 수행한다.
-
로그 조회
Jenkins 프로젝트 메인 화면의 [Build History] 메뉴에서 Build Job별로 수행된 Build Number의 Console Output 메뉴에서 Build Job Process 이후의 디플로이 결과 로그를 확인할 수 있다.
프로젝트 Deploy 결과 log