title: Build versioning in continuous delivery
body: <p>I have some concrete questions about versioning in Continuous Delivery. I think I understand global workflow that more or less is this:</p>
  
  <pre><code>1) Code
  2) Push to version Control
  3) Continuous Integration (unit, integration and end-to-end auto testing)
  4) Artifacts deployment
  </code></pre>
  
  <p>What about versioning? How manage build versions?</p>
  
  <p>Let's say that we are working on a Maven-based project with semantic versioning: <code>major.minor.build</code>.</p>
  
  <p>When developer commit changes to VCS and CI server perform a build, should CI server increment the build version and create a tag in VCS? </p>
  
  <p>Is this build version present in the source code? If so, after each push to VCS, developer should update the project, since CI server committed changes (version increment) on project. </p>
  
  <p>I'm a little confused and I would like to understand the CD workflow in a practical way.</p>