Jenkins 사용법

본 장에서는 Jenkins 웹 브라우저의 접속 방법, Jenkins 프로젝트 생성 및 Jenkins 기능에 대해 설명한다.

1. 개요

Jenkins에서는 Git과 연동해서 ProObject의 개발 및 운영을 위하여 형상관리, Source Generation, Build, Deploy 등의 다양한 기능들을 제공한다. Git 연동에 대한 자세한 내용은 GIT 연동을 참고한다.

다음은 Jenkins 기능에 대한 설명이다.

기능 설명

형상관리

  • Git의 원격/로컬 리파지토리, 형상관리, 이력관리, 브랜치, 머지 기능

Source Generation

  • ProObject의 메타 타입별 자동 Source Generation(DTO, DOF, BO, SO, JO)

  • Source Generation 상황 로그 기록

Build

  • 서비스 그룹별 Full Build

  • Add, Modified, Deleted Commit된 리소스 Partial Build

  • Build Task(Full Build, Partial Build) 선택 실행

  • Build Version별 Build Binary 관리

  • Trunk에 최신 Build Binary 관리

  • Pojo java Build 및 Binary 관리

Deploy

  • On-premise 환경 배포 요청

  • Cloud(ProZone) 환경 배포

2. 시작하기

다음은 Jenkins에 시작하는 과정에 대한 설명이다.

  1. 웹 브라우저에서 아래와 같이 주소를 입력한다.

    http://{서버IP 주소:포트}/{Jenkins Name}/login
  2. 주소를 입력한 후 서버에 정상적으로 Jenkins가 설치된 경우 로그인 페이지가 나타난다. 사용자 ID와 패스워드를 패스워드를 입력한 후 [로그인] 버튼을 클릭한다. 잘못된 ID나 패스워드를 입력하는 경우 경고 문구가 나타난다.

    figure jenkins login
    로그인 화면
  3. 로그인에 성공하면 대시 보드으로 이동한다. 대시보드에서는 생성한 프로젝트의 목록과 빌드 성공 여부를 확인할 수 있다.

    [새로운 Itme] 메뉴를 클릭하면 신규 프로젝트를 생성할 수 있다. 자세한 내용은 프로젝트 생성을 참고한다.

    figure jenkins dashboard
    Jenkins 대시보드
  4. 프로젝트를 생성한 후 대시보드(Jenkins 프로젝트 메인 화면)에서 해당 프로젝트를 클릭하면 Jenkins 프로젝트 메인 화면으로 이동한다. 각 화면의 구성 요소에 대한 자세한 내용은 화면 구성을 참고한다.

    figure jenkins main
    Jenkins 프로젝트 메인 화면
  5. 메인 화면의 오른쪽 상단에 [로그아웃] 버튼을 클릭하면 로그아웃되며 로그인 초기 화면(로그인 화면)으로 이동한다.

3. 화면 구성

프로젝트 생성 후 대시보드(Jenkins 대시보드)에서 해당 프로젝트를 클릭하면 Jenkins 프로젝트 메인 화면으로 이동한다.

다음은 Jenkins 프로젝트 메인 화면 메뉴에 대한 설명이다.

figure jenkins project main
Jenkins 프로젝트 메인 화면 구성
메뉴 설명

[Build with Parameters]

구성 페이지에 설정한 플로우에 따라 Build job을 수행한다.

[구성]

Jenkins 프로젝트별로 빌드할 때 수행할 job을 설정하거나 구성한다. 프로젝트 구성에 대한 자세한 내용은 프로젝트 구성의 설명을 참고한다.

[Build History]

Build Job별로 빌드할 때마다 "#+Build Number"를 부여한다.

Build Number 앞의 아이콘으로 빌드의 수행 결과를 확인할 수 있다.

  • 파랑 : 빌드 성공

  • 빨강 : 빌드 실패

자세한 내용은 프로젝트 로그 조회를 참고한다.

4. 프로젝트 생성

새로운 프로젝트를 생성해야 Jenkins에서 제공하는 기능을 사용할 수 있다. 대시보드(Jenkins 대시보드)에서 [새로운 Itme] 메뉴를 클릭한다. Jenkins의 프로젝트 이름은 입력한 후 'Freestyle project'를 선택하고 [OK] 버튼을 클릭한다.

figure new project
새로운 Jenkins 프로젝트 생성 화면

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] 탭

소스 코드의 기본적인 정보를 설정한 후 [저장] 버튼을 클릭한다.

figure systemproject
System 프로젝트 구성 - [General] 탭

[소스 코드 관리] 탭

소스 코드를 관리하는 저장소에 관련한 정보를 설정한 후 [저장] 버튼을 클릭한다.

figure source config
System 프로젝트 구성 - [소스 코드 관리] 탭
항목 설명

None/Git

소스 코드를 관리할 대상을 선택한다. ('Git'을 선택)

Repository URL

'Git'을 선택한 경우 Git Repository Url을 설정한다.

Credentials

[Add] 버튼을 클릭해서 사용자 Credential을 추가한다.

Branch Specifier

연결 및 build할 branch를 설정한다.

Repository browser

'(자동)'을 선택한다.

[빌드 유발] 탭

빌드를 하는 다양한 방식을 설정한다. 예제에서는 'Poll SCM' 항목을 선택한 후 [저장] 버튼을 클릭한다.

figure dev build trigger
프로젝트 구성 - [빌드 유발] 탭
항목 설명

빌드를 원격으로 유발

외부에서 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 프로젝트의 [구성] 메뉴를 선택한 후 각 탭 화면의 항목을 설정한다.

[General] 탭

소스 코드의 기본 적인 정보를 설정한다. '이 빌드는 매개변수가 있습니다' 체크박스를 선택한 후 Boolean Parameter에 항목을 추가한다. 'Name'에 항목을 'IsFullBuild’로 설정하고 'Default Value' 항목을 선택힌다.

figure general
DevOps 프로젝트 구성 - [General] 탭

[Build] 탭

다음은 빌드를 진행하는 과정에 대한 설명이다.

  1. [Add build Step] 버튼을 클릭해서 'Execute shell'을 추가하고 'Command' 항목에 '${WORKSPACE}/env_insert.sh’와 '${WORKSPACE}/buildRscInfo.sh’를 각각 설정한다.

    figure dev execute shell
    DevOps 프로젝트 구성 - [Build] 탭

    다음은 추가한 Execute shell의 설명이다.

    파일 설명

    env_insert.sh

    Jenkins 빌드를 위한 여러 환경 변수들에 관한 설정을 위한 shell script이다.

    buildRscInfo.sh

    Jenkins 빌드를 위한 데이터를 DB에 저장하기 위한 shell script이다.

  2. [Add build Step] 버튼을 클릭해서 Invoke Gradle script를 추가한 후 Full Build와 Partial Build 설정을 한다.

    • Full Build 설정

      figure dev build invoke gradle script
      DevOps 프로젝트 구성 - [Build] 탭 - Invoke Gradle script 설정 (Full Build)
      1. 'Invoke Gradle' 항목을 선택하고 'Gradle Version'을 'Gradle’로 선택한다.

      2. 빌드 옵션에 따라 'Tasks' 항목에 다음을 설정한다(설정 값을 확인하려면 'Tasks' 항목 끝 화살표를 클릭한다).

        cleanDir, appDtoBuild, appSrcCopy, appSrcBuild, dtoBuild, srcCopy,
        srcBuild, appDtoJar, appSrcJar, dtoJar, srcJar, sgConfigCopy,
        cleanBuildNumDir
      3. 'Tasks' 아래 [고급] 버튼을 클릭해서 화면을 확장한 후 'Build File' 항목을 'fullBuild.gradle’로 설정한다.

    • Partial Build 설정

      figure build invoke gradle script2
      DevOps 프로젝트 구성 - [Build] 탭 - Invoke Gradle script 설정 (Partial Build)
      1. 'Invoke Gradle' 항목을 선택하고 'Gradle Version'을 선택한다.

      2. 빌드 옵션에 따라 'Tasks' 항목에 다음을 설정한다(설정 값을 확인하려면 'Tasks' 항목 끝 화살표를 클릭한다).

        makeEmptyDir, appDtoCopy, appDtoBuild, appDtoClassCopy, appSrcCopy,
        appSrcBuild, appSrcClassCopy, dtoCopy, dtoBuild, dtoClassCopy,
        srcCopy, srcBuild, srcClassCopy, appDtoJar, appSrcJar, dtoJar, srcJar,
        sgConfigCopy, cleanDir
      3. 'Tasks' 아래 [고급] 버튼을 클릭해서 화면을 확장한 후 'Build File' 항목을 'Build.gradle’로 설정한다.

  3. 'Execute shell'을 추가하고 Command에 ${WORKSPACE}/deploy.sh를 설정한 후 [저장] 버튼을 클릭한다.

    figure execute shell
    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’로 나뉜다.

figure build process
프로젝트 Build

다음은 Full Build와 Partial Build에 따른 설정 값에 대한 설명이다.

  • Full Build

    구분 설명

    소스젠

    기존 리소스 + push 리소스

    Compile

    전체 범위

    jar packaging

    전체 범위

  • Partial Build

    구분 설명

    소스젠

    기존 리소스 + push 리소스

    Compile

    push 리소스

    jar packaging

    push 리소스

다음은 Jenkins 프로젝트의 Full Build 옵션으로 Job을 빌드하는 과정에 대한 설명이다.

  1. Source Generation

    Add, Modified Commit된 ProObject의 메타 유형별(dto, dof, bo, so, jo) 소스를 Generation한다.

  2. Source Generation된 java file 관리

  3. Build

    모든 리소스 Full Build 및 Jar 파일을 패키징한다.

  4. 빌드 결과 바이너리를 빌드 버전별 및 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를 확인할 수 있다.

figure build log
프로젝트 로그 조회

8. 프로젝트 Deploy

Jenkins 프로젝트를 디플로이하는 과정에 대해서 설명한다.

  1. 디플로이 설정

    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 할 수 있는 개발용 서버환경이다.

  2. 애플리케이션 및 서비스 그룹 디플로이

    Jenkins 프로젝트에서 빌드하는 경우 [IsFullBuild] 메뉴를 선택한 후 빌드한다. Build Job Process 이후 IsFullBuild가 선택됨을 확인하여 개발 서버의 서비스 그룹 배포 서비스 호출 및 수행한다.

  3. 클래스 디플로이

    Jenkins 프로젝트에서 빌드를 하는 경우 [IsFullBuild] 메뉴 선택하지 않고 빌드한다. Build Job Process 이후 IsFullBuild가 해제됨을 확인하여 개발 서버의 클래스 배포 서비스 호출 및 수행한다.

  4. 로그 조회

    Jenkins 프로젝트 메인 화면[Build History] 메뉴에서 Build Job별로 수행된 Build Number의 Console Output 메뉴에서 Build Job Process 이후의 디플로이 결과 로그를 확인할 수 있다.

    figure deploy log
    프로젝트 Deploy 결과 log