-
Notifications
You must be signed in to change notification settings - Fork 6
/
jenkins.html
380 lines (295 loc) · 18.6 KB
/
jenkins.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta name="msapplication-config" content="/browserconfig.xml"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta charset="utf-8"/>
<link rel="apple-touch-icon" type="image/png" href="/apple-touch-icon.png"/>
<link rel="manifest" type="application/manifest+json" href="/site.webmanifest"/>
<link rel="mask-icon" type="image/svg+xml" href="/mask-icon.svg" color="#990000"/>
<link rel="shortcut icon" type="image/png" href="/favicon.png"/>
<title>Drake: GitHub PR Interaction with Jenkins</title>
<meta
name="description"
content="Drake ("dragon" in Middle English) is a C++ toolbox started by the Robot
Locomotion Group at the MIT Computer Science and Artificial Intelligence
Lab (CSAIL). The development team has now grown significantly, with core
development led by the Toyota Research Institute. It is a collection of
tools for analyzing the dynamics of our robots and building control
systems for them, with a heavy emphasis on optimization-based design/
analysis.
"/>
<!--
The "Work Sans" font is licensed under the SIL Open Font License (OFL). For
more information, see:
- https://fonts.google.com/specimen/Work+Sans?preview.text_type=custom#about
- https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL
-->
<link href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&family=Work+Sans:wght@300;400;600;700;800&display=swap" rel="stylesheet"/>
<link rel="stylesheet" href="/third_party/github-styling/github-markdown.css"/>
<link rel="stylesheet" href="/third_party/dracula/syntax.css"/>
<link rel="stylesheet" href="/third_party/pylons/pylons.css"/>
<link rel="stylesheet" href="/assets/css/main.css"/>
</head>
<body>
<header class="site-header">
<div class="site-header-inner contain">
<a href="/" class="drake-logo">
<img src="/images/drake-logo-white.svg">
</a>
<div class="menu-mobile-toggle">
<span></span>
</div>
<nav class="site-menu">
<ul>
<li class="site-menu-item site-menu-item-main">
<a href="/" class="site-menu-item">Home</a>
</li>
<li class="site-menu-item site-menu-item-main">
<a href="/installation.html" class="site-menu-item">Installation</a>
</li>
<li class="site-menu-item site-menu-item-main">
<a href="/gallery.html" class="site-menu-item">Gallery</a>
</li>
<li class="site-menu-item site-menu-item-main">
API Documentation
<div class="sub">
<a href="/doxygen_cxx/index.html" class="site-menu-item">C++</a>
<a href="/pydrake/index.html" class="site-menu-item">Python</a>
</div>
</li>
<li class="site-menu-item site-menu-item-main">
Resources
<div class="sub">
<a href="/getting_help.html" class="site-menu-item">Getting Help</a>
<a href="https://deepnote.com/workspace/Drake-0b3b2c53-a7ad-441b-80f8-bf8350752305/project/Tutorials-2b4fc509-aef2-417d-a40d-6071dfed9199/%2Findex.ipynb" class="site-menu-item">Tutorials</a>
<a href="/python_bindings.html" class="site-menu-item">Python Bindings</a>
<a href="/developers.html" class="site-menu-item">For Developers</a>
<a href="/credits.html" class="site-menu-item">Credits</a>
</div>
</li>
<li class="search">
<div class="search-icon">
<!-- This is an inline SVG image of a magnifying glass. -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 374.9 374.84">
<path d="M235 270a148.74 148.74 0 1 1 35-35l97.74 97.74a24.37 24.37 0 0 1 0 34.58l-.4.4a24.47 24.47 0 0 1-34.58 0L235 270Zm-86.22-7.47A113.75 113.75 0 1 0 35 148.75 113.75 113.75 0 0 0 148.75 262.5Z"/>
</svg>
</div>
<div class="search-bar">
<form id="search_form" action="https://google.com/search" method="get">
<input type="text" name="q" placeholder="Search all of Drake…" />
<input type="hidden" name="q" value="site:drake.mit.edu OR site:underactuated.csail.mit.edu OR site:manipulation.csail.mit.edu" />
</form>
<div class="search-close">
<!-- This is an inline SVG image of an "X". -->
<svg height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 373.61 373.57">
<path d="M219.71 186.77 366.71 40a23.43 23.43 0 1 0-33.13-33.13l-146.77 147-146.77-147A23.43 23.43 0 0 0 6.9 40l147 146.77-147 146.77a23.43 23.43 0 1 0 33.14 33.13l146.77-147 146.77 147a23.43 23.43 0 1 0 33.13-33.13Z"/>
</svg>
</div>
</div>
<ul id="results-container"></ul>
</li>
<li class="github-link">
<a href="https://github.com/RobotLocomotion/drake" class="site-menu-item">GitHub <img src="/third_party/images/GitHub-Mark-Light-64px.png" /></a>
</li>
</ul>
</nav>
</div>
</header>
<div class="page">
<div class="content">
<div class="drake-page">
<header class="drake-page-header">
<div class="contain">
<h1>GitHub PR Interaction with Jenkins</h1>
</div>
</header>
<section class="padding">
<div class="contain">
<article class="markdown-body">
<p>When a new pull request is opened in the project and the author of the pull
request is not a member of the RobotLocomotion GitHub organization, the Jenkins
GitHub Pull Request Builder @drake-jenkins-bot will not automatically schedule
builds.</p>
<p>To allow the pull request to be tested, a member of the RobotLocomotion
organization may comment:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot ok to test</code> to accept this pull request for testing.</li>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot test this please</code> for a one time test run.</li>
</ul>
<p>If the build fails for other various reasons you can rebuild:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot retest this please</code> to start a new build.</li>
</ul>
<p>You can also view the <a href="https://drake-jenkins.csail.mit.edu/">Jenkins UI</a>
directly.</p>
<h1 id="rebuilding-via-reviewable">Rebuilding via Reviewable</h1>
<p>When posting a <code class="language-plaintext highlighter-rouge">@drake-jenkins-bot ... please</code> comment in Reviewable,
never use the large green “Publish” button in the upper right corner.</p>
<p>Instead, write the bot comment in the “Review discussion” box immediately below
the “File Matrix” widget <strong>and</strong> use the “single message send” button to post
it, in the lower-right corner of the “Review discussion” box.</p>
<p><img src="/images/jenkins_bot_reviewable_comment.png" alt="Jenkins Bot Reviewable Comment" /></p>
<p>(For details, see
<a href="https://github.com/Reviewable/Reviewable/issues/576">Reviewable#576</a>.)</p>
<h1 id="scheduling-an-on-demand-build">Scheduling an On-Demand Build</h1>
<p>There are a number of Jenkins builds that do not normally run pre-merge, but do
run post-merge or nightly. These builds include lower-priority
platforms (e.g., macOS), and specialized options (e.g.,
<a href="https://releases.llvm.org/6.0.0/tools/clang/docs/UndefinedBehaviorSanitizer.html">UndefinedBehaviorSanitizer</a>).
Members of the RobotLocomotion organization can manually schedule these builds
on pull requests that have not yet been merged, or on arbitrary commits in the
<code class="language-plaintext highlighter-rouge">RobotLocomotion/drake</code> repository.</p>
<p>To schedule a build of an open pull request merged with master, comment:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot <job-name> please</code></li>
</ul>
<p>where <code class="language-plaintext highlighter-rouge"><job-name></code> is the name of an
<a href="https://drake-jenkins.csail.mit.edu/view/Experimental/">experimental job</a>.</p>
<p>For example:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot mac-arm-sonoma-clang-bazel-experimental-release please</code></li>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot linux-jammy-clang-bazel-experimental-valgrind-memcheck please</code></li>
</ul>
<p>A list of Jenkins bot commands that cover the full set of continuous and nightly
production jobs are available for
<a href="https://github.com/RobotLocomotion/drake/blob/jenkins-jobs-experimental/request-jobs-provisioned.txt">provisioned</a>
and
<a href="https://github.com/RobotLocomotion/drake/blob/jenkins-jobs-experimental/request-jobs-unprovisioned.txt">unprovisioned</a>
builds.</p>
<h2 id="scheduling-builds-via-the-jenkins-user-interface">Scheduling Builds via the Jenkins User Interface</h2>
<p>Alternatively, to schedule a build of an open pull request or arbitrary commit
in the <code class="language-plaintext highlighter-rouge">RobotLocomotion/drake</code> repository:</p>
<ol>
<li><strong>Log in</strong> to <a href="https://drake-jenkins.csail.mit.edu/">Jenkins</a> using GitHub OAuth.
(Make sure that you see your name the upper-right corner, <em>not</em> the words “Log in”.)</li>
<li>Go to the list of <a href="https://drake-jenkins.csail.mit.edu/view/Experimental/">experimental builds</a>.</li>
<li>Click on the specific build you want to schedule.</li>
<li>Click on “Build with Parameters” in the left menu.</li>
<li>Enter <code class="language-plaintext highlighter-rouge">pr/XYZ/head</code> (HEAD of pull request), <code class="language-plaintext highlighter-rouge">pr/XYZ/merge</code> (pull request
merged with master), or the desired commit SHA in the <code class="language-plaintext highlighter-rouge">sha1</code> field.</li>
<li>Click <code class="language-plaintext highlighter-rouge">Build</code>.</li>
</ol>
<p>The list of experimental builds includes builds that automatically run on opened
and updated pull requests, as well as numerous other builds for on-demand use.
To help identify the on-demand build you want to run, you can consult the lists
of <a href="https://drake-jenkins.csail.mit.edu/view/Continuous/">continuous</a>, and
<a href="https://drake-jenkins.csail.mit.edu/view/Nightly/">nightly</a>
but you should not schedule continuous or nightly builds directly.</p>
<h2 id="updating-installation-prerequisites">Updating Installation Prerequisites</h2>
<p>Installation prerequisites are packages that are not pulled in Bazel, but
instead installed on the OS itself using a package manager like <code class="language-plaintext highlighter-rouge">apt</code>,
Homebrew, or <code class="language-plaintext highlighter-rouge">pip</code> (only on Mac). They are installed via the scripts under
<code class="language-plaintext highlighter-rouge">setup/</code>, and are split between <code class="language-plaintext highlighter-rouge">binary_distribution</code> (dependencies that
are necessary for <a href="/installation.html">binary installation</a>) and
<code class="language-plaintext highlighter-rouge">source_distribution</code> (dependencies, in addition to those in
<code class="language-plaintext highlighter-rouge">binary_distribution</code>, necessary for
<a href="/from_source.html">source installation</a>). Since
<code class="language-plaintext highlighter-rouge">source_distribution</code> will also install prerequisites in
<code class="language-plaintext highlighter-rouge">binary_distribution</code>, you do not need to duplicate binary prerequisites in
<code class="language-plaintext highlighter-rouge">source_distribution</code>.</p>
<p>Prerequisites of the <code class="language-plaintext highlighter-rouge">source_distribution</code> are further split into three
parts: those that are needed for building and running the <code class="language-plaintext highlighter-rouge">//:install</code> target
using <code class="language-plaintext highlighter-rouge">bazel</code> (<code class="language-plaintext highlighter-rouge">bazel run //:install</code>), those additional dependencies for
building and running tests (<code class="language-plaintext highlighter-rouge">bazel test ...</code>), and those additional
dependencies for running select maintainer scripts (e.g., <code class="language-plaintext highlighter-rouge">mirror_to_s3.py</code>
and <code class="language-plaintext highlighter-rouge">new_release.py</code>). Again, it is expected that a given prerequisite will
only appear in one of these lists.</p>
<p>When updating prerequisites with these scripts, the normal experimental CI will
most likely fail. To test new prerequisites, you should first request
unprovisioned experimental builds, e.g.:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot linux-jammy-unprovisioned-gcc-bazel-experimental-release please</code></li>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot mac-arm-sonoma-unprovisioned-clang-bazel-experimental-release please</code></li>
</ul>
<p>After this has passed, go through normal review. Once normal review is done,
add <code class="language-plaintext highlighter-rouge">@BetsyMcPhail</code> for review and request that the provisioned instances be
updated. She will then respond on when it is appropriate to merge the PR.</p>
<h2 id="building-packages-on-demand">Building Packages on Demand</h2>
<h3 id="binary-or-debian">Binary or Debian</h3>
<p>To schedule an “experimental” build of a <a href="/from_binary.html">binary package</a>
or <a href="/apt.html">debian package</a>, comment on an open pull request using one or
more of these commands:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot linux-jammy-unprovisioned-gcc-bazel-experimental-packaging please</code></li>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot mac-arm-sonoma-unprovisioned-clang-bazel-experimental-packaging please</code></li>
</ul>
<p>or follow the <a href="#scheduling-builds-via-the-jenkins-user-interface">instructions above</a>
to schedule a build of one of the <a href="https://drake-jenkins.csail.mit.edu/view/Packaging/">Packaging</a>
jobs with <strong>experimental</strong> in its name.</p>
<p>To download the built package, open the Jenkins console log for the completed
build (click on “Console Output” then “Full Log”) and search for the text
“Upload complete” to find the download URL. For example:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>...
[9:49:51 AM] -- Upload complete: https://drake-packages.csail.mit.edu/drake/experimental/drake-20230427164706-0b666a17ba2ce3ca7505655dc724960d88a34645-jammy.tar.gz
...
[9:49:53 AM] -- Upload complete: https://drake-packages.csail.mit.edu/drake/experimental/drake-dev_0.0.20230427164706-0b666a17ba2ce3ca7505655dc724960d88a34645-1_amd64-jammy.deb
...
</code></pre></div></div>
<h3 id="wheel">Wheel</h3>
<p>To schedule an “experimental” build of a <a href="/pip.html">wheel package</a>,
comment on an open pull request using one or more of these commands:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot linux-jammy-unprovisioned-gcc-wheel-experimental-release please</code></li>
<li><code class="language-plaintext highlighter-rouge">@drake-jenkins-bot mac-arm-sonoma-unprovisioned-clang-wheel-experimental-release please</code></li>
</ul>
<p>or follow the <a href="#scheduling-builds-via-the-jenkins-user-interface">instructions above</a>
to schedule a build of one of the <a href="https://drake-jenkins.csail.mit.edu/view/Wheel/">Wheel</a>
jobs with <strong>experimental</strong> in its name.</p>
<p>To download or install the built wheel, open the Jenkins console log for the
completed build (click on “Details” for a wheel build in the pull request’s
list of checks, then “Console Output”) and search for the text “Artifacts
uploaded to AWS” to find the download URL (usually about a screen’s-worth of
text above the end of the log). For example:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>...
[12:00:00 AM] -- Artifacts uploaded to AWS:
[12:00:00 AM] https://drake-packages.csail.mit.edu/drake/experimental/drake-0.0.1999.1.1.0.0.0%2Bgitffffffff-cp310-cp310-manylinux_2_31_x86_64.whl
...
</code></pre></div></div>
<p>Note that there might be multiple wheel files uploaded for different versions
of Python. Be sure to match the Python <code class="language-plaintext highlighter-rouge">M.NN</code> version you will be using to
the <code class="language-plaintext highlighter-rouge">-cpMNN-</code> substring in the URL.</p>
<p>(In some cases, it may be necessary to click the “Full Log” and search for the
text “Upload complete”, particularly if you wish to also find the checksum
URLs.)</p>
<p>To download the wheel, simply click the link or use your favorite HTTP
retrieval tool (e.g. <code class="language-plaintext highlighter-rouge">wget</code> or <code class="language-plaintext highlighter-rouge">curl</code>).</p>
<p>Wheels may also be installed locally for testing without downloading the wheel
as a separate step:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python3 <span class="nt">-m</span> venv <span class="nb">env
env</span>/bin/pip <span class="nb">install</span> <span class="nt">--upgrade</span> pip
<span class="nb">env</span>/bin/pip <span class="nb">install</span> <url-of-experimental-wheel>
<span class="nb">source env</span>/bin/activate
</code></pre></div></div>
</article>
</div>
</section>
</div>
<footer class="site-footer padding">
<div class="contain">
<a href="/" class="drake-logo">
<img src="/images/drake-logo.svg">
</a>
<div class="footer-menu">
<ul>
<li>
<a href="/doxygen_cxx/index.html" class="site-menu-item">C++</a>
</li>
<li>
<a href="/pydrake/index.html" class="site-menu-item">Python</a>
</li>
<li class="github-link">
<a href="https://github.com/RobotLocomotion/drake" class="site-menu-item">GitHub <img src="/third_party/images/GitHub-Mark-64px.png" /></a>
</li>
</ul>
</div>
</div>
<!-- TODO(eric.cousineau): Consider placing copyright here. -->
</footer>
</div>
</div>
<script src="/assets/js/mobile.js"></script>
<!-- Search -->
<script src="/assets/js/search.js"></script>
</body>
</html>