Oden 명령어를 실행시키기 위해 Oden에서는 자체 Shell 환경을 제공한다. Oden Shell을 통해 사용자는 Oden에서 제공하는 기능들을 이용할 수 있다.
Oden에서는 Command를 실행시키기 위해 Oden Shell을 제공한다. 아래의 명령으로 Oden Server를 실행시키면 자동적으로 Oden Shell이 실행된다. [12]
cd <Oden Server가 설치된 경로> java -jar bin/oden-x.x.x.jar [-port <포트번호>]
Oden Server는 기본적으로 하나의 Oden Agent를 내장하고 있으며, Oden Server실행과 동시에 내장되어 있는 Oden Agent도 실행되게 된다. -port 옵션의 포트번호는 Oden Agent의 포트번호를 의미하며 지정할 경우 conf/oden.ini 파일의 agent.port의 값을 대신하게 된다. 지정하지 않았을 경우 기본 값은 9862이다.
로컬뿐만 아니라 Telnet이나 웹브라우저를 통해 원격으로 Oden Shell 에 접근할 수 있다.
telnet <Oden Server IP> <Oden Shell Port> http://<Oden Server IP>:<Oden Http Port>/wconsole.html
Oden Shell Port의 기본 값은 9861이며 값을 수정하기 위해서는 Oden Server의 conf/oden.ini 파일의 shell.port값을 수정하면 된다. 수정 후 Oden Server를 재구동해야 한다. 로컬에 있는 Oden Server에 Telnet으로 접근하기 위해서는 IP에 localhost나 127.0.0.1과 같은 alias가 아닌 실제 Oden Server가 설치된 IP를 입력해 주어야 한다. Oden HTTP Port의 기본 값은 9860이며 conf/oden.ini파일의 http.port항목과 관련되어 있다.
Oden Shell을 통해 Oden Shell Commands를 실행시킬 수 있다. 인자에 스페이스가 들어가 있으면 " "로 묶어줘야 한다.
Policy Command를 통해 Policy를 설정하고 테스트해 볼 수 있다. Oden에서 배포 작업을 수행하는 단위는 Task이지만, Task는 여러개의 Policy들로 구성되어 있기 때문에 Task를 설정하기 전에 Policy를 설정해야만 한다. [13]
Policy를 추가하기 위한 명령어. 동일한 이름을 가진 Policy가 있을 경우 덮어 쓴다.
policy add <policy-name> [-r[epo] [file://<path>] | [ftp://<host> <path> [<id> <password>]]] -i[nclude] <wildcard-location> ... [-e[xclude] <wildcard-location> ...] [-u[pdate] | -del] -d[est] <agent-name>:<$<location-var>[/<path> | ~[/<path>] | <absolute-path>]> ... [-desc <description>]
‘-r’은 Oden Server에서 접근할 Build Repository를 의미한다. Oden Server와 물리적으로 동일한 장비에 파일이 존재한다면 file 프로토콜을, 아니면 ftp프로토콜을 사용하면 된다. '-del' 옵션을 지정할 경우(삭제) '-r' 옵션의 값은 무시된다.
‘-i’는 Build Repository에서 어떤 파일들을 배포할 것인지 지정하는 옵션이다. ‘*’같은 wildcard문자를 사용할 수 있으며, 하위경로까지 포함하려면 ‘**’를 사용해야 한다. 여러개의 인자가 있을 경우 ‘스페이스’로 구분한다. ‘-e’ 옵션을 지정할 경우 지정된 파일들은 배포대상에서 제외된다. 들어가는 인자의 형태는 ‘-i’ 옵션과 동일하다.
‘-u’ 옵션을 지정할 경우 Agent에 기 배포되어 있는 파일과 비교(날짜 비교) 하여 변경된 파일만 배포한다. '-del' 옵션이 있을 경우 Agent에 배포된 파일 중 지정한 파일은 삭제된다.
‘-d’는 배포될 경로를 지정한다. 경로는 Agent명 + ':' + 하위 경로로 구성된다. Agent명은 conf/config.xml에 등록이 되어 있어야 한다. 하위 경로는 절대경로, default-location의 상대경로, 타 location의 상대경로가 올 수 있다. default-location 이하에 배포하려면 '~' 다음에 경로를 입력하면 된다. config.xml에 설정된 다른 location명에 배포하려면 '$'다음에 location명을 입력하고 그 하위 경로를 주면 된다. 배포할 Agent가 여러개일 경우 스페이스로 구분한다.
로컬 파일을 agent0의 특정경로에 배포
policy add p0 -r "file://C:/Build Repository/anyframe-app" -i ** -d agent0:C:/works -desc "local files to agent0"
C:/Build Repository/anyframe-app의 모든 file(하위경로 포함)들을 agent0(conf/config.xml에 설정되어 있어야 함)의 C:/works폴더에 배포함. 옵션의 인자에 스페이스가 있을 경우 쌍따옴표로 묶어야 한다. **는 하위의 모든 경로를 포함함을 의미한다. 경로가 포함되면 그 안의 파일들도 배포가 되기 때문에 결국 **만 지정을 해주면 하위경로의 모든 파일을 배포함을 의미한다.
로컬 파일을 agent0의 default-location으로 배포
policy add p1 -r "file://C:/Build Repository/anyframe-app" -i ** -d agent0:~ -desc "local files to agent0"
C:/Build Repository/anyframe-app의 모든 file(하위경로 포함)들을 agent0(conf/config.xml에 설정되어 있어야 함)의 default-location에 배포함. 옵션의 인자에 스페이스가 있을 경우 쌍따옴표로 묶어야 한다. **는 하위의 모든 경로를 포함함을 의미한다. 경로가 포함되면 그 안의 파일들도 배포가 되기 때문에 결국 **만 지정을 해주면 하위경로의 모든 파일을 배포함을 의미한다.
특정확장자를 제외한 파일만 배포
policy add p2 -r "file://C:/Build Repository/anyframe-app" -i ** -e **/*.svn -d agent0:$temp
C:/Build Repository/anyframe-app의 모든 file(하위경로 포함)들중 svn확장자를 가진 파일이나 폴더를 제외하고 agent0의 temp에 배포함. temp는 conf/config.xml의 location에 정의되어 있어야 한다.
FTP로 특정확장자의 파일들을 여러 Agent로 배포 (case #1)
policy add p3 -r ftp://172.16.70.77 /anyframe-app/images guest 1111 -i **/*.jpg **/*.gif -d agent0$images agent1$images
172.16.70.77의 FTP에 guest/1111 계정으로 접근한 뒤 anyframe-app/images 하위의 모든 jpg, gif, png파일들을 agent0와 agent1의 images 경로로 배포함. agent0와 agent1, agent0의 images, agent1의 images는 conf/config.xml에 정의되어 있어야 한다.
FTP로 특정확장자의 파일들을 여러 Agent로 배포 (case #2)
policy add p4 -r ftp://172.16.70.77 /anyframe-app guest 1111 -i images/**/*.jpg images/**/*.gif -d agent0:~ agent1:~
이번 예제는 config.xml에 images location을 등록하지 않고도 위의 예제와 동일한 결과를 얻을 수 있음을 보여준다. -i 옵션에서 지정된 경로는 그 경로 그대로 Agent로 배포된다. 예를들어 -i sample/**로 배포할 파일을 지정하면 Agent에 sample폴더 이하의 파일이 바로 배포되는 것이 아니라, sample폴더가 먼저 생성이 된 후 그 안에 파일들이 배포된다. conf/config.xml에 매번 location을 등록하는 것이 번거롭다면 이런식으로 사용하기 바란다.
변경된 파일만 배포
policy add p5 -r ftp://172.16.70.77 /anyframe-app/classes guest 1111 -i ** -u -d agent0:/User/classes
172.16.70.77의 FTP에 guest/1111 계정으로 접근한 뒤 classes폴더의 모든 파일들(하위경로 포함)과 agent0의 /User/classes의 파일들과 비교하여 날짜가 변경된 파일만 배포함. conf/config.xml에 agent0(agent태그)와 classes(location태그)가 정의되어 있어야 한다.
Ant를 이용하여 변경된 소스코드만 빌드하도록 할 수 있다.
Ant의 javac 태스크는 기본적으로 소스 폴더와 빌드 폴더를 비교하여 class파일이 존재하지 않는 소스 코드에 대해서만 빌드를 수행하도록 되어 있다. 그래서 일반적으로 ant 스크립트 작성 javac를 수행하기 전에 빌드 폴더를 전부 삭제하여 Full Build를 수행한다. ant의 depend 태스크를 사용하면 빌드 폴더를 전부 삭제하지 않고 변경이 일어난 class 와 그것과 의존관계가 있는 class파일만 삭제할 수 있다. 이 후 javac 태스크에서는 존재하는 파일은 제외하고 존재하지 않는 파일(depend에 의해 삭제된 변경된 class 및 그것과 의존성이 있는 class)에 대해서만 빌드를 수행하므로 변경된 파일에 대해서만 빌드가 가능하다. 이렇게 변경된 파일과 그것과 의존성이 있는 파일에 대해서만 빌드하는 것을 Incremental Build라고 한다. 아래 예제는 depend 태스크를 이용하여 Incremental Build를 수행하는 스크립트를 보여준다.
<target name="inc-build">
<depend srcdir="src/main/java" destdir="build/classes" closure="yes" />
<javac srcdir="src/main/java" destdir="build/classes">
<classpath>
<path refid="compile.classpath" />
</classpath>
</javac>
</target>depend 태스크에 의해 src/main/java와 build/classes를 비교하여 변경된 파일과 의존성있는 파일에 대해서만 class파일이 삭제된다. javac 태스크에 의해 삭제된 파일에 대해서만 빌드가 일어난다. 이 후 Oden Policy의 -u옵션을 통해 변경된 바이너리 파일만 배포가 가능하다.
Policy의 정보를 조회하기 위한 명령어. policy-name을 지정하지 않았을 경우 등록된 모든 Policy의 정보를 보여준다.
policy info [<policy-name>]
Task는 Oden의 실제 배포작업을 수행하는 단위이다. Task는 여러개의 Policy들로 구성되어 있다. Task 명령어를 통해 실행할 Policy를 가진 Task들을 설정하고 실행할 수 있다.
새 Task를 생성하기 위한 명령어. 동일한 이름을 가진 Task가 있을 경우 덮어 쓴다.
task add <task-name> -p[olicy] <policy-name> ... -desc <description>
두개의 Policy를 가지는 Task 생성
task add t0 -p p0 p1
Policy p0와 p1을 가지는 Task t0 생성. Policy Command를 통해 p0와 p1이 이미 등록되어 있어야 한다.
Task의 정보를 조회하기 위한 명령어. task-name을 지정하지 않았을 경우 등록된 모든 Task의 정보를 보여준다.
task info [<task-name>]
History 명령어를 통해 배포된 내역을 조회할 수 있다. Task 명령어를 통해 배포된 내역을 조회할 수 있으며, 같은 Task 안에서 수행되었더라도 실제로 배포되지 않은 파일은 기록되지 않는다.
history가 기록된 내역 조회. 해당 날짜의 history 리스트를 간략히 출력한다. 날짜를 지정하지 않으면 오늘 배포된 내역 리스트를 출력한다.
history info [-d[ate] <start-date: YYYYMMDD> <end-date: YYYYMMDD>]
Oden을 통해 배포된 내역을 조회한다. 옵션이 없을 경우 최근에 배포된 Policy의 내역을 보여준다. Oden Shell이나 Telnet을 통해 수행된 Task의 유저 IP 정보는 항상 Oden Server의 IP가 된다. 누가 배포하였는지 정확한 정보를 기록하기 위해서는 Eclipse Plugin과 같이 Oden의 HTTP 서비스를 이용하는 UI를 통해 배포하여야 한다.
history show [<txid> | -d[ate] <start-date: YYYYMMDD> <end-date: YYYYMMDD>] [-u[ser] <user-access-ip>] [-a[gent] <host-name>] [-p[ath] <path>] [-d[ate] <start-date: YYYYMMDD> <end-date: YYYYMMDD>] [-f[ailonly]]
txid가 주어지면 해당 history내역에서 상세 검색을 한다. -d가 주어지면 해당 날짜에 해당하는 history내역을 상세 검색한다. txid도 없고 -d옵션도 없으면 최근 history내역에서 상세 검색을 한다.
‘-u’ 옵션은 배포 명령어를 수행시킨 사용자의 IP를 검색하기 위한 옵션이다. 70.7로 시작하는 모든 사용자가 배포한 내역을 검색하려면 ‘-u 70.7’ 로 인자를 주면 된다. Telnet으로 수행하였더라도 Oden Shell을 통해 수행된 Task는 모두 Oden Server의 IP로 기록되어 있으니 정확한 사용자를 파악하기 위해서는 Eclipse Plug-in과 같이 Oden의 HTTP 서비스를 사용하는 UI를 이용하여야 한다.
‘-a’ 옵션은 Agent의 IP를 지칭한다. Oden Server에 내장된 Agent인 경우 IP에 localhost로 기록이 된다.
‘-p’는 배포한 파일의 경로를 지정하는 옵션이며 지정한 경로가 들어가 있는 모든 내역을 출력한다. 예를 들어 ‘-p anyframe’을 입력하면 경로에 anyframe이 들어가 있는 모든 내역을 출력한다.
‘-d’는 배포가 실행된 날짜를 지정해 주는 옵션이다. 인자가 하나만 있을 경우 ‘start-date’를 의미하며 ‘start-date’부터 오늘까지 배포된 모든 내역을 출력한다.
특정날짜로 부터 특정 Agent에 배포된 모든 내역을 조회
history show -a 192.168.0.2:9862 -d 20090101
2009년 1월 1일 부터 192.168.0.2:9862에 배포된 모든 내역을 조회한다.
Oden Server에 내장된 Agent에 배포된 내역을 조회
history show -a localhost -d 20090101 20090102
2009년 1월 1일부터 2009년 1월 2일 사이에 OdenServer에 내장된 Agent에 배포된 파일 내역을 조회한다.
Oden Server에 내장된 Agent에 배포를 하면 history에는 localhost로 기록이 된다.
특정 IP대역의 유저가 배포한 내역을 조회
history show -u 172.16.70 -d 20090101
172.16.70으로 시작하는 IP를 가진 유저들이 2009년 1월 1일 부터 배포한 내역을 조회
특정파일을 배포한 내역을 조회
history show -p index.html
지금까지 index.html을 배포한 모든 내역을 조회
txid에 해당하는 배포파일들의 배포를 취소. 최근 3개의 이력까지만 취소가 가능하다. -p 옵션이 있다면 배포된 파일 중 -p옵션에 지정된 파일의 배포만 취소한다. -p의 첫번째 인자는 Agent명과 절대경로 이며 이 후 인자는 절대경로 이후의 파일들의 상대경로들이다.
history undo <txid> [-p[ath] <agent-name>:<absolute-path> <file-path> ...]
Target Server의 파일을 Backup하거나 Backup된 파일(Snapshot이라 부른다.)을 조회하기 위한 명령어이다. Backup을 수행하기 위해서는 해당 정보를 가지고 있는 Snapshot Plan을 먼저 정의해야 한다. Backup이 수행되면 Plan정보를 바탕으로 폴더를 압축하여 지정한 위치에 저장한다. Snapshot 명령어로 Backup된 파일의 정보를 확인할 수 있다.
Snapshot Plan이 삭제되거나 수정되면 해당 Plan을 바탕으로 생성된 Snapshot File들은 모두 사라지게 된다.
Snapshot Plan을 추가한다. 기존에 Plan이 있을 경우 해당 정보를 덮어쓰게 된다. 해당 정보를 덮어쓰게 될 경우 Plan을 통해 생성된 Snapshot File들이 모두 사라지므로 주의해야 한다.
snapshot add <plan-name> -s[ource] <agent-name>:<$<location-var>[/<path> | ~[/<path>] | <absolute-path>]> [-desc <description>]
‘-s’옵션에 백업할 파일의 경로를 지정한다. 경로는 Agent명 + ':' + 하위 경로로 구성된다. Agent명은 conf/config.xml에 등록이 되어 있어야 한다. 하위 경로는 절대경로, default-location의 상대경로, 타 location의 상대경로가 올 수 있다. default-location 이하에 배포하려면 '~' 다음에 경로를 입력하면 된다. config.xml에 설정된 다른 location명에 배포하려면 '$'다음에 location명을 입력하고 그 하위 경로를 주면 된다.
간단한 백업
snapshot add s0 -s agent0:~
agent0의 default-location 내의 모든 파일들을 압축하여 agent0의 backup-location 경로에 저장한다. agent0와 backup-location은 conf/config.xml에 정의되어 있어야 한다.
Snapshot Plan 혹은 Snapshot File 정보를 조회한다. ‘-p’나 ‘-f’옵션을 붙이지 않았을 경우 모든 Snapshot Plan정보를 출력한다. ‘-p’를 붙였을 경우 해당 Plan의 정보를 출력하며 plan-name이 없을 경우 모든 Plan정보를 출력한다. ‘-f’옵션을 붙였을 경우 Backup 을 통해 생성된 Snapshot File의 정보를 출력하며 file-name을 지정하지 않았을 경우 모든 Snapshot File의 정보를 출력한다.
snapshot info -p[lan] [<plan-name>] | -f[ile] [<file-name>]
Snapshot Plan 혹은 Snapshot File을 삭제한다. ‘-p’ 옵션이 있을 경우 지정한 Snapshot Plan을 삭제한다. 이 Plan을 통해 만들어진 Snapshot File도 모두 삭제되므로 주의하여야 한다. ‘-f’ 옵션이 있을 경우 지정한 Snapshot File들을 삭제한다. 각 파일은 스페이스바로 구분한다.
snapshot del -p[lan] <plan-name>] | -f[ile] <file-name> ...
Snapshot Plan이 수행되었을 경우 어느 경로의 파일들이 어디에 저장될 것인지를 미리 보여준다. 실제로 Backup을 수행하지는 않는다.
snapshot test <plan-name>
Snapshot명령어로 Backup된 파일들을 복원할 때 사용되는 명령어이다.
conf/config.xml에 설정된 Agent에 관한 설정을 조회하기 위한 명령어이다. conf/config.xml에 설정된 Agent정보는 다른 명령어들을 실행할 때 사용되며, 이 명령어를 통해 그 정보들을 조회해 볼 수 있다. Agent정보는 수정할 수는 없으며, 수정하기 위해서는 conf/config.xml을 직접 수정하여야 한다. conf/config.xml 수정 후 재구동할 필요없이 바로 적용된다.
config.xml에 등록된 agent의 정보 및 상태 확인 명령어. agent-name을 지정하지 않았을 경우 등록된 모든 Agent의 정보가 간략히 출력된다. agent-name을 지정하였을 경우 지정한 Agent의 정보가 상세히 출력된다.
agent info [<agent-name>]
Oden Shell에서 제공하는 모든 명령어의 목록을 보기 위해서는 help를 입력하면 된다. 각 명령어의 상세 사용법을 보기 위해서는 명령어 뒤에 help를 붙이거나 뒤의 인자를 제외한 명령어 이름만 입력하면 된다.