A Distributed Continuous Integration System from MongoDB
Switch branches/tags
Clone or download
Permalink
Failed to load latest commit information.
.github EVG-3017 add github CODEOWNERS Mar 20, 2018
agent EVG-5318: disable metrics collection during task execution Sep 12, 2018
apimodels EVG-5306 Set VPC bool for task-spawned hosts (#1648) Sep 18, 2018
auth EVG-5295 Add function to authenticate user against LDAP (#1623) Sep 10, 2018
cloud EVG-5228 various fixes for createhost reproduction (#1631) Sep 13, 2018
cmd EVG-5221 fix generate-lint on docker (#1640) Sep 14, 2018
command EVG-5306 Set VPC bool for task-spawned hosts (#1648) Sep 18, 2018
config_dev MCI-2278 MCI-2279: add UI panel for distros Apr 16, 2015
config_prod remove outdated mci config files Jun 3, 2015
config_test EVG-3507 create job to check consistency of running containers in DB … Jul 6, 2018
db EVG-5239: add marshaler panic for db.Q (#1559) Aug 21, 2018
docs EVG-2764 Move documentation from repo into wiki Mar 14, 2018
migrations EVG-5255 Migration to convert db.subscriptions _id to strings (#1581) Aug 24, 2018
mock EVG-3590 make overwriting admin collection a flag (#1446) Aug 8, 2018
model Revert "EVG-5331 Clear last task when returning nil task" Sep 17, 2018
monitor EVG-3085 refactor spawnhost expiration notifications (#1293) Jun 27, 2018
operations EVG-5226 add flag to validate all configs (#1622) Sep 13, 2018
plugin EVG-5302 Fix format string for go 1.11 Sep 6, 2018
public EVG-5256 allow configurable renotification interval for regression tr… Sep 14, 2018
repotracker EVG-3374 Rename Subscriptions.Type to Subscriptions.ResourceType (#1562) Aug 21, 2018
rest EVG-5306 Set VPC bool for task-spawned hosts (#1648) Sep 18, 2018
scheduler EVG-5209: skip host allocator when maxhosts (#1642) Sep 14, 2018
scripts EVG-5221 fix smoke test on docker (#1646) Sep 14, 2018
service Revert "EVG-5331 Clear last task when returning nil task" Sep 17, 2018
subprocess EVG-3311: remove evergreen all (#1140) May 8, 2018
testdata EVG-3408 remove legacy notifications (#1550) Aug 22, 2018
testutil EVG-5305: simplify makefile (#1632) Sep 12, 2018
thirdparty EVG-3680: generate unique names for S3 integration tests (#1422) Jul 23, 2018
trigger EVG-5256 allow configurable renotification interval for regression tr… Sep 14, 2018
units EVG-3217 remove unneeded job Sep 12, 2018
util EVG-5302: fix formating strings for go1.11 Sep 5, 2018
validator EVG-5226 add flag to validate all configs (#1622) Sep 13, 2018
vendor EVG-5295 Add function to authenticate user against LDAP (#1623) Sep 10, 2018
.gitattributes EVG-3171 (feat) Waterfall - variant search (#1436) Jul 25, 2018
.gitignore EVG-5244: make command main files more consistent with idioms (#1608) Sep 5, 2018
LICENSE.md MCI-2284 add license text Jun 1, 2015
README.md Minor: Update README.md May 23, 2018
config.go EVG-2596 Clean up Evergreen CLI update routes/data structures (#1585) Aug 28, 2018
config_alerts_notify.go EVG-3355: remove unused hostReady functions (#1315) Jun 27, 2018
config_amboy.go EVG-3002 split up config (#948) Mar 28, 2018
config_api.go EVG-3002 split up config (#948) Mar 28, 2018
config_auth.go EVG-3002 split up config (#948) Mar 28, 2018
config_cloud.go EVG-3002 split up config (#948) Mar 28, 2018
config_containerpools.go Revert "EVG-5219: remove port and typo from distro UIs (#1544)" Aug 17, 2018
config_db.go EVG-3554-remove-noprod (#1405) Jul 16, 2018
config_hostinit.go EVG-3002 split up config (#948) Mar 28, 2018
config_jira.go EVG-3002 split up config (#948) Mar 28, 2018
config_jira_notifications.go EVG-3416 Modify event driven notifications JIRA Issue payload for tas… Jul 11, 2018
config_logger.go EVG-3002 split up config (#948) Mar 28, 2018
config_registry.go EVG-3416 Modify event driven notifications JIRA Issue payload for tas… Jul 11, 2018
config_repotracker.go EVG-3002 split up config (#948) Mar 28, 2018
config_scheduler.go EVG-3194 utilization-based host allocator (#1145) May 13, 2018
config_serviceflags.go EVG-3461 add switch to disable task logging (#1214) Jun 4, 2018
config_slack.go EVG-3002 split up config (#948) Mar 28, 2018
config_test.go EVG-3554-remove-noprod (#1405) Jul 16, 2018
config_ui.go EVG-3684 Send CORS headers for task and test log routes (#1425) Jul 23, 2018
environment.go EVG-2596 Re-add tags to CLI structs (#1611) Sep 4, 2018
environment_test.go EVG-3590 make overwriting admin collection a flag (#1446) Aug 8, 2018
glide.lock EVG-5295 Add function to authenticate user against LDAP (#1623) Sep 10, 2018
glide.yaml EVG-3146: use shrub for generated tasks (#1459) Aug 1, 2018
globals.go EVG-5126 make setup-failed a failed status (#1601) Aug 29, 2018
loggers_linux.go EVG-1963: change system logging on non-linux platforms Aug 16, 2017
loggers_other.go EVG-1963: change system logging on non-linux platforms Aug 16, 2017
makefile EVG-5221 fix smoke test on docker (#1646) Sep 14, 2018
self-tests.yml EVG-5221 change distro name for tests on docker Sep 17, 2018

README.md

Evergreen

Evergreen is a distributed continuous integration system built by MongoDB. It dynamically allocates hosts (via AWS, GCP, etc) to run tasks in parallel across many machines at once to decrease the total amount of time needed to complete a test workload.

Using Evergreen, we've significantly enhanced the productivity of our engineers.

Features

Elastic Host Allocation

Use only the computing resources you need.

Clean UI

Easily navigate the state of your tests, logs, and commit history.

Multiplatform Support

Run jobs on Linux (including PowerPC and ZSeries), Windows, OSX, Solaris, and BSD.

Spawn Hosts

Spin up a copy of any machine in your test infrastructure for debugging.

Patch Builds

See test results for your code changes before committing.

Stepback on Failure

Automatically run past commits to pinpoint the origin of a test failure

See the documentation for a full feature list!

Usage

Evergreen requires the configuration of a main server along with a cloud provider or static servers. Please refer to our tutorial for full installation instructions.

System Requirements

The Evergreen Agent and Command Line Tool are supported on Linux, OSX, Windows, and Solaris operating systems. However, the Evergreen API Server, UI Server, and Runner program are currently only supported and tested on Linux and OSX.

Go Requirements

Vendoring Dependencies

Our dependencies live in the vendor subdirectory of the repo, and are managed using glide. To add a new dependency, add the package to glide.yaml and the package name and revision to glide.lock, and run glide install -s. To refresh the entire vendor tree, run make vendor-sync

Building the Binaries

Setup:

  • ensure that your GOPATH environment variable is set.
  • check out a copy of the repo into your gopath. You can use: go get github.com/evergreen-ci/evergreen. If you have an existing checkout of the evergreen repository that is not in $GOPATH/src/github.com/evergreen-ci/ move or create a symlink.
  • run make vendor to set up the vendoring environment.

Possible Targets:

  • run make build to compile all server binaries for your local system.
  • run make agent cli to compile the agent and cli for your local platform.
  • run make agents clis to compile and cross compile all agent and command line interface binaries.
  • run make dist to compile all server, commandline, and agent binaries and create a dist tarball with all artifacts.

Terminology

  • distro: A platform type (e.g. Windows or OSX) plus large-scale architectural details. One of the targets that we produce executables for.
  • host: One of the machines used to run tasks on; typically an instance of a distro that does the actual work (see task). Equivalently, any machine in our system other than MOTU.
  • revision: A revision SHA; e.g. ad8a1d4678122bada9d4479b114cf68d39c27724.
  • project: A branch in a given repository. e.g. master in the mongodb/mongo repository
  • version: (project + revision). A version of a project.
  • buildvariant: build specific information.
  • build: (version + buildvariant) = (project + revision + buildvariant).
  • task: “compile”, “test”, or “push”. The kinds of things that we want to do on a host.

Running Evergreen Processes

A single configuration file drives most of how Evergreen works. Each Evergreen process must be supplied this settings file to run properly. For development, tweak the sample configuration file here.

All Evergreen programs accept a configuration file with the -conf flag.

How It Works

  • A MongoDB server must be already running on the port specified in the configuration file.
  • Both the API and UI server processes are started manually and listen for connections.
  • All other processes are run by the runner process.
  • For detailed instructions, please see the wiki.