I've read quite a lot about Software Configuration Management (on the Internet and also SWEBOK), but I have no clear what is the purpose of SCM tools. Or, better said, what do these tools provide that other tools do not.

Let's say that I have an environment with the following tools:

  • Jenkins for continuous integration.
  • Ant as build tool.
  • Git as version control system.
  • GitLab for Git repositories management, and for issue tracking also.
  • Source code analysis and testing tools, such as Sonar and JUnit.

So, my question is, what would those SCM tools provide? In which way would they be useful?


All the tools that you have mentioned (Jenkins, ant, git )help to actually build and test your artifact. In java world usually this can be war, ear or just zip with the application inside. Sometimes for complicated applications it can be more than one artifact. For other programming platforms it may vary, DLLs, binaries for multiple different platforms and so forth.

Now lets say you want to deploy your application. If you have one server you can do it manually or with some homegrown script. So far so good :)

But what if you have a lot of farms (groups of machines), different farms should have deployments with different configurations (databases, different geographical locations) What if your application may scale horizontally so that adding a couple of new nodes to the farm should be a trivial task. Your QA team may just ask for a new environment to run their tests, your performance team can ask for a new environment or add nodes to the farm to run stress tests and so on. Now managing all this stuff seems to be complicated. That's where tools like ansible, chef, salt, puppet and others come into play.

These are actually helping to automate deployment. They can provide recipes of deployment, install missing dependencies (in order to run your project may require jre, tomcat of specific version and nginx for static content ). All this at the level of farm.

I know the answer is too generic and may seem less obvious for java developer (I'm one of those ). But if you have a team of system/devops guys they should immediately point on benefits of these tools.

  • Thanks for your answer. For those who are developers and QA&Performance testers all-in-one (my case), with just two machines, development and production, would you recommend the use of those SCM tools? I understand your point, but it's difficult for me to understand for all and place myself in that context, since I've never been in that situation.
    – Julen
    Nov 2 '15 at 13:45
  • 2
    if you're deploying only a war than probably you shouldn't use these tools. Of course you can try one (maybe ansible or salt will work for you better). I would probably give them a try just to learn something new and see whether my life would have become easier with these tools :) Nov 2 '15 at 20:21
  • 1
    I think that's what I'm going to do, thanks a lot.
    – Julen
    Nov 3 '15 at 7:53
  • At some point in the future you WILL need to scale beyond current capacity or replace existing hardware with more modern kit. Whether scaling vertically (bigger machine) or horizontally (separating web from db with more of web) using an SCM will both simplify the final migration & make it easier to test that you won't break anything in the move. Deciding to begin experimenting now when your environment is simple is a wise choice. Note, you can also use these tools (I prefer Ansible for its simplicity and lack of reliance on installing agents on every box) to provision your Dev system). Nov 13 '15 at 15:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.