It's all about the answers!

Ask a question

Fetch build log from an IBuildResult object


Steve Woodruff (5132) | asked Jun 23 '11, 11:12 a.m.
Is there an easy way to find the build log (link to it or the log itself) when we have an IBuildResult object?

Thanks!

-Steve

Accepted answer


permanent link
Brent Ulbricht (2.5k11) | answered Jun 24 '11, 9:24 a.m.
JAZZ DEVELOPER
Hi Steve,

You're right about getting the IDs. This is a way to get them, but getting the contribution's UUID does cast down to an internal class (which could change in the future).


IProgressMonitor monitor = new NullProgressMonitor();
ITeamRepository teamRepository = login(repositoryURI, userId, password, monitor);

ITeamBuildClient buildClient = (ITeamBuildClient) teamRepository.getClientLibrary(ITeamBuildClient.class);
IBuildDefinition buildDefinition = buildClient.getBuildDefinition(buildDefinitionId, monitor);

IBuildResult buildResult = buildClient.getLastBuildResult(buildDefinition,
new BuildState[] { BuildState.COMPLETED }, IBuildResult.PROPERTIES_COMPLETE, monitor);

IBuildResultContribution[] contributions = buildClient.getBuildResultContributions(buildResult,
IBuildResultContribution.LOG_EXTENDED_CONTRIBUTION_ID, monitor);

System.out.println("!!!! " + buildResult.getItemId().getUuidValue() + " !!!!");

System.out.println("#### " + ((BuildResultContribution) contributions[0]).getInternalId().getUuidValue() + " ####");

System.out.println("**** " + contributions[0].getExtendedContributionProperty(IBuildResultContribution.PROPERTY_NAME_FILE_NAME) + " ****");


Brent Ulbricht
RTC Build Lead
Steve Woodruff selected this answer as the correct answer

Comments
Nick Edgar commented Jul 15 '13, 1:36 p.m.
JAZZ DEVELOPER

To avoid the internal ref to BuildResultContribution, you could instead cast to com.ibm.team.repository.common.model.Helper, which provides the getInternalId() method. 

5 other answers



permanent link
Brent Ulbricht (2.5k11) | answered Jun 23 '11, 3:09 p.m.
JAZZ DEVELOPER
Is there an easy way to find the build log (link to it or the log itself) when we have an IBuildResult object?

Thanks!

-Steve


Hi Steve,

You could do something along these lines.


IProgressMonitor monitor = new NullProgressMonitor();
ITeamRepository teamRepository = login(repositoryURI, userId, password, monitor);

ITeamBuildClient buildClient = (ITeamBuildClient) teamRepository.getClientLibrary(ITeamBuildClient.class);
IBuildDefinition buildDefinition = buildClient.getBuildDefinition(buildDefinitionId, monitor);

IBuildResult buildResult = buildClient.getLastBuildResult(buildDefinition,
new BuildState[] { BuildState.COMPLETED }, IBuildResult.PROPERTIES_COMPLETE, monitor);

IBuildResultContribution[] contributions = buildClient.getBuildResultContributions(buildResult,
IBuildResultContribution.LOG_EXTENDED_CONTRIBUTION_ID, monitor);

System.out.println("**** " + contributions[0].getExtendedContributionProperty(IBuildResultContribution.PROPERTY_NAME_FILE_NAME) + " ****");


Brent Ulbricht
RTC Build Lead

permanent link
Steve Woodruff (5132) | answered Jun 23 '11, 3:47 p.m.
Hi Brent - Thanks for the reply. I'm able to get the name of the log with the code you supplied but its not quite what I'm looking for.

I've tried with: PROPERTY_NAME_FILE_NAME, PROPERTY_NAME_URL, PROPERTY_NAME_FILE_PATH ... but they're all null except for PROPERTY_NAME_FILE_NAME, and that's just a relative path like build-1308857481749.log.

Is there a way to compose the url to the log that can be passed on to a user or fetched via browser?

Thanks!

-Steve

permanent link
Steve Woodruff (5132) | answered Jun 23 '11, 3:49 p.m.
A typical URL for the log would be like:

https://rtc01....../jazz/resource/virtual/build/result/_u11NsZ1VEeCO-eRZAbDMnQ/contribution/_CC5fgJ1WEeCO-eRZAbDMnQ/build-1308805236565.log

So its a matter of filling in those IDs before and after /contribution/ ...

Thanks!

-Steve

permanent link
Steve Woodruff (5132) | answered Jun 23 '11, 4:03 p.m.
Am I seeing these nulls because I am not fetching the correct items ? I'm doing a partial fetch as follows:



String[] properties = new String[] { IBuildResult.PROPERTY_LABEL, IBuildResult.PROPERTY_BUILD_STATUS,
IBuildResult.PROPERTY_BUILD_STATE, IBuildResult.PROPERTY_BUILD_TIME_TAKEN,
IBuildResult.PROPERTY_PERSONAL_BUILD, IBuildResult.PROPERTY_BUILD_DEFINITION,
IBuildResult.PROPERTY_SUMMARY, IBuildResult.PROPERTY_BUILD_ACTIVITIES,
IBuildResult.PROPERTY_TAGS, IBuildResult.PROPERTY_BUILD_RESULT_CONTRIBUTIONS };

List<?> buildResults = teamRepository.itemManager().fetchPartialItems(queryPage.getItemHandles(),
IItemManager.DEFAULT, Arrays.asList(properties), monitor);

permanent link
Nick Edgar (6.5k711) | answered Jul 15 '13, 1:49 p.m.
JAZZ DEVELOPER
See also discussion in https://jazz.net/forum/questions/116496/retrieve-build-log

Your answer


Register or to post your answer.