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?
What do SCM tools (Ansible, Puppet, Chef, etc.) provide?
configuration management
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.