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 시작,종료 스크립트에 벤더들이 여러가지로 장난?을 많이 쳐놓아서 그것도 쉽지만은 않다.