BF의 Java API가 7.0.X 에서 7.1.X로 올라오면서, 몇가지 변경이 있다.

특히, 환경 변수 세팅하는 부분... 혹시나.. 어려움을 겪으실 지 모를 분들을 위해, 예전 7.0.X 버전 것을 조금 손 봤습니다.

 

/**
  * 빌드포지 프로젝트를 실행시키는 메소드
  *
  * @param info
  * @param buildPrjNm
  * @return
  * @throws IOException
  * @throws ServiceException
  */
 private String fireBFJob(BuildInfo info, String buildPrjNm, HashMap param) throws IOException, ServiceException {
  String buildID = "";
  APIClientConnection conn;
  BuildEnvironment environ;
  
  log.debug("BuildForge Connect.....");
  conn = new APIClientConnection(HOSTNAME, BF_PORT);
    conn.authUser(AUTH_ID, AUTH_PW);

  Project project = Project.findByName(conn, buildPrjNm);
  
  // As of 7.1, We need to use Build.Request & Build
  Build.Request buildRequest= new  Build.Request( project );
  Build currentBuild = Build.create(buildRequest); // Project를 실행하기 위한 Job을 하나 만든다.

  
  // 그 Job에 할당된, 환경변수그룹을 찾아낸다. Not Enviroment , But BuildEnvironment
  environ = BuildEnvironment.findByUuid(conn, currentBuild.getBuildEnvironmentUuid());
  log.debug("  Project From BF : " + project.getUuid().trim() + ":" + project.getName() );
  log.debug("  Enviroment Form BF : " + environ.getName());

 

  if (environ != null) {
   // 넘겨진 param(HashMap)을 가지고 환경 구성
   log.debug("BuildForge 환경 구성");
   Iterator paramIter = param.keySet().iterator();
   while (paramIter.hasNext()) {
    String paramKey = (String) paramIter.next();
    String paramValue = (String) param.get(paramKey);

    BuildEnvironmentEntry en = environ.getEntry(paramKey);
    log.debug("BF 환경정보(기본값) : " + en.getParameterName() + "|" + en.getParameterValue());
    currentBuild.updateBuildEnvEntryValue(en.getUuid(), paramValue); // 빌드 잡 인스턴스의 환경이므로, 직접적으로 세팅이 안된다.
    
   }
   
   // 환경 변수 설정  확인 용
   BuildEnvironment modifiedEnviron = BuildEnvironment.findByUuid(conn, currentBuild.getBuildEnvironmentUuid());
   Iterator modifiedEnvironEntries = modifiedEnviron.getEntries().iterator();
   while( modifiedEnvironEntries.hasNext() ) {
    BuildEnvironmentEntry modifiedEntry = (BuildEnvironmentEntry)modifiedEnvironEntries.next();
    log.debug("BF 환경정보(변경값) : " + modifiedEntry.getParameterName() + "|" + modifiedEntry.getParameterValue() );
   }
   // 환경 변수 설정  확인 용 끝
   
   log.debug("Before fire..");
   buildID = currentBuild.getUuid();
   Build.fireBuild(conn, currentBuild.getUuid() );
   
   log.debug("Project : " + project.getName() + " is fired " + buildID);
   
  } else {
      log.error("Project에 할당된 환경 변수 그룹이 없습니다.");
  }
  return buildID;
 }

이 글은 스프링노트에서 작성되었습니다.

Posted by 아프락사스

Build Forge  7.0.2  버전이 사용하는  perl DBI 모듈에 Memory Leak이 있다고 한다.

이 모듈은 자주 쓰일 수 밖에 없는 것이므로, 결국 BF MC(Main Console)의 메모리 leak을 유발할 수 밖에 없을 것으로 보인다. 7.0.2를 사용한다면 꼭 살펴봐야할 문제일 듯.

 

그런데, 자세히 살펴보니 AIX, Solaris 및 Linux에만 해당되는 문제인 것 같다...

휴우 다행이다. 내가 설치한 BF중 Windows가 아닌 건 AIX밖에 없고, 그 버전은 7.1.1.1 이니까.. 괜찮겠지?

 

원문은..

http://www-01.ibm.com/support/docview.wss?rs=3099&context=SS2MGB&dc=D600&uid=swg21316355&loc=en_US&cs=UTF-8〈=en&rss=ct3099rational

이 글은 스프링노트에서 작성되었습니다.

Posted by 아프락사스

를 어디까지 지원하냐면... 즉  Backwards compatibility는 7.0.2 이상의 agent이어야 한단다.

 

Build Forge에 Agent자동 update 기능이 생겼지만, 개인적으로도 제대로 써보지는 못했다.

root권한등이 필요한 agent 업데이트를 자동으로 처리했다가 어떤 낭패를 볼지 몰라서..

그러다 보니, Console은 계속 패치를 해 나가는데, agent는 옛날 버전이기 일수다.

 

이제까지 agent의 업데이트를 미뤄두었다면, 7.1.1.1로 업그레이드 할 때는 한번쯤 전체 업데이트를 고려해 봐야 할 듯 하다.

 

공식 원문은 여기서..

http://www-01.ibm.com/support/docview.wss?rs=3099&context=SS2MGB&dc=DB560&dc=DB520&uid=swg21389011&loc=en_US&cs=UTF-8〈=en&rss=ct3099rational

이 글은 스프링노트에서 작성되었습니다.

Posted by 아프락사스

이 드디어 나왔다.

 

다운로드는 여기서.. http://www-01.ibm.com/support/docview.wss?uid=swg24024017

 

이 글은 스프링노트에서 작성되었습니다.

Posted by 아프락사스

Windows PowerShell이 나와서 반갑다는 이야기를 쓴지가 5분이 되지 않았는데, 아래와 같은 슬픈 현실이...

 

http://www-01.ibm.com/support/docview.wss?rs=3099&context=SS2MGB&dc=DB560&dc=DB520&uid=swg21323061&loc=en_US&cs=UTF-8&lang=en&rss=ct3099rational

 

When PowerShell is called, a separate shell is created. Rational Build Forge is unable to access this shell and never receives a response from the agent's PowerShell process/shell. The step eventually times out in Rational Build Forge and the build fails.

 

PowerShell을 호출하면, 다른 쉘(즉 다른 프로세스)이 시작되기 때문에, Build Forge agent로서는 Return 코드를 받거나, 로그 스트림을 받아낼 수가 없다는 이야기다. 결국, 맨 처음 호출된 PowerShell 프로세스로 부터는 아무런 응답을 받지 못하고, TMO가 발생한다는 이야기다.

 

BF의 잘못인가? 아님 PowerShell 아키텍처가 잘못 된 것인가.

 

내가 보기에는 Windows 아키텍처 상 PowerShell에서 단일 프로세스로 스크립팅을 처리할 수 없기 때문이 아닐까 싶다.

윈도우의 기본 명령어 인터프리터(일명, CMD)에서 PowerShell script를 처리하지 못하고, PowerShell 인터프리터 프로세스를 새로 띄움으로서 발생하는 치명적인 약점인 것이다.

 

BF의 다음버전에서는 이를 반영할 수 있을까? MS가 수정할 것 같지도, 수정할 수 있을 것 같지도 않으니 말이다.

 

그나마, 링크된 문서에 따르면 workaround로 VB script로 PowerShell을 둘러싸는 방법을 쓸 수는 있단다.  쯧쯧, 이 어찌나 처절한 방법인가.

 

Resolving the problem Because PowerShell opens its own shell, Rational Build Forge cannot directly interact with PowerShell. Future versions of Rational Build Forge may adopt an architectural change that allows interaction with PowerShell, but currently the only method of facilitating this interaction is to wrap the PowerShell command within a Microsoft Visual Basic script. Some users have had success using the site at the following link:
http://blog.sapien.com/index.php/2006/12/20/schedule-hidden-powershell-tasks

이 글은 스프링노트에서 작성되었습니다.

Posted by 아프락사스

그동안 BF 프로젝트를 하다보면, Windows 서버에 재일 먼저 설치하는 것 중 하나가, Cygwin이었다.

많고 많은 Windows의 부족함 중에서, CLI(Command Line Interface)를 이용한 파일 및 시스템 등의 제어였다.

 

BF의 운용은 거짓말 조금 보태서, 95%가 CLI로 해야 하는 것을 감안한다면, Windows란 참으로 거추장 스러운 녀석이었다.

 

Windows는 그 이름에서도 알 수 있듯이(개인적인 의견으로는), GUI로 모든 것을 해결하고자 했었다. 하지만, 시스템 관리자등의 입장에서는 GUI가 불편할 때가 있게 마련이다. 모든걸 보고 할 수 있다는 이야기는 거꾸로 말하면, 아주 작은 일을 하려고 해도 보지 않고는 할 수 없다는 이야기이기 때문.

자동화(automation)으로 가는 데 있어서, 크나큰 장애물임에 틀림없다.

 

이제, 그러한 문제들을 MS가 인정했다는 증거가. PowerShell의 등장이 아닌가 싶다.

아직, 자세히는 둘러보지 못했지만, 접근 방법에 변화를 줬다는 것에 격려의 박수를 주고 싶다.

 

http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

이 글은 스프링노트에서 작성되었습니다.

Posted by 아프락사스

 몇일간 삽질을 제대로 했다.

 

BF 7.1.1 이미지를 XL에서 받아놓고, Launch Pad로 하거나, Installation 으로 하거나, 계속 Null Pointer에러가 나는 것이었다.

 

결국 PMR을 오픈했는데, 답으로 온것은.. 두개의 이미지(zip)을 한곳에다 압축을 풀고 해보라는 것이다.

 

잘된다!!!! 허걱... zip파일안에 Readme파일을 내가 안 봤던 것이다.

 

전 세계 사람들 중에서 한국인이 가장 매뉴얼을 안 읽는다고 하더니... 제품 지원하는 내가 이런 기초적인 오류를 범하다니.. -.-;

 

 

2009.08.03

설치에는 성공했으나, 빌드 포지 엔진이 제대로 동작하지 않는다. Apahce(콘솔 웹)와 Tomcat(Report)은 정상적으로 동작하고,

한글도 아주 작은 문제를 제외하고는 정상적으로 동작한다.

그런데, 정상적으로 설치된 Agent와의 통신이 당최 동작하지 않는다.

 

2009.08.06

알고 보니, AIX는 Engine을 띄우기 위해서는,  "설치디렉토리/rc/buildforge"를 이용해야 한다.

엔진을 직접적으로 따로 띄워야 하는 것이다. 난 "설치디렉토리/server/start"를 이용해서 Apache와 Tomcat만 따로 띄웠던 것!

Windows버전은 엔진 띄우는 메뉴가 당연히 있고, 이는 결국 Apache와 Tomcat을 띄우는데, 올라올때 보면, Apache와 Tomcat만 올라오는 것으로 보여서, 이제까지 엔진이 따로 뜨고 있었다는 간단한 사실을 망각하고 있었던 것이다.

 

How Stupid I Am!!!!! 

이 글은 스프링노트에서 작성되었습니다.

Posted by 아프락사스
Posted by 아프락사스

RAFW(Rational Automation Framework for WebSphere)가 GA된지도 벌써 한달이 다 되가는데,

제대로 테스트를 하지 못하고 있었다. 

 

사실, 설치 및 사용에 대한 공식적 자료를 찾기가 어려웠던 이유였는데, 설치를 다음의 절차를 따라 Build Forge 7.1.1을 깔게되면,

Document도 볼수 있단다.

 

http://www-01.ibm.com/support/docview.wss?rs=3099&context=SS2MGB&dc=DB560&dc=DB520&uid=swg21391257&loc=en_US&cs=UTF-8〈=en&rss=ct3099rational

 

 

환경변수 RAFW_ENABLED=1 을 설정하고, IM을 띄우면 되는 아주 간단한 절차이다.

이렇게 설치하면, "설치디렉토리"밑에 rafw라는 디렉토리가 생기고, 여기에 각종 WebSphere 버전별 이미지/템플릿 등이 깔린다.

원격 설치등을 위한 이미지 인 것이다.

 

모두들 짐작하겠지만, 설치 이미지는 워낙 크고, 계속해서 Fix등이 들어나므로, NFS등을 이용해서 저장해두고, rafw 에 연결하는 방식을 권장하는 것 같다. 

이 글은 스프링노트에서 작성되었습니다.

Posted by 아프락사스

로그 파일에서 일정 패턴을 추출해 내는 script. 일정 시간 간격으로 계속해서 특정 로그 파일을 바라보며,

이전에 추출했던 파일과 비교(diff)하여, 새로 잡아진  로그만 추출하는 스크립트

 

cat monitoring.sh 

#!/bin/sh

 

#$1 log path /app/waslog/accsvr11

#$2 timestamp   11:12:34

 

LOG_PATH=$1

TIMESTAMP=$2

 

LOG_FILE=SystemOut.log

#LOG_FILE=SystemOut_09.03.23_16.00.00.log

 

COUNT=0

STATUS=0

while [ ${COUNT} -lt 100 ]

do

        cat $LOG_PATH/$LOG_FILE | grep ERR-CRITICAL >  $LOG_PATH/${LOG_FILE}_ERR_FILTERED_${TIMESTAMP}

        touch $LOG_PATH/${LOG_FILE}_ERR_FILTERED

        diff $LOG_PATH/${LOG_FILE}_ERR_FILTERED_${TIMESTAMP} $LOG_PATH/${LOG_FILE}_ERR_FILTERED

        STATUS=`echo $?`

 

        rm -f $LOG_PATH/${LOG_FILE}_ERR_FILTERED

        mv $LOG_PATH/${LOG_FILE}_ERR_FILTERED_${TIMESTAMP} $LOG_PATH/${LOG_FILE}_ERR_FILTERED

 

        COUNT=`expr ${COUNT} + 1`       

        echo "Monitoring... ${TIMESTAMP} - ${COUNT} times Status = ${STATUS}"

 

        # when diff emit something, the return code is 1, it means there's something to be notified

        if [ ${STATUS} -eq 1 ]; then

                exit 0

        fi

        sleep 10

done

 

 

이 글은 스프링노트에서 작성되었습니다.

Posted by 아프락사스

BLOG main image

공지사항

카테고리

분류 전체보기 (155)
Architect이야기 (1)
Rational Products (94)
Patterns (0)
JEE Technologies (3)
Methodology (0)
Apache Project (0)
Open Project (4)
Knowhow (52)
Etc (0)