'settings.yaml'에 해당되는 글 2건

  1. 2008.12.24 Buildr : 설정정보 관리
  2. 2008.12.17 Buildr : 아티팩트 다운로드 받기

이번에는 각종 설정값을 빌드 스크립트에 하드코딩하기 보다는 외부로 빼내어 관리하는 방법을 살펴보겠습니다.
Ant에서는 key=value 형식으로 외부 properties 파일을 이용하고, Maven에서는 사용자홈 경로의 settings.xml 또는 pom.xml 경로의 profiles.xml를 통해 설정정보를 분리합니다. Ant, Maven 모두 스크립트 실행시에 -Dkey=value 형식으로 설정을 입력하는 것도 가능합니다.

Ant와 Maven이 'key=value'라는 1차원적인 프로퍼티 형식으로 설정값을 기록하는 것을 선호한다면, rake나 Buildr은 YAML을 활용하는 2차원적인 트리 형식을 선호합니다. buildfile에서 설정값을 외부로 빼내는 방법은 크게 4가지가 있습니다.

1. 환경변수
스크립트 실행시 key=value  형식으로 입력하면 스크립트에서는 ENV['key']로 값을 받을 수 있습니다. 만약 key에 해당하는 운영체제 환경변수가 있으면 그것을 리턴합니다.

####> buildr upload password=secret

puts ENV['JAVA_HOME']
puts ENV['password']

2. settings.yaml
Buildr을 사용하게 되면 사용자홈/.buildr 디렉토리에 settings.yaml 파일이 생기는데, 여기에 (주로 개발자 개인적인) 설정을 포함할 수 있습니다.

repositories:
  remote :
  - http://www.ibiblio.org/maven2/
  - http://repository.codehaus.org/
  - http://download.java.net/maven/2/

messenger:
  server: jabber.company.com
  usr: notifier@company-jabber.com
  pwd: secret

settings.yaml에 위와 같은 설정이 있으면 스크립트에서는 Buildr.settings.user 속성(Hash)을 통해 값을 읽어옵니다.

puts repositories.remote
puts Buildr.settings.user['messenger']['server']
usr, pwd = Buildr.settings.user['messenger'].values_at('usr', 'pwd')

3. build.yaml
buildfile과 같은 위치의 build.yaml 파일에 (주로 개발자 사이에 공유할) 설정데이터를 넣을 수 있습니다.

artifacts:
  spring: org.springframework:spring:jar:2.0
  log4j: log4j:log4j:jar:1.0
  j2ee: geronimo-spec:geronimo-spec-j2ee:jar:1.4-rc4

jira:
  uri: https://jira.corp.org

build.yaml에 위와 같은 설정이 있다면, 스크립트에서는 Buildr.settings.build 속성(Hash)으로 설정에 접근할 수 있습니다.

compile.with :log4j, :j2ee
puts Buildr.settings.build['jira']['uri']

4. profiles.yaml
buildfile과 같은 위치의 profiles.yaml은 Maven의 profiles.xml과 동일한 역할을 합니다. 보통 빌드환경이 달라지면 다른 설정값이 요구되는데, 이는 프로파일을 통해 관리할 수 있습니다. 즉 프로파일은 빌드환경에 따라 설정값을 다르게 가져가는 것을 말합니다.

development, test, staging, production 등의 빌드환경 중에서 Buildr은 기본적으로 'development' 빌드환경에서 실행됩니다. 빌드 환경은 빌드스크립트 실행시 -e 옵션으로 바꿀 수 있습니다.
빌드 스크립트에서 현재 적용된 빌드환경 값은 Buildr.environment 메소드로 확인 가능합니다.

profiles.yaml에는 이렇게 선택된 빌드환경에 따라 어떤 설정값을 쓸지 YAML 형식으로 적어줍니다.

development:
  db: hsql
  jdbc: hsqldb:mem:devdb
  resource_ext: dev
  wasserver:
    host: 111.111.111.111
    username: testuser
    password: test1234
    deploy_dir: /home/test/deploy/war
    restart: sh restart.sh

production:
  db:oracle
  jdbc: oracle:thin:@bigstrong:1521:mighty
  resource_ext: prod
  wasserver:
    host: 222.222.222.222
    username: realuser
    password: realpass
    deploy_dir: /home/prod/deploy/war
    restart: cd /bea/user_projects/domains/mydomain;./stop.sh;./start.sh

프로파일의 설정값은 빌드 스크립트에서 Buildr.settings.profile 메소드로 읽어옵니다. 

puts Buildr.environment # 현재 적용된 빌드환경
puts Buildr.settings.profile['wasserver']['username'] # 현재 적용된 빌드환경의 설정값
puts Buildr.settings.profiles['production']['wasserver']['username'] # production 환경의 설정 값
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'Build&Deploy > Buildr' 카테고리의 다른 글

Buildr : Hudson CI 연계하기  (0) 2009.01.14
Buildr : 원격 서버에 배포하기  (0) 2008.12.26
Buildr : 설정정보 관리  (0) 2008.12.24
Buildr : 코드분석 리포트 생성  (0) 2008.12.23
Buildr : 빌드결과 패키징  (0) 2008.12.18
Buildr : 아티팩트 다운로드 받기  (0) 2008.12.17
Posted by 에코지오

댓글을 달아 주세요

compile.with를 통해 컴파일에 필요한 의존 라이브러리(artifacts)를 지정하면 buildr은 컴파일 작업시 해당 라이브러리를 리모트 Maven 저장소로부터 다운로드 받습니다(이미 로컬 Maven 저장소에 있는 경우는 제외).

compile.with 'org.apache.axis2:axis2:jar:1.2'

하지만 buildfile 스크립트 내에서 임의로 우리가 라이브러리를 다운로드 받을 수도 있습니다.

아, 그보다 먼저 리모트 메이븐 저장소 주소를 buildr에 알려주어야 합니다. 2가지 방법이 있습니다.

1. 사용자홈/.buildr/settings.yaml 파일에 메이븐 저장소 주소 세팅

2. 빌드스크립트(buildfile)에서 세팅

#repositories.remote << 'http://www.ibiblio.org/maven2/' << 'http://download.java.net/maven/2/'
repositories.remote.push %w{ http://www.ibiblio.org/maven2/  http://download.java.net/maven/2/ }

다시 돌아와서, buildfile 스크립트 내에서 임의로 라이브러리를 다운로드받을 수 있습니다.

한 개 다운로드 : artifact(스펙).invoke
여러 개 다운로드 : artifacts(스펙목록).each(&:invoke)

예를 들어 findbugs.jar 와 findbugs-ant.jar를 다운 받고자 한다면 이런식으로 작성합니다.

FINDBUGS = ["net.sourceforge.findbugs:findbugs:jar:1.3.2",
                    "net.sourceforge.findbugs:findbugs-ant:jar:1.3.2"]
artifacts(FINDBUGS).each(&:invoke)

Buildr::group 메소드를 써서 FINDBUGS를 다르게 표현할 수도 있습니다.

FINDBUGS = Buildr::group %w{findbugs findbugs-ant},
                                     :under=>'net.sourceforge.findbugs',
                                     :version=> '1.3.2'

Maven은 transitive dependencies(의존성 전이)라고 해서 한다리 건너의 의존 라이브러리까지도 알아서 가져오는 기능을 제공합니다. Buildr도 아직 완벽하지는 않지만 의존성 전이를 지원합니다. 바로 transitive 메소드가 있습니다.

주어진 스펙이 의존하는 라이브러리까지 몽창 다운로드 : transitive(스펙목록).each(&:invoke)

예를 들어 findbugs-antfindbugs에 의존하고 다시 findbugs는 asm,bcel,dom4j 등에 의존합니다.(pom파일의 내용은 링크에서 확인가능합니다) 따라서 transitive 메소드를 이용하여 findbugs-ant를 다운로드 받으면 findbugs와 그것이 의존하는 asm 등도 함께 다운로드됩니다.

transitive('net.sourceforge.findbugs:findbugs-ant:jar:1.3.2').each(&:invoke)


transitive는 compile.with에도 사용 가능합니다. 아래처럼 설정하면 acegi-security가 의존하는 스프링프레임워크 모듈들도 컴파일 작업시 함께 다운로드될 것입니다.

compile.with transitive('org.acegisecurity:acegi-security:jar:1.0.5')

만약 내가 원하는 라이브러리가 메이븐 형식의 저장소에 없지만 웹사이트 어딘가에서 받을 수 있다면 download 메소드를 이용하여 다운로드 받을 url 주소를 직접 지정하여 파일을 다운로드 받을 수 있습니다.

보통 웹사이트에서 다운받기 : download(artifact(스펙))=>파일주소).invoke

아래 예제는 dojo:dojo:zip:widget:0.2.2 형식의 아티팩트를 메이븐저장소가 아니라 주어진 url로부터 다운로드받아 로컬 메이븐 저장소에 설치합니다(M2_REPO/dojo/dojo/0.2.2/dojo-0.2.2-widget.zip).

url = 'http://download.dojotoolkit.org/release-0.2.2/dojo-0.2.2-widget.zip'
download(artifact("dojo:dojo:zip:widget:0.2.2")=>url).invoke
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'Build&Deploy > Buildr' 카테고리의 다른 글

Buildr : 코드분석 리포트 생성  (0) 2008.12.23
Buildr : 빌드결과 패키징  (0) 2008.12.18
Buildr : 아티팩트 다운로드 받기  (0) 2008.12.17
Buildr : 타스크 의존 관계  (0) 2008.12.11
Buildr : 리소스 교체  (3) 2008.12.09
Buildr : 리소스 필터링  (0) 2008.12.09
Posted by 에코지오

댓글을 달아 주세요



티스토리 툴바