This contains all of the Terraform bits for hosted Travis CI ☁️.
This is what allows us to manage our cloud environments from a central place,
and change them over time. It should be possible to bring up (or re-create) a
complete environment with a few make tasks.
In production. Patches welcome. Please review the code of conduct.
Terraform manages pretty much everything that is not running on Heroku, and even a little bit of some of what is running on Heroku. We use terraform to manage our main cloud environments as well as some other services:
- Amazon Web Services
- Google Cloud Platform
- Macstadium
- OpenStack
- terraform 0.9.0+
trvs, a Travis CI tool shrouded in mystery, along with access to secret secrets for making secret stuff- Ruby 2.2 or higher (to make sure trvs functions correctly)
- jq
- Clone this repo
- Make sure
trvsis installed and added to your$PATH. (You can try runningtrvs generate-config -H travis-scheduler-prodto check) - Set all required environment variables (see the list below). This can achieved
by doing something like:
- Manually sourcing an
.envfile (like.example.env) - Using autoenv
- Fetching values from your own pass vault
- Manually sourcing an
AWS_ACCESS_KEYAWS_REGIONAWS_SECRET_KEYGITHUB_TOKENGITHUB_USERNAMEHEROKU_API_KEYTF_VAR_ssh_userTRAVIS_KEYCHAIN_DIR- should be the parent directory of your keychain repos
MacStadium & GCE access creds are shared and come from keychain, not personal accounts, so there are no infrastructure-specific access keys for them.
$TF_VAR_ssh_user isn't needed for AWS and can just be set to $USER, if your
local username and your SSH username are the same. If you have an SSH key
passphrase, consider starting ssh-agent and doing ssh-add.
See http://rabexc.org/posts/using-ssh-agent for more details.
# move into a given infrastructure directory, e.g.:
cd ./gce-staging-1
# terraform plan, which will automatically configure terraform from remote and
# generate config files via `trvs`
make plan
# if it looks OK, terraform apply
make apply
# as some configuration is generated and cached locally, changes to
# configuration sources may require cleaning before further plan/apply
make clean- Running
make checkwill verify a few common setup requirements. - Verify you have been added to the relevant Heroku organizations.
- Try passing the
-dflag tomaketo see which commands are being run.- this will show various curl commands (e.g. heroku) which may be
silenced (
-fs); try running these directly without the-fsflags to make sure they succeed
- this will show various curl commands (e.g. heroku) which may be
silenced (
terraform consolewill allow you to use an interactive console for testing interpolations and looking into the existing state.- Terraform state errors may be due to insufficient AWS permissions. See the
.example-aws-iam-policy.jsonfor example minimum permissions.
See ./LICENSE.