A Distributed Continuous Integration System from MongoDB
Go CSS JavaScript HTML Other
Switch branches/tags
Clone or download
Permalink
Failed to load latest commit information.
.github EVG-3017 add github CODEOWNERS Mar 20, 2018
agent EVG-3284: pprof agent routes (#1384) Jul 11, 2018
alerts EVG-3717 URL-escape BFG task links (#1475) Aug 6, 2018
apimodels EVG-3725 Add expansions to host.create command (#1472) Aug 6, 2018
auth EVG-3354: migrate api server routes (#1351) Jul 3, 2018
cloud EVG-5173: return containers by name instead of ID in GetContainers (#… Aug 13, 2018
command EVG-3725 Add expansions to host.create command (#1472) Aug 6, 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 Revert "EVG-3089 Break test-db to test notifications" Jul 3, 2018
docs EVG-2764 Move documentation from repo into wiki Mar 14, 2018
main EVG-3578: flatten plugin packages (#1314) Jun 27, 2018
migrations EVG-3729 migration to convert legacy notifications to subscriptions (#… Aug 13, 2018
mock EVG-3590 make overwriting admin collection a flag (#1446) Aug 8, 2018
model EVG-5185 use more correct query for stranded tasks, log host deco mor… ( Aug 14, 2018
monitor EVG-3085 refactor spawnhost expiration notifications (#1293) Jun 27, 2018
operations EVG-5193 Run scheduler every minute (#1523) Aug 14, 2018
plugin EVG-3512 organize display task files by name (#1486) Aug 6, 2018
public EVG-5178 (feat) PerfBB - Display CPs for the 2 last weeks (#1520) Aug 14, 2018
repotracker EVG-3649 make build break notifications really work (#1439) Jul 31, 2018
rest EVG-3691: remove duplicate route registration Aug 14, 2018
scheduler EVG-3730: check uninitialized parent documents before inserting new o… Aug 1, 2018
scripts EVG-3821 Halt on race detector error Aug 9, 2018
service EVG-5185 use more correct query for stranded tasks, log host deco mor… ( Aug 14, 2018
subprocess EVG-3311: remove evergreen all (#1140) May 8, 2018
testdata EVG-3414 Smoke server shouldn't deploy agent Jun 13, 2018
testutil EVG-3554-remove-noprod (#1405) Jul 16, 2018
thirdparty EVG-3680: generate unique names for S3 integration tests (#1422) Jul 23, 2018
trigger EVG-5180 check old executions for task regression trigger (#1518) Aug 14, 2018
units Revert "EVG-3614: group builk inserts (#1448)" Aug 13, 2018
util EVG-5142: avoid modifying senders in jobs (#1491) Aug 7, 2018
validator EVG-3287: reset running tasks on terminated hosts (#1401) Jul 16, 2018
vendor EVG-3146: use correct generated task format Aug 3, 2018
.gitattributes EVG-3171 (feat) Waterfall - variant search (#1436) Jul 25, 2018
.gitignore EVG-3171 (feat) Waterfall - variant search (#1436) Jul 25, 2018
LICENSE.md MCI-2284 add license text Jun 1, 2015
README.md Minor: Update README.md May 23, 2018
config.go EVG-3690 Remove short form of --browse to avoid conflicts (#1466) Aug 1, 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 EVG-3598: update fields in docker provider and settings UI (#1360) Jul 5, 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-3590 make overwriting admin collection a flag (#1446) Aug 8, 2018
environment_test.go EVG-3590 make overwriting admin collection a flag (#1446) Aug 8, 2018
glide.lock EVG-3146: use correct generated task format Aug 3, 2018
glide.yaml EVG-3146: use shrub for generated tasks (#1459) Aug 1, 2018
globals.go Revert "EVG-3455 Only log version and build finished events when all … Aug 14, 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-3769: create build directory Aug 6, 2018
self-tests.yml EVG-3769: fix cross compile tests (#1474) Aug 3, 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.