Setting up a Cider-CI Development Environment

Prerequisites

  • PostgreSQL version ≥ 9.4 (≤ 9.3 will not suffice!)
  • JDK 8 or later
  • Leiningen version ≥ 2.0 (≥ 2.5 recommended)
  • Ruby ≥ 2.2 with Bundler

The environment will by default require the following ports (in addition to the one used by PostgreSQL):

  • 8880 ‥ 8889
  • 7880 ‥ 7889
  • 8443

Project Checkout

A running instance of Cider-CI is composed of several services. See the Architecture page for an overview.

The source code for each service is a git submodule of the main Cider-CI project.

git clone --recursive https://github.com/cider-ci/cider-ci.git

Database - PostgreSQL

We set up the cider-ci role within psql:

CREATE ROLE "cider-ci" PASSWORD 'secret' createdb superuser login;

We change into the directory of the Cider-CI User-Interface, configure, create the database and load some initial data to work with.

1cp config/database_dev.yml config/database.yml
2bundle
3bundle exec rake db:create db:migrate
4bundle exec rake db:seed

Reverse Proxy

A deployed environment of Cider-CI uses the Apache HTTP server as a reverse proxy. We use the same technology during development and in the integration tests. Installing and starting the reverse proxy for development is operating system specific. Details are discussed in the Cider-CI Integration-Tests Project.

User-Interface Service

The Cider-CI User-Interface is a Ruby on Rails application.

We start the web-server from within the directory of the Cider-CI User-Interface.

bundle
bundle exec rails s -p 8880

We visit the url http://localhost:8888/cider-ci/ui/public in a browser and should see a similar page as shown.

Welcome-Page

We sign in with the user admin and password secret and follow the links AdministrationServer status. http://localhost:8888/cider-ci/ui/admin/status reveals that the message queue is running but non of the services are:

Services-Offline

Clojure Services

All of the remain services Cider-CI API, Cider-CI Builder, Cider-CI Dispatcher, Cider-CI Executor, Cider-CI Notifier, Cider-CI Repository, and Cider-CI Storage are written in clojure. Each of them comes with a ./bin/run script which will start a headless server.

We can alternatively start a REPL from inside each directory and then start the service therein with (-main).

cd SERVICE_DIRECTORY
./bin/run

or

cd SERVICE_DIRECTORY
lein repl
(-main)

The services use relative paths to access files. It is crucial that they are started from within their own top level directory!

All of the services should now be listed OK at http://localhost:8888/cider-ci/ui/admin/status.

Executor

Status of the Executor-Service

The Executor-Services are listed on the AdministrationExecutors page http://localhost:8888/cider-ci/ui/admin/executors. There is only one configured in the default data set. It matches the parameters of the default development executor and hence it should be up and running.

Note: other parameters, like the traits e.g., are taken from the default setup when an executor is installed via the Cider-CI Deploy. They might not match the given development environment.

Executors

Running a Job

Running a job is the final test for our environment. The dataset comes with a predefined repository. It features fairly simple examples. Some of the defined tasks purposely fail with a certain probability. Hence, a failed job can be a positive outcome of this test.

Job