Harbormaster and Jenkins¶
We use Jenkins for our continuous integration. It automatically runs builds and tests on code revisions, and it keeps our live documentation up-to-date. This system is integrated directly into Phabricator.
Phabricator Harbormaster interfaces directly with Jenkins, starting builds and reporting the status to the rest of Phabricator. You will rarely need to interact directly with Harbormaster - the build success or failure is usually posted directly on the Differential Revision or Commit.
We use Phabricator Owner to track Packages - sets of files, usually relating to a single library or feature within that library.
When a revision is made to a particular Package, through either a new Revision or Commit, the related build will be triggered (if applicable).
A particular file may belong to more than one Package, and thus may trigger more than one build.
Sometimes you may not want to run builds and/or tests on a particular
Revision yet. If you add the tags
#notest to the
Subscribers field of the Revision, the build will not be triggered.
Be aware that you cannot land a Revision until the tests have
run. Thus, you’ll want to ensure that you remove
#notest from the Revision before your last update.
A Repository Master is a Phabricator user with special privileges on the repositories. A Repository Master can...
- Land any Revision, regardless of build status.
- Manually start builds.
- Add and modify the build triggers.
- Push to repositories without an accepted Revision.
We do not accept requests to become a Repository Master, so don’t ask.
Access and Login¶
Jenkins is open to the public, in that anyone can access it to view status and details about builds.
However, only MousePaw Media staff may log into Jenkins using their LDAP credentials (username and password). Thus, only staff can view build configurations. Permissions further depend on your role - only Repository Masters can edit build configurations.
If you’re a staff member, and you are having trouble logging in with your LDAP credentials, contact IT to have your password reset.
We do not issue LDAP credentials to non-staff under any circumstances.
Types of Builds¶
Most of our projects have a “build” job. These are all configured to work directly with Phabricator Revisions and Commits, and to run Goldilocks tests on demand (if the code supports them).
Aside from code builds, Jenkins also rebuilds our live Sphinx documentation. As
soon as a change is made to any documentation files on a repository’s
branch, Jenkins rebuilds the documentation and publishes it to
mousepawmedia.net/help, as appropriate.
Jenkins maintains separate clones of a few repositories for satisfying the dependencies of other builds. We call these “central” builds.
Every time a commit is published to the
stable branch of one of these
repositories, the “central” copy of the repository is rebuilt.
All C++ builds take place on a virtual machine running:
- Ubuntu 16.04 LTS Server x64, updated daily.
- LLVM/Clang 3.8
- CMake 3.5.1
- Up-to-date clones of the
pawlibrepositories, using the
stablebranch for each.