[QuickBuild] RESTful API로 빌드 요청

QuickBuild를 이용할 때, 굳이 사이트에 접속해서 빌드를 돌리지 않아도 RESTful API를 이용하면 빌드를 걸 수 있다.

http://wiki.pmease.com/display/QB61/Interact+with+Build+Requests#InteractwithBuildRequests-requestnewbuild 에 해당 내용이 정리되어 있다.

Basic authentication 시에 curl을 이용해서 요청하는 방법은 다음과 같다.

$ curl -X POST -u dasomoli:password -d@request.xml http://<Server>:8810/rest/build_requests

위의 예제에서 사용한 request.xml 은 다음의 형식을 가진다. <varlables> 안에 채울 내용은 해당 configuration에서 실행한 빌드의 variables(http://<Server>:8810/build/<Build id>/variables) 페이지에서 확인 가능하다.

<com.pmease.quickbuild.BuildRequest>
  <!-- This element tells QuickBuild in what configuration to trigger build. -->
  <configurationId>10</configurationId>

  <!-- This element tells whether or not to respect build condition of the configuration. 
       If this is set to true, and if the build condition evaluates to false, build will 
       not be triggered. -->
  <respectBuildCondition>false</respectBuildCondition>

  <!-- This element is optional and is used to specify variables for build triggering. If 
       specified, it will override the variable with the same name defined in configuration
       basic setting. -->
  <variables>
    <entry>
      <string>var_name1</string>
      <string>var_value1</string>
    </entry>
    <entry>
      <string>var_name2</string>
      <string>var_value2</string>
    </entry>
  </variables>

  <!-- This element is optional and is used to tell QuickBuild to request a build promotion. -->
  <promotionSource>

    <!-- This element is optional and is used to tell QuickBuild that the source build resides on another 
         QuickBuild server. -->
    <server>
      <url>http://another-qb-server:8810</url>
      <userName>admin</userName>
      <password>admin</password>
    </server>

    <!-- Identifier of the source build to promote from -->
    <buildId>697</buildId>

    <!-- This element is optional and used to specify files to promote -->
    <deliveries>
      <com.pmease.quickbuild.FileDelivery>
        <srcPath>artifacts/dir1</srcPath>
        <filePatterns>**/*.jar</filePatterns>
      </com.pmease.quickbuild.FileDelivery>
      <com.pmease.quickbuild.FileDelivery>
        <srcPath>artifacts/dir2</srcPath>
        <filePatterns>**/*.war</filePatterns>
      </com.pmease.quickbuild.FileDelivery>
    </deliveries>
  </promotionSource>

</com.pmease.quickbuild.BuildRequest>

Sample XML의 comment에서 확인할 수 있듯이 <promotionSource>내부는 생략 가능하다.

curl 사용법

curl 잘쓰면 엄청 편하다.
* HTTP 전송 과정에 대한 상세 정보. curl이 하는 모든 일을 debugdump.txt에 저장한다.
curl –trace-ascii debugdump.txt http://blog.dasomoli.org/
* 일반적인 http 요청(GET method)
curl http://blog.dasomoli.org/
* HTTP authentication
curl -u <id>:<password> http://blog.dasomoli.org/
* POST method 요청
curl -X POST -d”<data>” http://blog.dasomoli.org:80/post/
다음과 같은 form이 있다면,
<form method=”POST” action=”dasomoli.cgi”>
<input type=text name=”id”>
<input type=submit name=press value=” OK “>
</form>
다음과 같이 전송 가능((hidden type도 그냥 쓰면 됨)
curl –data “id=dasomoli&press=%20OK%20”  http://blog.dasomoli.org/dasomoli.cgi
–data-urlencode를 쓰면 %20같이 쓰지 않고, 아래처럼도 가능하다고 한다.
curl –data-urlencode “name=JeongSeok Yang” http://blog.dasomoli.org/dasomoli.cgi
* POST로 파일 보내기
curl -X POST -d@<filename> http://blog.dasomoli.org/post/
* PUT method
curl –upload-file uploadfile http://blog.dasomoli.org/receiveput.cgi
* JSON 전송
curl -X POST http://blog.dasomoli.org/json/ -d@dasomoli.json -H “Content-Type: application/json”
* 쿠키 쓰기
curl -b cookie.txt -c cookie.txt http://blog.dasomoli.org/

 

 

Shell script 에서 자주 쓰는 명령들

처음 시작은
#!/bin/sh

Perl 처음 시작은
#!/usr/bin/perl -w

argument는 $0 $1 $2 …
argument 처리는 아래 형식.

for ARGUMENT in “$@”; do
case $ARGUMENT in
–commit)
COMMIT=$2;
;;
–uploader)
UPLOADER=$2;
;;
–branch)
BRANCH=$2;
;;
–patchset)
PATCHSET_ID=$2;
;;
–change-url)
CHANGE_URL=$2;
CHANGE_NO=`basename $CHANGE_URL`;
;;
esac
shift;
done

Perl에서 Argument 처리는
$ARGV[0], $ARGV[1], $ARGV[2]… $#ARGV 는 argument 개수
 

공백으로 나눠진 파라미터 프린트
gawk ‘{print $1}’

/로 나눠진 마지막 파라미터 프린트. cut 도 사용가능
gawk -F / ‘{print $NF}’

파일명 얻기는
basename 경로명

디렉토리명 얻기는
dirname 경로명

절대경로 얻을 때는
readlink -e 상대경로

특정 문자열 치환은
sed -e “s/문자열/문자열/g”

if는 이런 형식. 비교식은 http://www.gnu.org/s/bash/manual/bash.html#Bash-Conditional-Expressions 참고

if [ “$변수” = “” ]; then
  명령;

elif
  명령;
else
  명령;
fi

for each 는 이런 형식

for 변수 in $가져올변수
do
  echo “$변수”
done

case는 위의 argument 처리 참고.

명령의 결과 저장은 `명령`
변수의 값으로 치환한 문자열은 “$변수 포함 문자열”
그냥 그대로 문자열은 ‘문자열’

끝에만 자를 땐
tail -n 숫자

앞에만 자를 땐
head -n 숫자

문자열 있는 줄만 얻고 싶을 땐
grep “문자열”

정규식으로 찾은 문자열 포함된 줄만 얻고 싶을 땐
grep -P “^문자열[0-9a-zA-Z-_/]*$”

basic http 인증은 https://wiki.jenkins-ci.org/display/JENKINS/Authenticating+scripted+clients 참고

html 얻어올 때는
curl “주소”