Search code examples
gitjenkinsphabricator

Sequentialization and parallelization of builds in Phabricator


I have several (source) repositories. Whenever a commit is pushed to one of theses repositories a task has to be triggered which builds the sources and push the result into another (target) repository.

The source repositories are hosted in Phabricator. The target repository is hosted separately. Jenkins has access to all repositories.

What I've done is:

  • A project in Jenkins which does a build job through a parametrized script
  • A build plan in Harbormaster with a Make HTTP Request build step calling Jenkins
  • A Herald rule which triggers the Harbormaster build plan whenever a commit is pushed to one of the source repositories

How can I ensure that all pushed commits of one source repository are build in the right order? And how could I parallelize the builds between the several source repositories?

What I like to avoid is a (huge) bunch of setup on Jenkins and/or Harbormaster for each source repository.


Solution

  • The short answer is Herald/Harbormaster ensure that the process order is always equal to the order of the commits in the repository. To prevent a non-sequentially processing of the commits you need to use the build step Wait for Previous Commits to Build as a dependency for your build step.

    To parallelize the processing between several repositories there is no other possibility beside multiple build plans where each of them is responsible for a specific (disjunct) set of repositories. But they all could use a one job in Jenkins, because the Phabricator would be the only one in charge for the process order.

    See also https://secure.phabricator.com/Q453.