Enterprise Java web Deployment Strategy

47

Transcript of Enterprise Java web Deployment Strategy

Page 1: Enterprise Java web Deployment Strategy
Page 2: Enterprise Java web Deployment Strategy

엔터프라이즈빌드자동화를위한 Gradle

https://www.facebook.com/thecodinglive

Who am i

Page 3: Enterprise Java web Deployment Strategy

BUILD

compile

assembling

Test

Delivery

Page 4: Enterprise Java web Deployment Strategy

소프트웨어대안모델들

• 적응형모델

• 결정테이블

• 의존성네트워크

• 생성규칙시스템

• 상태머신

모든자동화빌드도구의근간이되는모델

Page 5: Enterprise Java web Deployment Strategy

의존성네트워크

Page 6: Enterprise Java web Deployment Strategy

자동화

예약자동화 유발자동화

지시자동화

지시자동화가받쳐주면나머지적용은따라온다.

Page 7: Enterprise Java web Deployment Strategy

지시자동화

Gradle Task, Ant Task , Maven Phase

패키징누구나같은결과를얻는다

Page 8: Enterprise Java web Deployment Strategy

DEPLOYMENT PIPELINE FOR CI

Gradle Spock GEB

빌드자동화도구 BDD 테스트도구 UI 통합자동화테스트도구

Page 9: Enterprise Java web Deployment Strategy

DEPLOYMENT PIPELINE FOR CI

Gradle Spock GEB

빌드자동화도구 BDD 테스트도구 UI 통합자동화테스트도구

Page 10: Enterprise Java web Deployment Strategy

GRADLE

• GROOVY로만든자동화빌드도구

• 손쉬운멀티프로젝트구성

• 데몬으로사용가능

• 다양한플러그인지원및추가가능

• 레퍼제공

• 프로그래밍친화적설정방식

Page 11: Enterprise Java web Deployment Strategy

GRADLE 실행원리

Project 인터페이스

Task 인터페이스

Build.gradle

Task 이름,

클로저

Task 인터페이스

의존관계설정가능

Task 실행

@TaskAction

Page 12: Enterprise Java web Deployment Strategy

GRADLE LIFE CYCLE

초기화 설정 실행

Page 13: Enterprise Java web Deployment Strategy

GRADLE 초기화Settings.gradle 파일정보를보고프로젝트가서로의존관계를갖는멀티프로젝트인지싱글프로젝트인지판별

build.gradle

파일로드커플

싱글

Page 14: Enterprise Java web Deployment Strategy

GRADLE 설정

• 프로젝트인스턴스생성

• 각프로젝트에설정적용

Page 15: Enterprise Java web Deployment Strategy

GRADLE 실행BUILD.GRADLE

TaskName

TaskName

TaskName

RUN

Page 16: Enterprise Java web Deployment Strategy

GRADLE BULID파일예시 PLUGIN

Page 17: Enterprise Java web Deployment Strategy

GRADLE BULID파일예시 REPOSITORY

Page 18: Enterprise Java web Deployment Strategy

GRADLE BULID파일예시 TASK

Page 19: Enterprise Java web Deployment Strategy

GRADLE MULTI PROJECT

rootProject.name = 'springtobemulti'

include 'HibernateSub','WebAppSub'

springtobemulti

HibernateSub

WebAppSub

공통설정적용가능

Page 20: Enterprise Java web Deployment Strategy

BDD를위한테스트도구SPOCK

Page 21: Enterprise Java web Deployment Strategy

단위테스트시고민

특히내가만든소스가아닐때

어디서부터테스트를시작해야되나?

테스트를할까말까?

한번에얼만큼테스트해야되나?

테스트이름을어떻게정하지?

테스트가실패하는이유는?

Page 22: Enterprise Java web Deployment Strategy

BDD

HTTPS://TWITTER.COM/TASTAPOD

HTTP://DANNORTH.NET/INTRODUCING-BDD/

요구사항에대한정의, 명세 (SPECIFICATION)

GIVEN ( 어떤값이할당되었을때)

WHEN( 이벤트가발생했을때)

THEN ( 결과는 ~ 여야한다.)

의도를표현하기위해서 TEST대신 BEHAVIOUR

Page 23: Enterprise Java web Deployment Strategy

SPOCK

• PETER NIEDERWIESER가GROOVY로만든 BDD 프레임워크

Page 24: Enterprise Java web Deployment Strategy

SPOCK 설정

• COMPILE "ORG.CODEHAUS.GROOVY:GROOVY-ALL:2.4.1"

• TESTCOMPILE "ORG.SPOCKFRAMEWORK:SPOCK-CORE:1.0-GROOVY-2.4"

Page 25: Enterprise Java web Deployment Strategy

SPOCK작성예제형식CLASS ABC EXTENDS SPECIFICATION

테스트이름{

GIVEN:

WHEN:

THEN:

}

Page 26: Enterprise Java web Deployment Strategy

SPOCK 사용예시

Page 27: Enterprise Java web Deployment Strategy

SPOCK 스타일로SPRING CONTROLLER TEST

Page 28: Enterprise Java web Deployment Strategy

GEBhttp://www.gebish.org/

Selenium + groovy Script

웹페이지자동화테스트도구

웹드라이버를 사용해서브라우저를로드후에셀레니움처럼레코딩하지않고스크립트를사용해서 Jquery문법으로페이지요소들을참조해서테스트할수있다.

Page 29: Enterprise Java web Deployment Strategy

GEB 의존성설정

Page 30: Enterprise Java web Deployment Strategy

GEB 기본스크립트예시

import geb.Browser

Browser.drive(){

go("http://www.hanbit.co.kr/")

$("input", name:'keyword').value('java')

$("input", class:'bInp').click()

}

Page 31: Enterprise Java web Deployment Strategy

GEB SPOCK스타일import geb.spock.GebReportingSpec

import spock.lang.Stepwise

@Stepwise

class TeamAddSpecReport extends GebReportingSpec{

def "[Report]Team 추가"(){

given : "team add page"

to TeamAddPage

when: "팀 추가 버튼 클릭"

inputName ="arizona"

inputRating = "3"

submitButton.click()

then:"team list page"

to TeamlistPage

title == "List of teams"

}

}

Page 32: Enterprise Java web Deployment Strategy

JENKINS

http://www.devopscloud.com/01.10.ci.html

Page 33: Enterprise Java web Deployment Strategy

JENKINS

• JOB 단위로관리할수있는 CI도구

• 빌드자체를직접수행하지않고잡을통해서관리할수있습니다.

• 웹 UI 대시보드화면을가지고있어서사용이편리합니다.

Page 34: Enterprise Java web Deployment Strategy

JENKINS + 지시자동화

• 서두에언급했던지시자동화개념을적용해서

젠킨스 UI 가아닌 GRADLE TASK를활용한 JOB제어

Page 35: Enterprise Java web Deployment Strategy

GRADLE JENKINS PLUGIN

https://plugins.gradle.org/

buildscript{

repositories{ jcenter() }

dependencies{

classpath 'com.terrafolio:gradle-jenkins-plugin:1.+'

}

}

apply plugin: "com.terrafolio.jenkins"

Page 36: Enterprise Java web Deployment Strategy

GRADLE JENKINS PLUGIN 사용예시

젠킨스서버연동설정

젠킨스 JOB 설정

Page 37: Enterprise Java web Deployment Strategy

GRADLE JENKINS JOB TASK 실행

Page 38: Enterprise Java web Deployment Strategy

GRADLE JENKINS JOB 실행결과

Page 39: Enterprise Java web Deployment Strategy

실행주체는누구인가?

• 생성되는것들 JAR, WAR

• 실행되는것들 JVM, WEB APPLICATION CONTAINER

JAR를실행하려면 CLASSPATH에추가되어야하고,

WAR를실행하려면WEB APPLICATION CONTAINER안에배포되어서

CONTEXT가생성되어야함 배포도체계적으로빌드도구를사용해서처리하자

Page 40: Enterprise Java web Deployment Strategy

CARGO

Web Application Container

AppApp

App App

원격서버에배포를위한도구

SCP또는 FTP를사용하지않고 Gradle Cargo플러그인을사용해서일관성확보

Page 41: Enterprise Java web Deployment Strategy

GRADLE CARGO 설정BUILDSCRIPT{

REPOSITORIES{

JCENTER()

}

DEPENDENCIES{

CLASSPATH 'COM.BMUSCHKO:GRADLE-CARGO-PLUGIN:2.1'

}

}

APPLY PLUGIN: 'COM.BMUSCHKO.CARGO'

Page 42: Enterprise Java web Deployment Strategy

GRADLE CARGO 배포

cargo{

containerId ="tomcat8x"

port = 8080

deployable{

context = "teammgmt"

}

remote{

port=8080

username='grayjin'

password='pwd'

hostname='192.168.59.103'

}

}

Page 43: Enterprise Java web Deployment Strategy

필요한건오직톰캣뿐

FROM tomcat:8.0.21-jre8

MAINTAINER "grayjin <[email protected]>"

ADD settings.xml /usr/local/tomcat/conf/

ADD tomcat-users.xml /usr/local/tomcat/conf/

테스트용원격톰캣서버인스턴스생성을위한Docker 사용

운영체제이미지전체를사용할필요없고톰캣만별도로사용할수있어서VM보다빠르게환경을구축할수있고운영체제이미지파일을복사할필요가없음

Page 44: Enterprise Java web Deployment Strategy

DOCKER

http://slides.com/vincentlee/docker#/6

Page 45: Enterprise Java web Deployment Strategy

DOCKER 구성요소Images

Registry

Container

http://slides.com/vincentlee/docker#/14

Page 46: Enterprise Java web Deployment Strategy

DOCKER 실행

• DOCKER BUILD –T GRAYJIN/TOMCAT

• DOCKER RUN –P 8080:8080 GRAYJIN/TOMCAT

DOCKER 파일 build

Page 47: Enterprise Java web Deployment Strategy

• TO OTHER TIME

• TO OTHER PLACE

• TO OTHER US