You're reading the documentation for a version of ROS 2 that has reached its EOL (end-of-life), and is no longer officially supported. If you want up-to-date information, please have a look at Foxy.

How to setup a macOS Jenkins node

Install macOS Mojave

Install: APFS case-sensitive Post-install: No Siri, no location services, no cloud anything, no analytics, no filevault disk encryption.

Setup SSH/VNC for Remote Access

Make sure you don’t use too long of a password. That makes VNC auth fail in bizarre ways. In particular, VNC auth limits you to 8 characters.

  • Go to: Apple->System Preferences->Sharing

    • set hostname to something reasonable

    • check “Remote Login”

    • check “Screen Sharing”

  • add Terminal to the dock

  • Go to: Apple->System Preferences->Energy Saver

    • set sleep to never

    • uncheck everything

  • Go to: Apple->Security

    • click lock to unlock it

    • “Allow Apps from app store and verified developers”

    • uncheck “Require password after 5 minutes” box

    • uncheck “Disable automatic login”

Host Setup

Install XCode tools:

$ xcode select --install

Install JDK for Jenkins. Easiest way is to type java at the terminal and let Apple link you to Oracle’s JDK download. I installed the latest JDK 8 (withholding Java 9 for now).

Install Homebrew following instructions at

Install ssh-askpass via homebrew

$ brew tap theseal/ssh-askpass
$ brew install ssh-askpass

Create ~/.bash_profile with this one line:

. ~/.bashrc

Create ~/.bashrc with one line:

export ROS_DOMAIN_ID=XXX  # where XXX is chosen from this document

Set up dummy git names:

$ git config --global ""
$ git config --global "HOSTNAME"

Install ROS 2 Dependencies

Install them according to our install instructions.


  • brew packages

  • pip packages

  • the optional RTI Connext and OpenSplice packages

  • everything but downloading the source and building ROS 2 (unless you want to do so for testing the setup)

RQt dependencies

  • brew install sip pyqt5

  • Fix some path names when looking for sip stuff during install (see ROS 1 wiki):

    ln -s /usr/local/share/sip/Qt5 /usr/local/share/sip/PyQt5

  • brew install graphviz

  • python3 -m pip install pygraphviz pydot

  • brew link --force qt

    This is the quickest solution but may cause issues when upgrading Qt or if other packages are expecting Qt 4. Another option is to update your PATH and CMAKE_PREFIX_PATH to include the Qt install location:

    $ export PATH="$(brew --prefix qt)/bin:$PATH"
    $ export CMAKE_PREFIX_PATH="$(brew --prefix qt):$CMAKE_PREFIX_PATH"

RTI Connext Specific Instructions

  • The Open Robotics license is here (private repo):

  • Open the RTI launcher application

    • In the RTI launcher, open the file dialog to choose the license file.

    • Install it for all users.

    • Click the Installation tab

    • Click RTI Package installer

  • Navigate to the connext extracted directory (usually something like /Applications/rti_...

    • Select the rti_security rtipkg (don’t bother with the openssl ones, we use system openssl)

  • Set the shared memory parameters from

    • Do not bother to reboot yet.

  • Download openssl-1.0.2n-target-x64Darwin17clang9.0.tar.gz from RTI’s website using an RTI account and extract it.

tar -xzvf openssl-1.0.2n-target-x64Darwin17clang9.0.tar.gz
  • Add environment variables pointing to the paths to the RTI openssl libraries.

export RTI_OPENSSL_BIN=/Users/osrf/openssl-1.0.2n/x64Darwin17clang9.0/release/bin
export RTI_OPENSSL_LIBS=/Users/osrf/openssl-1.0.2n/x64Darwin17clang9.0/release/lib

Setting up the Jenkins Workspace and Agent

$ mkdir jenkins jenkins-agent
$ cd jenkins-agent
$ wget

Copy the jenkins agent plist from

Edit the file to match the jnlp URL and secret of the host you’re setting up. You may need to create a new agent if you’re not re-imaging an existing one.

$ mkdir ~/Library/LaunchAgents
$ cp ~/jenkins-agent/ ~/Library/LaunchAgents
$ launchctl load -w ~/Library/LaunchAgents/

Reboot! You should be good to go, run some test CI jobs.