2012-08-15 7 views
9

TeamCity (7.0) REST API를 사용하여 개발자가 사용자 지정 빌드를 트리거 할 수 있도록했습니다. 나는이 같은 큐에 빌드를 추가TeamCity REST API로 빌드 진행 상황 추적

이 에 http

: [buildTypeId] & 이름 = [PROPNAME] & 값이 = [propValue]

내 질문이 //teamcity/httpAuth/action.html add2Queue =입니다 방금 방아쇠를 당긴 건축물의 진행 상황을 어떻게 추적 할 수 있을까요? REST 호출은 빌드에 할당 된 빌드 ID에 대한 정보를 반환하지 않으므로 빌드 목록 (실행/완료)을 폴링해도 그 중 하나가 트리거되었는지는 알 수 없습니다. 대기열에있는 동일한 buildTypeId에 ​​대해 잠재적으로 여러 빌드가있을 수 있으므로 이후의 빌드 유형을 분리 할 방법이 필요합니다.

큐에 넣은 각 빌드에 고유 한 값을 갖는 빌드 속성을 추가 한 다음 나중에 빌드 목록을 폴링하고 정확한 속성 값을 가진 빌드를 찾아 볼 수 있다는 제안을 읽었습니다. 그러나 빌드의 속성을 나열하는 방법을 찾지 못했기 때문에 여전히 문제가 있습니다. 이 REST 호출은 속성에 대한 정보를 제공하지 않습니다

에 http : // 인 TeamCity/httpAuth/응용 프로그램/휴식/구축/로케이터 = buildType : [buildTypeId]

이 문제를 해결하는 방법에 대한 어떤 제안이? 빌드가 대기열에 있는지, 실행 중인지, 그리고 완료되면 상태를 얻고 싶습니다. 그러나 가장 중요한 것은 그것이 완료되었는지 여부와 상태가 무엇인지를 아는 것입니다.

답변

11

내가 잘 작동하는 것 같다 이것에 대한 해결책을 함께 약간의 추가 조사 후 :

내가 발견 당신은 "/이 /를 구축하여 속성을 구축 사용자 정의에 대한 정보를 얻을하지 않았다하더라도? locator = buildType : x "호출을 사용하면 해당 목록의 각 빌드에 대한 빌드 ID를 추출한 다음 또 다른 REST 호출을 수행하여 특정 빌드에 대한 자세한 정보를 얻을 수 있습니다. 나머지 통화는 다음과 같습니다 :이 호출에서

http://teamcity/httpAuth/app/rest/builds/id:{0} 

응답은 당신에게 줄 것이다 무엇보다도 빌드 속성의 목록을 포함합니다 "개체를 구축". 빌드 진행 상황을 추적

내 솔루션은 다음과 같이 다음이었다

빌드가 인 TeamCity 큐에 추가됩니다

, 내가 먼저 "BuildIdentifier"라는 URL에 속성을 추가 할 수 있습니다. 값은 단지 GUID입니다. 이 식별자를 다시 클라이언트 응용 프로그램으로 전달한 다음 클라이언트는 서버를 폴링하기 시작하여이 특정 식별자로 빌드 상태를 묻습니다. 그런 다음 서버는 몇 가지 단계를 거쳐 빌드의 현재 단계를 확인합니다.

1 : 빌드가 실행 중인지 확인하십시오. "/ locs = running : true"라는 호출로 실행중인 빌드 목록을 얻은 다음 빌드를 반복하고 빌드 ID를 사용하여 REST API를 쿼리하여 자세한 내용을 확인합니다. 그런 다음 클라이언트에서받은 것과 일치하는 "BuildIdentifier"속성을 사용하여 빌드를 찾는 각 실행중인 빌드의 세부 정보를 살펴 봅니다. 실행중인 빌드 중 하나에 일치하는 항목이있는 경우 빌드가 진행률을 추적하는 클라이언트에 대해 빌드가 x % (빌드 개체의 PercentageComplete 속성)로 실행 중임을 나타내는 메시지와 함께 응답을 보냅니다. 일치하는 항목이 없으면 2 단계로 넘어갑니다.

2 : 완료되었는지 확인하십시오. 먼저 "/ builds /? locator = buildType : x"호출을 사용하여 최신 빌드 목록을 가져옵니다. 그런 다음 1 단계와 동일한 작업을 수행하고 목록에서 X 최신 빌드를 추출합니다 (5 개를 선택했습니다). REST 호출의 수를 제한하기 위해 필자는 빌드가 완료된 경우 빌드가 최신 빌드 5 개가 될 것이라는 가정을 설정했습니다.그런 다음 BuildIdentifier에 대한 일치 항목을 찾고 빌드 상태 (실패, 성공 등)를 반환합니다.

3 : 1 단계 또는 2 단계에서 BuildIdentifier와 일치하는 것이 없으면 빌드가 대기열에 있다고 가정 할 수 있으므로 현재 상태로 반환합니다.

클라이언트 측에서는 상태가 빌드가 대기열에 있거나 실행 중임을 나타내는 한 x 초마다 상태를 폴링합니다.

같은 문제가있는 다른 사람이있는 경우이 솔루션이 도움이되기를 바랍니다. TeamCity REST API를 사용하면 트리거 된 빌드의 진행 상황을 추적하는 것이 매우 일반적인 작업이라고 생각합니다.

1

TeamCity 8.1부터 REST API는 빌드 트리거를위한 ​​전용 방법을 가지고 있으며 빌드 대기열 요청이 빌드의 현재 상태를 추적하는 데 사용할 수있는 대기열 된 빌드에 대한 링크를 반환하기 때문에 대기열에있는 빌드 결과를 추적하는 것이 훨씬 쉽습니다. . TeamCity documentation의 세부 정보를 참조하십시오.

3

Queued Builds 휴식 API가이를 수행하는 가장 좋은 방법이지만 버전 8.1부터 사용할 수 있습니다.

  • 빌드는 응답은 빌드의 상태를 확인하는 데 사용할 수있는 HREF가 포함이

    { 
        buildType: { id: "bt667" }, 
        branchName: "master", 
        properties: { 
         property: [ 
          { "name": "Property", "value": "test" } 
         ] 
        } 
    } 
    
  • 같은 ~/httpAuth/app/rest/buildQueue에 POST 요청을 보내기 시작합니다. 빌드의 상태를 확인하려면

    { 
        ... 
        "href": "/httpAuth/app/rest/buildQueue/taskId:49337", 
        ... 
    } 
    
  • 는 1 단계

이 이전 API를 통해 큰 개선에서 응답에 지정된 HREF에 GET 요청을 보낼 대기.

+0

응답에 해당 빌드의 날짜가 포함되어 있습니까 ??? – Psl