WAS를 start/stop/restart하거나 웹어플리케이션을 deploy/undeploy/redeploy하는 작업을 자동으로 처리하기 위해 쓸 수 있는 방법은 어떤게 있을까?

1. 스크립트 실행
작업을 정의한 스크립트를 실행한다. 아마 이게 제일 속편한 방법일지도 모른다.
Ant에서는 telnet, exec, sshexec 등의 타스크를 이용하여 실행하면 된다.

Ant sshexec 타스크를 통해서 원격지의 Tomcat을 start하는 예제

<target name="remote-tomcat-start">
  <sshexec host="${ssh.hostname}"
  port="${ssh.port}"
  username="${ssh.username}"
  passphrase=""
  trust="true"
  keyfile="${ssh.key.file}"
  command="${tomcat.home}/bin/startup" />
  <sleep seconds="${sleep.time}" />
</target>


2. WAS에서 제공하는 Ant 타스크 또는 Maven 플러그인 이용
대부분의 WAS가 어드민화면을 통하지 않고 여러가지 작업을 수행할 수 있는 수단을 제공한다.

Tomcat에서 제공하는 deploy 타스크를 이용하여 war를 deploy하는 Ant 예제

    <target name="install" description="Install application in Tomcat"
        depends="package-web">
        <deploy url="${tomcat.manager.url}"
            username="${tomcat.username}"
            password="${tomcat.password}"
            path="/${webapp.name}"
            war="file:${webapp.dist}/${webapp.war}"/>
    </target>


3. Cargo 이용
Cargo는 WAS 마다 다른 형태의 API를 래핑하여 표준적인 방법으로 WAS를 핸들링할 수 있게 해준다. 그러나 아직 지원하는 WAS가 많지 않다.

Ant에서 cargo 타스트를 이용하여 Tomcat을 start하는 예제

  <cargo containerId="tomcat5x" home="${tomcat.home}" output="${tomcatlog.dir}/output.log"
      log="${tomcatlog.dir}/cargo.log" action="start">
    <configuration home="${tomcatconfig.dir}">
      <property name="cargo.servlet.port" value="8080"/>
      <property name="cargo.logging" value="high"/>
      <deployable type="war" file="${mywarfile}"/>
    </configuration>
  </cargo>
Posted by 에코지오
,
Ant 에서 원격서버의 명령을 실행할 때 그 명령이 백그라운드로 계속 돌아가는 프로세스를 생성한다면 약간 골치아픈 일이 벌어진다.  대표적인게 WAS시작 스크립트를 원격으로 실행하는 건데, WAS를 띄우면 WAS는 계속해서 console에 정보를 출력하고 이는 WAS가 죽기 전에는 끝나지 않는다.
 
       <sshexec host="${wasserver.ip}" username="${wasserver.username}"
         password="${wasserver.password}" trust="true"  command="start.sh" />

아무 생각없이 이렇게 타스크를 정의했다간 서버단의 콘솔메시지가 로컬의 ant를 실행시킨 커맨드 창에 주루룩 나오면서 ant 실행이 끝나지 않을 것이다. (이게 WAS 시작 스크립트에서 흔히 볼 수 있는 nohup과 관련된 것인지는 잘 모르겠다)

그래서 sshexec 옵션에 timeout="2초" failonerror="false"을 추가하면 timeout 후 빌드가 실패한다.(maven으로 돌렸는데 메이븐이 그 이후의 단계를 더이상 진행하지 않고 그냥 끝나버렸다)

안타까워하다가 혹시나하고 의존라이브러리인 ant-jsch와 jsch 버전을 업그레이드했더니 다행히 timeout후 빌드결과가 성공으로 나온다.

    <dependencies>
     <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant-jsch</artifactId>
      <version>1.7.1</version>
     </dependency>
     <dependency>
      <groupId>com.jcraft</groupId>
      <artifactId>jsch</artifactId>
      <version>0.1.38</version>
     </dependency>
    </dependencies>

WAS에서 제공하는 ant 타스크를 이용하면 깔끔하지 않겠냐하는 분도 계시겠지만 보통 WAS 시작,종료 스크립트에 벤더들이 여러가지로 장난?을 많이 쳐놓아서 그것도 쉽지만은 않다.

Posted by 에코지오
,