<p>Tiffany Kyi, Software Engineer, Verizon Media</p>
<p>We have recently rolled out a new feature: <b>Remote Join</b>.</p>
<p>Previously, with <a href="https://docs.screwdriver.cd/user-guide/configuration/workflow#remote-triggers">remote triggers</a>, users could kick off jobs in external pipelines by requiring a job from another one. With this new remote join feature, users can do parallel forks and join with jobs from external pipelines.</p>
<p>An example of external parallel fork join in the Screwdriver UI:</p>
<figure data-orig-width="2812" data-orig-height="1228" class="tmblr-full"><img src="https://66.media.tumblr.com/a4beaf3eb845218b99756840ab52421a/f48d70dea10b6648-69/s540x810/b67f789eff31726b80d77300516428cdd08a38f4.png" alt="image" data-orig-width="2812" data-orig-height="1228"/></figure><h2><br/></h2>
<!-- more -->
<h2>User configuration</h2>
<p>Make sure your cluster admin has the proper configuration set to support this feature.</p>
<p>In order to use this new feature, you can configure your screwdriver.yaml similar to how remote triggers are done today. Just as with normal jobs, remote triggers will follow the rules:</p>
<ul><li><code>~</code> tilde prefix denotes logical [OR]</li>
<li>Omitting the <code>~</code> tilde prefix denotes logical [AND]</li>
</ul><p><b>Example</b></p>
<p>Pipeline 3 screwdriver.yaml:</p>
<pre><code>shared:
image: node:12
<code>steps:
- echo: echo hi</code>
jobs:
main:
requires: [~commit, ~pr]
internal_fork:
requires: [main]
join_job:
requires: [internal_fork, sd@2:external_fork, sd@4:external_fork]
</code></pre>
<p>Pipeline 2 screwdriver.yaml:</p>
<pre><code>shared:
image: node:12
<code><code>steps:
- echo: echo hi</code></code>
jobs:
external_fork:
requires: [~sd@3:main]
</code></pre>
<p>Pipeline 4 screwdriver.yaml:</p>
<pre><code>shared:
image: node:12
<code><code>steps:
- echo: echo hi</code></code>
jobs:
external_fork:
requires: [~sd@3:main]
</code></pre>
<p><b>Caveats</b></p>
<ul><li>In the downstream remote job, you’ll need to use <code>~</code> tilde prefix for the external requires</li>
<li>This feature is only guaranteed one external dependency level deep</li>
<li>This feature currently does not work with PR chain</li>
<li>The event list on the right side of the UI might not show the complete mini-graph for the event</li>
</ul><h2>Cluster Admin configuration</h2>
<p>In order to enable this feature in your cluster, you’ll need to make changes to your Screwdriver cluster’s configuration by setting <code>EXTERNAL_JOIN</code> <a href="https://github.com/screwdriver-cd/screwdriver/blob/master/config/custom-environment-variables.yaml#L386">custom environment variable</a> to <code>true</code>.</p>
<h2>Compatibility List</h2>
<p>In order to use this feature, you will need these minimum versions:</p>
<ul><li><a href="https://hub.docker.com/r/screwdrivercd/screwdriver">API</a> - v0.5.877</li>
<li><a href="https://hub.docker.com/r/screwdrivercd/ui">UI</a> - v1.0.494</li>
<li><a href="https://hub.docker.com/r/screwdrivercd/store">Store</a> - v3.10.5</li>
<li><a href="https://hub.docker.com/r/screwdrivercd/launcher">Launcher</a> - v6.0.12</li>
</ul><h2>Contributors</h2>
<p>Thanks to the following contributors for making this feature possible:</p>
<ul><li><a href="https://github.com/adong">adong</a></li>
<li><a href="https://github.com/d2lam">d2lam</a></li>
<li><a href="https://github.com/jithine">jithine</a></li>
<li><a href="https://github.com/klu909">klu909</a></li>
<li><a href="https://github.com/tkyi">tkyi</a></li>
</ul><p><b>Questions & Suggestions</b></p>
<p><i>We’d love to hear from you. If you have any questions, please feel free to reach out <a href="https://docs.screwdriver.cd/about/support">here</a>. You can also visit us on <a href="https://github.com/screwdriver-cd">Github</a> and <a href="https://slack.screwdriver.cd">Slack</a>.</i></p>