Page history Edit this page How do I edit this website?

Continuous Integration

Continuous integration (CI) and continuous delivery (CD), collectively referred to as the CI/CD pipeline, together comprise a software engineering technique to perform automated tasks in response to code changes.


SciJava projects including ImageJ2 and Fiji use CI/CD in several ways, including:

  • Building the code. A CI job deploys SNAPSHOT builds to the SciJava Maven repository in response to pushes to each code repository’s mainline branch (e.g. main or master). So any downstream projects depending on a version of LATEST for a given component will match the last successful CI build—i.e., the latest code on the mainline branch.
  • Run associated unit tests. CI is instrumental in early detection of new bugs introduced to the codebase.
  • Making releases. A CI job deploys release builds to the appropriate Maven repository—typically either the SciJava Maven repository or OSS Sonatype.
  • Keeping resources up-to-date.
  • Keeping web resources such as the javadoc up to date.

Deploying your library to a Maven repository makes it available for other developers. It is also a contribution requirement for the Fiji project.


There are several popular options for performing CI builds in the cloud, or on your own self-hosted infrastructure:

  • GitHub Actions - Used by most SciJava projects for builds, testing, and deployment.
  • AppVeyor - Used by a few SciJava projects for builds on the Windows platform.
  • Travis CI - Used by SciJava projects from 2017 until 2021.
  • Jenkins - Used by SciJava projects from 2010 until 2019.

Just to name a few that are or were used within the ImageJ community.