Enterprise Java web Deployment Strategy

Post on 30-Jul-2015

211 views 7 download

Transcript of Enterprise Java web Deployment Strategy

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

https://www.facebook.com/thecodinglive

Who am i

BUILD

compile

assembling

Test

Delivery

소프트웨어대안모델들

• 적응형모델

• 결정테이블

• 의존성네트워크

• 생성규칙시스템

• 상태머신

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

의존성네트워크

자동화

예약자동화 유발자동화

지시자동화

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

지시자동화

Gradle Task, Ant Task , Maven Phase

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

DEPLOYMENT PIPELINE FOR CI

Gradle Spock GEB

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

DEPLOYMENT PIPELINE FOR CI

Gradle Spock GEB

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

GRADLE

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

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

• 데몬으로사용가능

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

• 레퍼제공

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

GRADLE 실행원리

Project 인터페이스

Task 인터페이스

Build.gradle

Task 이름,

클로저

Task 인터페이스

의존관계설정가능

Task 실행

@TaskAction

GRADLE LIFE CYCLE

초기화 설정 실행

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

build.gradle

파일로드커플

싱글

GRADLE 설정

• 프로젝트인스턴스생성

• 각프로젝트에설정적용

GRADLE 실행BUILD.GRADLE

TaskName

TaskName

TaskName

RUN

GRADLE BULID파일예시 PLUGIN

GRADLE BULID파일예시 REPOSITORY

GRADLE BULID파일예시 TASK

GRADLE MULTI PROJECT

rootProject.name = 'springtobemulti'

include 'HibernateSub','WebAppSub'

springtobemulti

HibernateSub

WebAppSub

공통설정적용가능

BDD를위한테스트도구SPOCK

단위테스트시고민

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

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

테스트를할까말까?

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

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

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

BDD

HTTPS://TWITTER.COM/TASTAPOD

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

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

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

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

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

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

SPOCK

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

SPOCK 설정

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

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

SPOCK작성예제형식CLASS ABC EXTENDS SPECIFICATION

테스트이름{

GIVEN:

WHEN:

THEN:

}

SPOCK 사용예시

SPOCK 스타일로SPRING CONTROLLER TEST

GEBhttp://www.gebish.org/

Selenium + groovy Script

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

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

GEB 의존성설정

GEB 기본스크립트예시

import geb.Browser

Browser.drive(){

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

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

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

}

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"

}

}

JENKINS

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

JENKINS

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

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

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

JENKINS + 지시자동화

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

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

GRADLE JENKINS PLUGIN

https://plugins.gradle.org/

buildscript{

repositories{ jcenter() }

dependencies{

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

}

}

apply plugin: "com.terrafolio.jenkins"

GRADLE JENKINS PLUGIN 사용예시

젠킨스서버연동설정

젠킨스 JOB 설정

GRADLE JENKINS JOB TASK 실행

GRADLE JENKINS JOB 실행결과

실행주체는누구인가?

• 생성되는것들 JAR, WAR

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

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

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

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

CARGO

Web Application Container

AppApp

App App

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

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

GRADLE CARGO 설정BUILDSCRIPT{

REPOSITORIES{

JCENTER()

}

DEPENDENCIES{

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

}

}

APPLY PLUGIN: 'COM.BMUSCHKO.CARGO'

GRADLE CARGO 배포

cargo{

containerId ="tomcat8x"

port = 8080

deployable{

context = "teammgmt"

}

remote{

port=8080

username='grayjin'

password='pwd'

hostname='192.168.59.103'

}

}

필요한건오직톰캣뿐

FROM tomcat:8.0.21-jre8

MAINTAINER "grayjin <darkandark90@gmail.com>"

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

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

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

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

DOCKER

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

DOCKER 구성요소Images

Registry

Container

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

DOCKER 실행

• DOCKER BUILD –T GRAYJIN/TOMCAT

• DOCKER RUN –P 8080:8080 GRAYJIN/TOMCAT

DOCKER 파일 build

• TO OTHER TIME

• TO OTHER PLACE

• TO OTHER US