continuous integration - build separated projects or build all in one?

138 views Asked by At

I'm working on a project that will have these applications:

- backend api   (nodejs)
- ios app       (objective-c)
- android app   (java)
- web site      (php)
- admin site    (php)
- client site   (php)

My question is about versioning and managing all this projects.

I'm thinking about two options:

1) build each app saparately

  • Harder to test apps integrations
  • If I change something in one app, I need to be careful with all other apps
  • I need merge all apps changelogs to a single document

2) put all apps into one single build

  • This seems good to generate a single changelog
  • Maybe write tests to apps integrations?

--

So, what is some good practices for this case? Maybe option 2?

2

There are 2 answers

2
Dan Cornilescu On BEST ANSWER

My vote goes to option 2. Much easier to 'carry' development across all its phases with a monolithic approach:

  • simpler integration - all pieces are already integrated, everyone working on any piece of the overall project is on the same page, not in their own sandbox (true continuous integration, if you want) - very important if you also plan to use agile methodologies
  • integration testing no longer has to be a separate activity, you can do it part of the regular CI process since you can test all pieces together (possibly with a single combo testbed instead of dedicated testbeds for each piece - lower costs)
  • simpler coherent/consistent source code control (even if the pieces have their own repos, they can be managed together in a monolithic style like I suggested in this Q&A: Build dependencies and local builds with continuous integration
  • possibly faster overall builds (different builds can use idle cycles in other builds which is harder to orchestrate when they are independent - they could potentially be better "packed", leading to cost reduction on build resources)
0
David L. Whitehurst On

I would absolutely not go with option 2. Continuous integration was termed by Grady Booch back in the early 90's. Today, they want to use the term Continuous Delivery. I say we should have used Continuous Improvement the whole time. Anyhow, you want to be able to deliver, deploy, put into production an application, a project, "a" deliverable. You absolutely do not want to mix applications. You could have the need to deploy one application to production and something is wrong with another application. Or you just did a very quick fix to a single application and you want to take it through the process to delivery today. I would not choose option 2 for these reasons.