blob: 3c2c993d35064f2cf3b3980252d59dff8229ad89 [file] [view]
# appengine/
This directory contains the AppEngine services needed for a LUCI infrastructure.
Every single microservice below is _optional_. Please mix and match based on
your needs.
## TL;DR
* A minimal setup can be [isolate](isolate) + [swarming](swarming).
* As infrastructure complexity scales up, [auth_service](auth_service),
[config_service](config_service) can be added over time to reduce the
management overhead.
* Once automatic dynamic VM managment is needed, setup
[machine_provider](machine_provider) and [gce-backend](gce-backend).
* Go to http://console.cloud.google.com and register as many instances as
needed then follow the service specific instructions.
## Services
* [auth_service/](auth_service) Authentication Server. Provides centralized
group management and group database replication across services.
* [config_service/](config_service) is a project configuration distribution
server that supports importing from repositories.
* [gce-backend/](gce-backend) is a [Google Compute
Engine](http://console.cloud.google.com/) backend for machine_provider.
* [isolate/](isolate) Isolate Server is a Content-Addressed Cache running on
AppEngine backed by Cloud Storage.
* [machine_provider/](machine_provider) Machine provider is a service to
lease VMs from a pool to users.
* [swarming/](swarming) Swarming Server is a task distribution engine for
highly hetegeneous fleet at high scale.
## Supporting code
* [components/](components) contains the modules shared by all services in
this repository. This includes the embeddable part of auth_service to act as
a client for auth_service, ereporter2, machine_provider, tooling for testing
and deployment.
* [third_party/](third_party) contains shared third parties. Services using
these should symlink the packages inside the root server directory so it
becomes available in sys.path.
* [third_party_local/](third_party_local) constains testing or tooling related
third parties that are not meant to be ever used on a AppEngine server.
## Tooling
All services can be managed with `./tools/gae`, including running locally or
pushing a new version. Use `./tools/gae help` for an up to date list of commands
available.
### Pushing
Pushing new code to an AppEngine instance doesn't change the default version.
To push a new version of one of the services, do:
```
cd <server> # for example, config_service
./tools/gae upload -A <instance_name>
```
As described in the output by the tool, you can access it to
`<version>-dot-<name>.appspot.com` until you switch the default version.
### Changing the version
To make the new code _live_, you need to change the default version:
```
cd <server> # for example, config_service
./tools/gae switch -A <instance_name>
```
`gae` will propose the versions already uploaded and will propose the latest one
by default.
## External dependencies
luci-py leverages Chromium specific functionalities:
[CIPD](https://chromium.googlesource.com/infra/infra/+/master/cipd/)
(hermetic package management) and
[ts_mon](https://chromium.googlesource.com/infra/infra/+/master/infra_libs/ts_mon/)
(monitoring). Neither are strictly required for operational purpose.