본문 바로가기
IT/CICD

Ant script 구성방법 및 샘플(build.xml, build.properties)

by 마이오픈마인드 2022. 3. 11.

1. Ant script 구성방법 및 샘플

   Ant scirpt 작성시 다양한 방법이 있지만, 가장 기본적인 패턴은 빌드파일(xml)과 설정파일(properties)을 분리해서 관리하는 방법이다. 

   본 글에서는 기본적인 구성방법을 활용한 샘플 빌드파일 및 설정파일을 공유한다. 

     

     1.1 스크립트 target정리  

           - all : 해당 스크립트의 시작 target

           - init : 이전에 작업해 놓은 디렉토리를 삭제하고, 기본적인 디렉토리를 생성하는 target 

           - compile : java 소스를 컴파일 하는 target

           - makeResource : web / was 영역에 배포해야 하는 자원들을 복사 및 이동하는 target

                                  web 환경에 deploy 해야 하는 정적자원(html, img, css, js등) 

                                  was 환경에 deploy 해야 하는 동적자원(properties, xml)

           - makeZip : web / was 자원을 remote서버로 배포하기 위해 자원을 압축(zip)하는 target

           - deploy2Server : remote 서버에 명령어(shell) 호출 및 File2File 전송하기 위한 target

 

     1.2 스크립트 내용 정리 

         1.2.1 dev_openmind_build.properties

#############################################################
##############  1. Basic Info  ####################################
#############################################################

app.name = openmind
   
base.dir = /work/ci/jenkins/workspace/dev_${app.name}_build       // jenkins workspace job의 작업경로

src.java.dir = ${base.dir}/${app.name}
ui.java.dir = ${base.dir}/ui

openmind.webapp.dir = ${base.dir}/${app.name}/src/main/webapps
openmind.resources.dir = ${base.dir}/${app.name}/src/main/resources
openmind.conf.dir = ${base.dir}/${app.name}/src/main/conf

build.class.dir = ${base.dir}/build/class
build.web.dir = ${base.dir}/build/web                        // web 자원 zip 압축을 위한 경로 
build.uisw.dir = ${base.dir}/build/uisw                       // uisw home 자원 zip압축을 위한 경로 
build.was.dir = ${base.dir}/build/was                         // was 자원 zip 압축을 위한 경로 
build.was.lib.dir = ${build.was.dir}/WEB-INF/lib
build.was.classes.dir = ${build.was.dir}/WEB-INF/classes 

#############################################################
##############  2. Compile  ####################################
#############################################################

openmind.biz.lib  = ${base.dir}         // jenkins job workspace에 checkout 받은 svn or git의 application lib 디렉토리 
openmind.fw.lib = ${base.dir}           // jenkins job workspace에 checkout 받은 svn or git의 application fw lib 디렉토리

java.encoding = utf-8

#############################################################
##############  3. Remote Server ################################
#############################################################
systemcode.server.ip = 1xx.xxx.xxx.xxx
systemcode.server.port = 22
systemcode.server.target = /temp/deploy           // target서버의 임시 디렉토리


systemcode.app.server.id = app
systemcode.app.server.password = xxxx
systemcode.mw.server.id = mw
systemcode.mw.server.password = xxxx

                

         1.2.2 dev_openmind_build.xml

<?xml version='1.0' encoding='utf-8'?>
<project name='' default='all' basedir='.'>

   <property file='dev_openmind_build.properties'/>    // 동일한 경로에 properties에 있을 경우

   // jenkins에서 수행시 target goal을 all로 수행하면 depends가 순차적으로 먼저 수행됨
   <target name='all' depends='init, compile, makeResource, makeZip, deploy2Server'/>

   <target name='init'>
        <echo> init start </echo>

         <delete dir='${build.web.dir}' guiet='true'/>
         <delete dir='${build.uisw.dir}' quiet='true'/>
         <delete dir='${build.was.dir}' quiet='true'/>
         <delete dir='${build.class.dir}' quiet='true'/>

         <make dir='${build.web.dir}' />
         <make dir='${build.uisw.dir}' />
         <make dir='${build.was.dir}' />
         <make dir='${build.class.dir}' />

         <echo> init end </echo>
     </target>

 <target name='compile' depends='init'>
        <echo> ui sw compile start  </echo>
         <javac srcdir='${ui.java.dir}' destdir='${build.class.dir}' encoding='${java.encoding}' deprecation='true' debug='true'>
               <classpath>
                       <fileset dir='${openmind.fw.lib}' />
               </classpath> 
          </javac>
        <echo> ui sw compile end  </echo>

         <echo> biz compile start  </echo>
         <javac srcdir='${src.java.dir}' destdir='${build.class.dir}' encoding='${java.encoding}' deprecation='true' debug='true'>
               <classpath>
                       <fileset dir='${openmind.fw.lib}' />
                       <fileset dir='${openmind.biz.lib}' />
               </classpath> 
          </javac>
        <echo> biz compile end  </echo>
  </target>


 <target name='makeResource' depends='compile'>
        <echo> make web resource start  </echo>
        <move todir='${build.web.dir}' >
              <fileset dir='${ui.java.dir}/WebContent'>
                    <exclude name='WEB-INF/**'/>
                    <exclude name='index.jsp'/>
              </fileset>
         </move>
         <echo> make web resource end  </echo>

        <echo> make uisw resource start  </echo>
        <move todir='${build.uisw.dir}' >
              <fileset dir='${ui.java.dir}/resource/uisw_home'>                    
              </fileset>
        </move>
        <echo> make uisw resource end  </echo>

        <echo> make was resource start  </echo>
        <move todir='${build.was.dir}' >
              <fileset dir='${openmind.webapp.dir}'>
                    <exclude name='*.html'/>
              </fileset>
         </move>

        <copy todir='${build.was.dir}' >
              <fileset dir='${ui.java.dir}/WebContent'>
                    <include name='WEB-INF/uisw/**'/>
              </fileset>
         </copy>

        <move todir='${build.was.dir}/WEB-INF/classes' >
              <fileset dir='${openmind.resources.dir}/spring'>
                    <exclude name='*.html'/>
              </fileset>
         </move>

        <copy todir='${build.was.dir}' overwrite='true' >
              <fileset dir='${openmind.conf.dir}/10.dev'>
              </fileset>
         </copy>

         <copy todir='${build.was.classes.dir}' overwrite='true' >
              <fileset dir='${build.class.dir}'>
              </fileset>
         </copy>

         <copy todir='${build.was.lib.dir}' overwrite='true' >
              <fileset dir='${openmind.biz.dir}/lib'/>
              <fileset dir='${openmind.fw.dir}/lib'/>
         </copy>

         <echo> make was resource end  </echo>
 </target>

<target name='makeZip' depends='makeResource'>
        <echo> makeZip web start  </echo>
        <zip destfile='${build.web.dir}/web.zip' basedir='${build.web.dir}' />
        <echo> makeZip web end  </echo>
  
        <echo> makeZip uisw_home start  </echo>
        <zip destfile='${build.uisw.dir}/uisw_home.zip' basedir='${build.uisw.dir}' />
        <echo> makeZip uisw_home end  </echo>
  
        <echo> makeZip was start  </echo>
        <zip destfile='${build.was.dir}/was.zip' basedir='${build.was.dir}' />
        <echo> makeZip was end  </echo>
 </target>

  <target name='deploy2Server' depends='makeZip'>
       <tstamp>
             <format property='todayStamp' pattern='yyyyMMddHHmm'/>
       </tstamp>
       
        <echo> deploy2Server web ${todayStamp} </echo>

        <echo> deploy2Server web, was, uisw start </echo>
 
         <sshexec host='${systemcode.server.ip}' port='${systemcode.server.port}' username='${systemcode.app.server.id}' password='${systemcode.app.server.password}' command='mkdir -p ${systemcode.server.target}' timeout='10000' failonerror='false' trust='true'/>

         <scp file='${build.web.dir}/web.zip' todir='${systemcode.app.server.id}:${systemcode.app.server.password}@${systemcode.server.ip}:${systemcode.server.target}' port='${systemcode.server.port}' trust='true' />
         <scp file='${build.uisw.dir}/uisw_home.zip' todir='${systemcode.app.server.id}:${systemcode.app.server.password}@${systemcode.server.ip}:${systemcode.server.target}' port='${systemcode.server.port}' trust='true' />
         <scp file='${build.was.dir}/was.zip' todir='${systemcode.app.server.id}:${systemcode.app.server.password}@${systemcode.server.ip}:${systemcode.server.target}' port='${systemcode.server.port}' trust='true' />

         <sshexec host='${systemcode.server.ip}' port='${systemcode.server.port}' username='${systemcode.app.server.id}' password='${systemcode.app.server.password}' command='sh /sw/ci/build_scirpt/dev_openmind_deploy.sh' timeout='10000' failonerror='false' trust='true'/>


         <echo> deploy2Server web, was, uisw end </echo>      
   </target>
</project>


 

 

 

 

'IT > CICD' 카테고리의 다른 글

Ant 유용한 Tip-1  (0) 2022.03.13
maven 다운로드 및 설치  (0) 2022.03.10
Ant 다운로드 및 설치  (0) 2022.03.10
Jenkins plugin 세팅  (0) 2022.03.10
Jenkins 다운로드 및 설치  (0) 2022.03.10