fooshards
he came, he saw, he paid, he imaged, he left
(And the scaffolding for continuous delivery)
They should have every compile-time dependency, all test-time dependencies, and ideally all run-time dependencies that production has installed.
Every commit will trigger an enormous event to throw all of the regression you have built against it.
*Except maybe your production systems :)
Dude, it's just cron and/or events on your SCM tool.
This has been around for a long time.
The structure provided is nice, though.
A Fancy UI, History, and reporting is really nice too.
including cron and sendmail lol
Courtesy of CMU
Compile Src
Unit Test
Package
If any of the above fail, reject everything.
Even if you have no intention of indexing your packages or reusing them in your CI yet.
"We're feature complete, Tests pass, let's deploy!"
"... uh... it failed..."
Environmental config is a totally seperate subject worthy of many, many, presentations. Let's make some assumptions that the thing you create is environmentally agnostic, or is trivially configured.
The tools:
The actions:
Once you have the basics, keep building
Any and all regression, create buckets for it, wire those buckets into your CI, and keep moving.
Keep your feedback loop as tight as possible.
Integration testing is EXPENSIVE time-wise compared to unit testing.
Obligatory Martin Fowler Testing Pyramid
omg lazor fast
incur setup time, still fast, wow
most intense, such slow, so value
Failing fast, and giving appropriate feedback to the failure is great
You need some confidence in your automation. Don't half-ass
your regression. Many tests, especially UI tests which are end-to-end
will require some TLC.
Remember, this is your safety net, don't build it with popsicle sticks.
... and more
Agents
Artifactory plugins
Auto branch management
Plan summary, including deployables
Deploying a build
Deployment management and environment state
Travis handling git branch workflows
| Jenkins | Bamboo | Travis | TFS CI | |
|---|---|---|---|---|
| Cost | A+ | B |
A+ Open C Closed |
C |
| Plugin Ecosystem | A | B | ??? | A |
| Ease of Implementation | C | A- | A+ | B |
| Integrations and Features (Out of the box) | D Vanilla A Plugin'ed |
A+++ JIRA B Other |
A+ GitHub ??? Private |
A+ TFS B Other |
| Customizability | A+ | B | D | B |
| CD Integrations | B | A+ | B | A |
| UI / Polish | D | A+ | B | A |
| Cross-Platform | A+ | A | F | A |
This is really culturally bound, but as a good rule, the same team writing the code should not be the ones in full control of the CI system.
CI should be owned by the delivery, QA, or ops teams.
Server-level changes get discovered there.
By fooshards