Eric Foo | ff7b498 | 2017-12-19 01:59:15 | [diff] [blame] | 1 | # A Tour of Continuous Integration UI |
| 2 | |
| 3 | This document details a tour of page layouts and site hierarchy for [LUCI |
| 4 | UI](https://ci.chromium.org/p/chromium), Chromium's continuous integration user |
| 5 | interface. Currently, LUCI shows both Buildbot and LUCI builds. In the near |
| 6 | future, LUCI will replace Buildbot as the default continuous integration system. |
| 7 | Read this document to learn how to navigate LUCI and to better understand the |
| 8 | new UX concepts LUCI introduces. Refer to the [FAQ](#FAQ) to quickly jump to |
| 9 | sections. |
| 10 | |
| 11 | [TOC] |
| 12 | |
| 13 | ## FAQ |
| 14 | |
| 15 | **Where can I see the console view for my builders?** |
| 16 | |
| 17 | *Using this URL schema, `ci.chromium.org/p/<project_id>/g/<group_id>/console`, |
| 18 | replace `<project_id>` with the project ID and `<group_id>` with the group ID. |
| 19 | For example, [Chromium Main](http://ci.chromium.org/p/chromium/g/main/console). |
| 20 | See [console view page](#Console-view-page) section below for details on the |
| 21 | page.* |
| 22 | |
| 23 | **Why are we replacing Buildbot with LUCI?** |
| 24 | |
| 25 | *Buildbot is slow and doesn't scale well. LUCI fixes this and over time, we have |
| 26 | already been swapping out Buildbot responsibilities with LUCI services. See |
| 27 | [Background section](#Background) for more details.* |
| 28 | |
| 29 | **What are the LUCI pages I should expect to see?** |
| 30 | |
| 31 | *[Jump](#Tour-of-LUCI-Pages) to the Tour of LUCI Pages section to see details on |
| 32 | each page.* |
| 33 | |
| 34 | **Is LUCI only for the Chromium project?** |
| 35 | |
| 36 | _The overall goal is to have LUCI serve all projects (wherever possible) that |
| 37 | Buildbot currently serves. The 11/30 UI rollout is limited to chromium.* masters |
| 38 | and tryserver.chromium.* + tryserver.blink masters. Other projects/masters will |
| 39 | switch to LUCI UI at later notice._ |
| 40 | |
| 41 | **Is there a list of Known Issues?** |
| 42 | |
| 43 | _A list of known user interface issues can be viewed in [Chromium |
| 44 | bugs](https://bugs.chromium.org/p/chromium/issues/list?q=label%3Aluci-knownissues-ui)._ |
| 45 | |
| 46 | **What happened to Masters?** |
| 47 | |
| 48 | _LUCI no longer uses Masters and distributes the responsibility of scheduling, |
| 49 | distributing, collecting, archiving and logging builds into separate independent |
| 50 | services. As a UI concept, "masters" are replaced with "groups" and "views". See |
| 51 | [Background section](#Background) for more details._ |
| 52 | |
| 53 | **What is a Group?** |
| 54 | |
| 55 | _Builders of each project are organized into groups of ordered builders (A |
| 56 | single builder can be referenced by multiple groups). See [Site Hierarchy |
| 57 | section](#Site-Hierarchy) for more details._ |
| 58 | |
| 59 | **What is a View?** |
| 60 | |
| 61 | *A group of builders and their builds can be visualized in a couple ways; we |
| 62 | call these views. See [Site Hierarchy section](#Site-Hierarchy) for more |
| 63 | details.* |
| 64 | |
| 65 | **Are URLs final?** |
| 66 | |
| 67 | *No. URLs and pages are subject to change. Our initial goal is to provide |
| 68 | Buildbot functionality parity, but we are committed to building additional |
| 69 | enhanced user experiences on top of the new LUCI UI.* |
| 70 | |
| 71 | **How do I provide feedback?** |
| 72 | |
| 73 | *LUCI UI is still in development and we would love to get feedback, please see |
| 74 | [feedback section](#Feedback) for links.* |
| 75 | |
| 76 | |
| 77 | ## Tour of LUCI Pages |
| 78 | |
| 79 | **Please note** that URLs and pages are subject to change. Our initial goal is |
| 80 | to provide Buildbot functionality, but we are committed to building additional |
| 81 | enhanced user experiences on top of the new LUCI UI. |
| 82 | |
| 83 | |
| 84 | ### High level pages |
| 85 | |
| 86 | |
| 87 | #### Home |
| 88 | |
| 89 | **URL:** [ci.chromium.org](http://ci.chromium.org/) |
| 90 | |
| 91 | This is the "Home" page for LUCI. It contains a listing of all of the projects |
| 92 | configured in LUCI. |
| 93 | |
| 94 |  |
| 95 | |
| 96 | |
| 97 | #### Search |
| 98 | |
| 99 | **URL:** [ci.chromium.org/search](http://ci.chromium.org/search) |
| 100 | |
| 101 | This is the builder search page for LUCI. Find a specific builder serviced by |
| 102 | LUCI by name. Search results are sorted by bucket and groups. This can also be |
| 103 | accessed by typing "ci.<tab>" in the Chrome Omnibox. |
| 104 | |
| 105 |  |
| 106 | |
| 107 | #### Project page |
| 108 | |
| 109 | **URL:** `ci.chromium.org/p/<project_id>` |
| 110 | |
| 111 | Example: [ci.chromium.org/p/chromium](http://ci.chromium.org/p/chromium) |
| 112 | |
| 113 | A list of the groups defined for the project. A group is an ordered list of |
| 114 | builders (Builders can be referenced by multiple groups). This page contains |
| 115 | links to the default view defined for each group and the |
| 116 | last-completed-build-status for each builder. |
| 117 | |
| 118 | Refer to the build results [color key](#Color-Key) on how to interpret the build |
| 119 | status. |
| 120 | |
| 121 | **Note:** Initially, we have defined "groups" of builders corresponding to a |
| 122 | Buildbot master and included builders that used to be attached to it. |
| 123 | |
| 124 |  |
| 125 | |
| 126 | |
| 127 | #### Builders list page per project |
| 128 | |
| 129 | **URL:** `ci.chromium.org/p/<project_id>/builders` |
| 130 | |
| 131 | Example: |
| 132 | [ci.chromium.org/p/chromium/builders](http://ci.chromium.org/p/chromium/builders) |
| 133 | |
| 134 | Shows a listing of all builders belonging to the *`<project_id>`*. Each builder |
| 135 | shows number of builds pending, in-progress and the build statuses of the last |
| 136 | 30 recently completed builds by default (option available to show more). |
| 137 | |
| 138 | Refer to the build results [color key](#Color-Key) on how to interpret the build |
| 139 | status. |
| 140 | |
| 141 |  |
| 143 | |
| 144 | |
| 145 | ### Project Resource pages |
| 146 | |
| 147 | These pages display a singular resource that *belongs to* the project |
| 148 | (currently, Builders and Build Results). |
| 149 | |
| 150 | |
| 151 | #### Builder page |
| 152 | |
| 153 | **Buildbot Builder URL:** `ci.chromium.org/buildbot/<group_id>/<builder_name>` |
| 154 | |
| 155 | **LUCI Builder URL:** |
| 156 | `ci.chromium.org/p/<project_id>/builders/<bucket>/<builder_name>` |
| 157 | |
| 158 | This is the page describing the builder and lists machine pool, current builds, |
| 159 | pending builds and recent builds completed. The layout is equivalent to Buildbot |
| 160 | layout of builder pages. |
| 161 | |
| 162 |  |
| 163 | |
| 164 | |
| 165 | #### Build Results page |
| 166 | |
| 167 | **Buildbot Build URL:** ` |
Eric Foo | b0eda44 | 2018-01-04 02:00:45 | [diff] [blame] | 168 | ci.chromium.org/buildbot/<group_id>/<builder_name>/<build_#>` |
Eric Foo | ff7b498 | 2017-12-19 01:59:15 | [diff] [blame] | 169 | |
| 170 | **LUCI Build URL:** |
Eric Foo | b0eda44 | 2018-01-04 02:00:45 | [diff] [blame] | 171 | `ci.chromium.org/p/<project_id>/builders/<bucket>/<builder_name>/<build_#>` |
| 172 | |
| 173 | *Alternate LUCI Build URL: `ci.chromium.org/p/<project_id>/builds/b<buildbucket_build_id>`* |
Eric Foo | ff7b498 | 2017-12-19 01:59:15 | [diff] [blame] | 174 | |
| 175 | This is the page describing the build and results. Contains build info, |
| 176 | properties, result status, blame-list, steps and links to log files. The layout |
Eric Foo | b0eda44 | 2018-01-04 02:00:45 | [diff] [blame] | 177 | is equivalent to Buildbot layout of build result pages. |
| 178 | |
| 179 | Builds can also have an alternate LUCI build URL under |
| 180 | `ci.chromium.org/p/<project_id>/builds/b<buildbucket_build_id>` if the build does |
| 181 | not have a “buildnumber” property. This does not apply to Chromium builds since |
| 182 | all Chromium builds have a buildnumber property. |
Eric Foo | ff7b498 | 2017-12-19 01:59:15 | [diff] [blame] | 183 | |
| 184 |  |
| 185 | |
| 186 | |
| 187 | ### View pages |
| 188 | |
| 189 | Each group has multiple views (currently "console" and "builders" views). |
| 190 | Later, we may add additional views (e.g. "stats"). Views are the primary reason |
| 191 | to create a group; For example, you put builders into the "main" group so that |
| 192 | they show up on main/console. |
| 193 | |
| 194 | |
| 195 | #### Console view page |
| 196 | |
| 197 | **URL:** `ci.chromium.org/p/<project_id>/g/<group_id>/console` |
| 198 | |
| 199 | Example: |
| 200 | [ci.chromium.org/p/chromium/g/main/console](http://ci.chromium.org/p/chromium/g/main/console) |
| 201 | |
| 202 | A high-level overview of the recently completed builds. Contains most relevant |
| 203 | information on the Group, including tree status, on-call information, important |
| 204 | links, sub groups, and builds ordered by latest commits by users over all |
| 205 | platform builders. Refer to the build results [color key](#Color-Key) on how to |
| 206 | interpret the build status. |
| 207 | |
| 208 |  |
| 210 | |
| 211 | |
| 212 | **Tree Status** |
| 213 | |
| 214 | The "tree" represents the various source repositories used to build the project, |
| 215 | e.g. chromium/src.git plus its |
| 216 | [DEPS](http://src.chromium.org/viewvc/chrome/trunk/src/DEPS?view=markup) file. |
| 217 | **Tree status **displays the state of the tree corresponding to the project and |
| 218 | determines whether or not developers are allowed to commit to the repositories. |
| 219 | The tree can be "open", "closed" or "throttled". The normal state is open. When |
| 220 | vital builders fail or tests break, the tree is closed by putting the word |
| 221 | "closed" in the tree status; |
| 222 | [PRESUBMIT.py](http://src.chromium.org/viewvc/chrome/trunk/src/PRESUBMIT.py?view=markup) |
| 223 | checks the status and will block commits, and the build sheriff will act to fix |
| 224 | the tree. When the tree is throttled, commits are only allowed with specific |
| 225 | permission from the build sheriff, generally because the sheriff wants to make |
| 226 | sure the tree is stable before opening it up to unlimited commits. |
| 227 | |
| 228 | |
| 229 | **On-call Info** |
| 230 | |
| 231 | This is the list of list the current build sheriffs and troopers. The sheriffs |
| 232 | have overall responsibility in case someone else is away or not paying |
| 233 | attention. |
| 234 | |
| 235 | |
| 236 | **Commits/CLs** |
| 237 | |
| 238 | Each time someone lands a change, the scheduler gathers changes and schedules |
| 239 | builds and tests on all relevant builders. Each row in the table represents a |
| 240 | commit and resulting builds across the various builders. The columns are sorted |
| 241 | by build configuration and platform. A build can span multiple commits, in the |
| 242 | event that commits land faster than the builder can cycle. At the start of each |
| 243 | build, a yellow box is displayed. Clicking on the box shows more information |
| 244 | about the build, including the "blamelist" of changes that went into it and |
| 245 | detailed step/log information for the build (See [build |
| 246 | results](#Build-Results-page) page for more details). The times shown in the |
| 247 | table are in U.S. Pacific time. |
| 248 | |
| 249 | Refer to the build results [color key](#Color-Key) on how to interpret the build |
| 250 | status. |
| 251 | |
| 252 | |
| 253 | #### Builders view page |
| 254 | |
| 255 | **URL:** `ci.chromium.org/p/<project_id>/g/<group_id>/builders` |
| 256 | |
| 257 | Example: |
| 258 | [ci.chromium.org/p/chromium/g/main/builders](http://ci.chromium.org/p/chromium/g/main/builders) |
| 259 | |
| 260 | Builders view page for the group_id under project_id. Shows all builders of this |
| 261 | group. Each builder shows number of builds pending, in-progress and the build |
| 262 | statuses of the last 30 recently completed builds by default (option available |
| 263 | to show more). |
| 264 | |
| 265 |  |
| 267 | |
| 268 | |
| 269 | ### Color Key |
| 270 | |
| 271 | Throughout LUCI, we visualize a build results using colored boxes, where the |
| 272 | color signifies the build result status. Below is the color key mapping. |
| 273 | |
| 274 | * <span style="color:yellow">Yellow</span> = in progress |
| 275 | * <span style="color:green">Green</span> = finished successfully |
| 276 | * <span style="color:red">Red</span> = finished with errors |
| 277 | * <span style="color:purple">Purple</span> = internal error. |
| 278 | |
| 279 | ## Background |
| 280 | |
| 281 | LUCI which stands for Layered Universal Continuous Integration is a replacement |
| 282 | for Buildbot (our existing single-threaded monolithic continuous integration |
| 283 | system). LUCI is made up of a number of independent services that work together, |
| 284 | each service dealing with one part of the continuous integration stack. Over |
| 285 | time, we have been swapping out Buildbot responsibilities with LUCI services. As |
| 286 | such, most builds today on Buildbot are already running using LUCI services. |
| 287 | |
| 288 | LUCI tries to separate each CI concern into a separate service. Swarming, for |
| 289 | example, is one such service in LUCI, and handles job distribution. One of the |
| 290 | technical limitations of Buildbot is that each set of builders needed to be |
| 291 | owned by a single "master" process. This master would be responsible for |
| 292 | scheduling, distributing, collecting, archiving and logging builds. LUCI |
| 293 | distributes the responsibility of this work into separate independent services, |
| 294 | negating the need for a master. For ease of migration from Buildbot masters to |
| 295 | LUCI builders, we have defined "groups" of builders that each correspond to a |
| 296 | single Buildbot master, and we have kept the LUCI Builder names the same as they |
| 297 | were in Buildbot. |
| 298 | |
| 299 | For more an overview of the services that make up LUCI, take a look at the [LUCI |
| 300 | Overview |
| 301 | presentation](https://docs.google.com/presentation/d/1dhUecmBf7IZ3moy_SflNT7yBYeiJbvj7m9kAxqeN9-A/preview?slide=id.g6571e2aaf_0_95). |
| 302 | |
| 303 | |
| 304 | ## Site Hierarchy |
| 305 | |
| 306 | On the highest level, LUCI is organized by **projects**. A project contains all |
| 307 | the configuration necessary to do development on a given repo, for example, |
| 308 | Chromium is one of these projects (corresponding to chromium/src.git). Each |
| 309 | project contains **builders**, which describe how a given builder works (i.e. |
| 310 | recipe to run, gn args to use, etc.). Each **builder** has **builds**, which |
| 311 | contain build information, build properties details, success or failure status, |
| 312 | blamelists, steps and links to log files. |
| 313 | |
| 314 |  |
| 315 | |
| 316 | |
| 317 | For the LUCI UI, to organize builders in each project, we introduce the idea of |
| 318 | **groups**. Builders of each project are organized into **groups **of ordered |
| 319 | builders (A single builder can be referenced by multiple groups). For example, |
| 320 | "main" might contain all of the main builders, and "gpu" might contain all of |
| 321 | the "gpu" builders but since groups can overlap, (so "main" can contain some |
| 322 | subset of the "gpu" builders). Notably, groups don't own any project resources, |
| 323 | they're simply a mechanism to group them for display purposes. Projects may have |
| 324 | as many groups as they like, for whatever purpose they need them. |
| 325 | |
| 326 | A group of builders and their builds can be visualized in a couple ways; we call |
| 327 | these **views**. We have currently implemented 2 views; a **console view** and a |
| 328 | **builders view** for each group. |
| 329 | |
| 330 |  |
| 331 | |
| 332 | |
| 333 | To get started with LUCI, go to [ci.chromium.org](http://ci.chromium.org). Drill |
| 334 | down to build results from the list of projects. The search page is available to |
| 335 | find a specific builder by name. |
| 336 | |
| 337 |  |
| 338 | |
| 339 | |
| 340 | ## Known Issues |
| 341 | |
| 342 | A list of [known |
| 343 | issues](https://bugs.chromium.org/p/chromium/issues/list?q=label%3Aluci-knownissues-ui) |
| 344 | for the user interface of LUCI is available under Chromium bugs. |
| 345 | |
| 346 | Note: URLs and pages are subject to change. Our initial goal is to provide |
| 347 | Buildbot user functionality parity, but we are committed to building additional |
| 348 | enhanced user experiences on top of the new LUCI UI. |
| 349 | |
| 350 | ## Help |
| 351 | |
| 352 | The Chrome Operations Foundation team is responsible for the design and |
| 353 | development of LUCI. If you have any questions or need help on usage, feel free |
| 354 | to reach out to the Chrome Operations team by emailing us at |
| 355 | [[email protected]](mailto:[email protected]) |
| 356 | |
| 357 | |
| 358 | ## Feedback |
| 359 | |
| 360 | LUCI UI is still in development. Our initial goal is to provide Buildbot |
| 361 | functionality parity, but we are committed to building additional enhanced user |
| 362 | experiences on top of the new LUCI UI once we no longer need to support |
| 363 | Buildbot. |
| 364 | |
| 365 | If you have specific feedback you would like to share with us, we would love to |
| 366 | hear it and incorporate it into our ongoing UI improvements. |
| 367 | |
| 368 | Use the **feedback button** on a LUCI page. |
| 369 | |
| 370 | For **feature requests or bugs**, please file a crbug using the following |
| 371 | [template](https://bugs.chromium.org/p/chromium/issues/entry?labels=LUCI-M0-Backlog&summary=[LUCI-Feedback-UI]%20Enter%20an%20one-line%20summary&components=Infra>Platform>Milo&[email protected],[email protected],[email protected]&description=Please%20use%20this%20to%20template%20to%20file%20a%20feature%20request%20into%20LUCI%20backlog.%20%20%0A%0AReminder%20to%20include%20the%20following%3A%0A-%20Description%0A-%20Priority%0A-%20Why%20this%20feature%20is%20needed). |
| 372 | |
| 373 | To **share your feedback**, please fill out this [short |
| 374 | survey](https://goo.gl/forms/YPO6XCQ3q47r00iw2). |
| 375 | |
| 376 | **Contact us** directly by emailing us at |
| 377 | [[email protected]](mailto:[email protected]). |
| 378 | |