Build information is sent when your CI server constructs your application by following instructions described in a job.
Build information mainly describes the build name, number, date, job and status. When sent to iceScrum, build information must be associated with a project (you can associate several jobs with a project). iceScrum Pro knows that builds belong to the same job according to the job name that is provided.
The Dashboard displays the latest build information for each job associated with the project. On the left, the job name is displayed. The build name color depends on the build status. You will get more information by hovering over it.
Within a project, build information can optionally be associated with one or many tasks. Then, the “+” button allows expanding it to display the associated tasks. If these tasks belongs to stories then they are also displayed.
Build information is also displayed in task and story details views according to this association. Unlike the dashboard information which displays only the latest build per job, all the associated builds are displayed.
The Jenkins/Hudson plugin include tasks in build information if they are found in commit messages according to this pattern: T<taskUID>[-<taskEstimation>]. This pattern is the one we defined for SCM integration. Consequently, if you already use this iceScrum Pro feature, builds will be associated with your tasks automatically.
There is no particular configuration on your iceScrum server, just be sure that CI integration is enabled in your project settings (it is disabled by default). Because they are required, Web Services are enabled automatically when you enable CI integration.
If you use Jenkins, you can install the iceScrum plugin directly from the Manage Jenkins > Manage Plugins menu. You will find it under the Available tab (it is named iceScrum plugin). Choose Download now and install after restart.
If you use Hudson, you will have to install the plugin manually. Download the latest icesrum.hpi file into the $HUDSON_HOME/plugins directory and restart Hudson.
Once your Jenkins server is restarted, you can configure the connection to iceScrum Pro in the iceScrum settings panel of your job configuration. You must enter credentials of a user who is in your team. Then, enter your project URL:
http://:server/p/:pkey
If you use iceScrum Pro Cloud, the URL will be:
https://www.icescrum.com/a/p/:pkey
Before going further, check you credentials with the Test credentials button. Then, add the iceScrum post-build action that will send your build data to your iceScrum server.
If you have multiple jobs for your iceScrum project, don’t forget to add the post-build action to all of them. Then, the plugin will automatically send build data to your iceScrum project for each build that includes commits with the iceScrum task naming pattern.
GET http://:server/ws/p/:pkey/build
[ { "id": 1, "builtOn": "Jenkins: 1.516", "date": "2013-06-01T02:21:03Z", "jobName": "iceScrum", "name": "#533", "number": 533, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1246 }, { "id": 1245 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum/533" }, { "id": 2, "builtOn": "Jenkins: 1.516", "date": "2013-06-01T02:26:52Z", "jobName": "iceScrum", "name": "#534", "number": 534, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1246 }, { "id": 1245 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum/534" }, { "id": 3, "builtOn": "Jenkins: 1.516", "date": "2013-06-02T20:34:07Z", "jobName": "iceScrum-core", "name": "#305", "number": 305, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1254 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum-core/305" }, { "id": 4, "builtOn": "Jenkins: 1.516", "date": "2013-06-02T20:35:26Z", "jobName": "iceScrum", "name": "#538", "number": 538, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1254 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum/538" }, { "id": 5, "builtOn": "Jenkins: 1.516", "date": "2013-06-02T20:38:01Z", "jobName": "iceScrum_Cloud", "name": "#200", "number": 200, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1254 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum_Cloud/200" }, { "id": 6, "builtOn": "Jenkins: 1.516", "date": "2013-06-02T20:41:00Z", "jobName": "iceScrum_Pro", "name": "#69", "number": 69, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1254 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum_Pro/69" }, { "id": 13, "builtOn": "Jenkins: 1.516", "date": "2013-06-03T02:01:09Z", "jobName": "iceScrum", "name": "#539", "number": 539, "product": { "id": 1 }, "status": 1, "tasks": [], "url": "http://tools.icescrum.org/jenkins/job/iceScrum/539" }, { "id": 14, "builtOn": "Jenkins: 1.516", "date": "2013-06-04T00:42:04Z", "jobName": "iceScrum-core", "name": "#306", "number": 306, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1170 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum-core/306" }, { "id": 15, "builtOn": "Jenkins: 1.516", "date": "2013-06-04T00:43:34Z", "jobName": "iceScrum", "name": "#540", "number": 540, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1170 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum/540" } ]
<?xml version="1.0" encoding="UTF-8"?> <list> <build id="1"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-01 02:21:03.0 UTC</date> <jobName>iceScrum</jobName> <name>#533</name> <number>533</number> <product id="1" /> <status>1</status> <tasks> <task id="1246" /> <task id="1245" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum/533</url> </build> <build id="2"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-01 02:26:52.0 UTC</date> <jobName>iceScrum</jobName> <name>#534</name> <number>534</number> <product id="1" /> <status>1</status> <tasks> <task id="1246" /> <task id="1245" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum/534</url> </build> <build id="3"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-02 20:34:07.0 UTC</date> <jobName>iceScrum-core</jobName> <name>#305</name> <number>305</number> <product id="1" /> <status>1</status> <tasks> <task id="1254" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum-core/305</url> </build> <build id="4"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-02 20:35:26.0 UTC</date> <jobName>iceScrum</jobName> <name>#538</name> <number>538</number> <product id="1" /> <status>1</status> <tasks> <task id="1254" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum/538</url> </build> <build id="5"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-02 20:38:01.0 UTC</date> <jobName>iceScrum_Cloud</jobName> <name>#200</name> <number>200</number> <product id="1" /> <status>1</status> <tasks> <task id="1254" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum_Cloud/200</url> </build> <build id="6"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-02 20:41:00.0 UTC</date> <jobName>iceScrum_Pro</jobName> <name>#69</name> <number>69</number> <product id="1" /> <status>1</status> <tasks> <task id="1254" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum_Pro/69</url> </build> <build id="13"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-03 02:01:09.0 UTC</date> <jobName>iceScrum</jobName> <name>#539</name> <number>539</number> <product id="1" /> <status>1</status> <tasks /> <url>http://tools.icescrum.org/jenkins/job/iceScrum/539</url> </build> <build id="14"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-04 00:42:04.0 UTC</date> <jobName>iceScrum-core</jobName> <name>#306</name> <number>306</number> <product id="1" /> <status>1</status> <tasks> <task id="1170" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum-core/306</url> </build> <build id="15"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-04 00:43:34.0 UTC</date> <jobName>iceScrum</jobName> <name>#540</name> <number>540</number> <product id="1" /> <status>1</status> <tasks> <task id="1170" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum/540</url> </build> </list>
You will get the same builds as displayed on the project dashboard.
GET http://:server/ws/p/:pkey/build/latest
[ { "id": 42, "builtOn": "Jenkins: 1.516", "date": "2013-06-12T00:51:38Z", "jobName": "iceScrum_Pro", "name": "#76", "number": 76, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1261 }, { "id": 1260 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum_Pro/76" }, { "id": 41, "builtOn": "Jenkins: 1.516", "date": "2013-06-12T00:47:32Z", "jobName": "iceScrum_Cloud", "name": "#207", "number": 207, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1261 }, { "id": 1260 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum_Cloud/207" }, { "id": 40, "builtOn": "Jenkins: 1.516", "date": "2013-06-12T00:44:25Z", "jobName": "iceScrum", "name": "#547", "number": 547, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1261 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum/547" }, { "id": 39, "builtOn": "Jenkins: 1.516", "date": "2013-06-12T00:42:42Z", "jobName": "iceScrum-core", "name": "#312", "number": 312, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1261 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum-core/312" } ]
<?xml version="1.0" encoding="UTF-8"?> <list> <build id="42"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-12 00:51:38.0 UTC</date> <jobName>iceScrum_Pro</jobName> <name>#76</name> <number>76</number> <product id="1" /> <status>1</status> <tasks> <task id="1261" /> <task id="1260" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum_Pro/76</url> </build> <build id="41"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-12 00:47:32.0 UTC</date> <jobName>iceScrum_Cloud</jobName> <name>#207</name> <number>207</number> <product id="1" /> <status>1</status> <tasks> <task id="1261" /> <task id="1260" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum_Cloud/207</url> </build> <build id="40"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-12 00:44:25.0 UTC</date> <jobName>iceScrum</jobName> <name>#547</name> <number>547</number> <product id="1" /> <status>1</status> <tasks> <task id="1261" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum/547</url> </build> <build id="39"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-12 00:42:42.0 UTC</date> <jobName>iceScrum-core</jobName> <name>#312</name> <number>312</number> <product id="1" /> <status>1</status> <tasks> <task id="1261" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum-core/312</url> </build> </list>
GET http://:server/ws/p/:pkey/build/story/:storyId
[ { "id": 3, "builtOn": "Jenkins: 1.516", "date": "2013-06-02T20:34:07Z", "jobName": "iceScrum-core", "name": "#305", "number": 305, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1254 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum-core/305" }, { "id": 4, "builtOn": "Jenkins: 1.516", "date": "2013-06-02T20:35:26Z", "jobName": "iceScrum", "name": "#538", "number": 538, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1254 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum/538" }, { "id": 5, "builtOn": "Jenkins: 1.516", "date": "2013-06-02T20:38:01Z", "jobName": "iceScrum_Cloud", "name": "#200", "number": 200, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1254 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum_Cloud/200" }, { "id": 6, "builtOn": "Jenkins: 1.516", "date": "2013-06-02T20:41:00Z", "jobName": "iceScrum_Pro", "name": "#69", "number": 69, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1254 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum_Pro/69" }, { "id": 1, "builtOn": "Jenkins: 1.516", "date": "2013-06-01T02:21:03Z", "jobName": "iceScrum", "name": "#533", "number": 533, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1246 }, { "id": 1245 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum/533" }, { "id": 2, "builtOn": "Jenkins: 1.516", "date": "2013-06-01T02:26:52Z", "jobName": "iceScrum", "name": "#534", "number": 534, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1246 }, { "id": 1245 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum/534" } ]
<?xml version="1.0" encoding="UTF-8"?> <list> <build id="3"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-02 20:34:07.0 UTC</date> <jobName>iceScrum-core</jobName> <name>#305</name> <number>305</number> <product id="1" /> <status>1</status> <tasks> <task id="1254" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum-core/305</url> </build> <build id="4"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-02 20:35:26.0 UTC</date> <jobName>iceScrum</jobName> <name>#538</name> <number>538</number> <product id="1" /> <status>1</status> <tasks> <task id="1254" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum/538</url> </build> <build id="5"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-02 20:38:01.0 UTC</date> <jobName>iceScrum_Cloud</jobName> <name>#200</name> <number>200</number> <product id="1" /> <status>1</status> <tasks> <task id="1254" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum_Cloud/200</url> </build> <build id="6"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-02 20:41:00.0 UTC</date> <jobName>iceScrum_Pro</jobName> <name>#69</name> <number>69</number> <product id="1" /> <status>1</status> <tasks> <task id="1254" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum_Pro/69</url> </build> <build id="1"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-01 02:21:03.0 UTC</date> <jobName>iceScrum</jobName> <name>#533</name> <number>533</number> <product id="1" /> <status>1</status> <tasks> <task id="1245" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum/533</url> </build> <build id="2"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-01 02:26:52.0 UTC</date> <jobName>iceScrum</jobName> <name>#534</name> <number>534</number> <product id="1" /> <status>1</status> <tasks> <task id="1245" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum/534</url> </build> </list>
GET http://:server/ws/p/:pkey/build/task/:taskId
[ { "id": 1, "builtOn": "Jenkins: 1.516", "date": "2013-06-01T02:21:03Z", "jobName": "iceScrum", "name": "#533", "number": 533, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1245 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum/533" }, { "id": 2, "builtOn": "Jenkins: 1.516", "date": "2013-06-01T02:26:52Z", "jobName": "iceScrum", "name": "#534", "number": 534, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1245 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum/534" } ]
<?xml version="1.0" encoding="UTF-8"?> <list> <build id="1"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-01 02:21:03.0 UTC</date> <jobName>iceScrum</jobName> <name>#533</name> <number>533</number> <product id="1" /> <status>1</status> <tasks> <task id="1246" /> <task id="1245" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum/533</url> </build> <build id="2"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-01 02:26:52.0 UTC</date> <jobName>iceScrum</jobName> <name>#534</name> <number>534</number> <product id="1" /> <status>1</status> <tasks> <task id="1246" /> <task id="1245" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum/534</url> </build> </list>
POST http://:server/ws/p/:pkey/build
Be careful if you provide tasks. The API expects an array of UID whereas the API usually deals with technical IDs. Additionally, it expects a raw array of numbers rather than the array of task objects you will get in response. Thus, there is a significant inconsistency between what you submit and what you get from the API. This issue will be fixed in a major API refactoring where all technical IDs will be replaced by UIDs.
{ "id": 3, "builtOn": "Jenkins: 1.516", "date": "2013-06-02T20:34:07Z", "jobName": "iceScrum-core", "name": "#305", "number": 305, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1254 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum-core/305" }
<?xml version="1.0" encoding="UTF-8"?> <build id="3"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-02 20:34:07.0 UTC</date> <jobName>iceScrum-core</jobName> <name>#305</name> <number>305</number> <product id="1" /> <status>1</status> <tasks> <task id="1254" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum-core/305</url> </build>
GET http://:server/ws/p/:pkey/build/:id
{ "id": 3, "builtOn": "Jenkins: 1.516", "date": "2013-06-02T20:34:07Z", "jobName": "iceScrum-core", "name": "#305", "number": 305, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1254 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum-core/305" }
<?xml version="1.0" encoding="UTF-8"?> <build id="3"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-02 20:34:07.0 UTC</date> <jobName>iceScrum-core</jobName> <name>#305</name> <number>305</number> <product id="1" /> <status>1</status> <tasks> <task id="1254" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum-core/305</url> </build>
PUT http://:server/ws/p/:pkey/build/:id
{ "id": 3, "builtOn": "Jenkins: 1.516", "date": "2013-06-02T20:34:07Z", "jobName": "iceScrum-core", "name": "#305", "number": 305, "product": { "id": 1 }, "status": 1, "tasks": [ { "id": 1254 } ], "url": "http://tools.icescrum.org/jenkins/job/iceScrum-core/305" }
<?xml version="1.0" encoding="UTF-8"?> <build id="3"> <builtOn>Jenkins: 1.516</builtOn> <date>2013-06-02 20:34:07.0 UTC</date> <jobName>iceScrum-core</jobName> <name>#305</name> <number>305</number> <product id="1" /> <status>1</status> <tasks> <task id="1254" /> </tasks> <url>http://tools.icescrum.org/jenkins/job/iceScrum-core/305</url> </build>
DELETE http://:server/ws/p/:pkey/build/:id