Ephemeral Environments for DevOps: Why, What and How? (2017)
enterprisedevops.org
enterprisedevops.org
Currently the state of devops tools includes omitting debuggers when a company makes a new DSL, poor if any linting, low to non-existent test coverage so obvious bugs and regressions are normal, very poor IDE integration if any, often no real way to test locally, and not surprisingly the tools are bug riddled and at best scratch a single itch in an eco system w/o directly addressing the overall business problem.
Being able to instead write an env and have my application not particular care where it retrieves it from as long as a library is available is something I'm going to put in front of the rest of my team on Monday.
The idea of provisioning an environment to test a branch seems like a lot of overhead. Concretely, how long does it take to spin up an environment, install the containers/app, and run tests?
I imagine the answer is going to be over an hour.
Definitely feels like a lot of overhead, particularly when most branches change ~.1% of an application's code and so theoretically the full-diff is kilobytes worth of data.
-
The alternative of course is just to have a pre-set number of build-servers (e.g. 5) and then have jenkins dynamically run jobs against them. Seems simpler, I assume faster, and just less risky.
The idea of running integration tests on a non-complete environment seems like a lot of fun at the release.
> Concretely, how long does it take to spin up an environment, install the containers/app, and run tests?
I work currently at the community-sized online bank, total time of our pipeline to spin up a new "bank" is 22 minutes, running multiple of these envs on 4 HDDs in RAID 10. We'd move the whole thing on flash array in 2 weeks and my estimation is that this metric will go down to 7-8 minutes.
> The alternative of course is just to have a pre-set number of build-servers (e.g. 5) and then have jenkins dynamically run jobs against them.
You have to run these builds somewhere, if changes would run on a single staging env, it would be down most of the time. If it would be a handful of stagings, it might be still not enough because either you wouldn't have enough of them and it'll ended up to the single env situation multiplied, or you would burn cash for idle servers.
The environment is part of the product. With software, if you can't easily and automatically recreate your builds from source, you have a problem.
This ought to apply to cloud environments too.
This needs to be coupled with a lot more “how and we we picked this methodology” advise or information.
For example, if the goal is to reduce risk then is this the best way to approach that? Are all these components black boxes which cannot be stubbed out? Are there any other end to end or integration tests that can be ran in a canary environment that are way faster which will cover the most obvious use cases?
Id really think a few times before adopting this practice.