current_version = (1, 11, 0, 'alpha', 0) # you have to set this the first time, then bumpversion updates it along with the VERSION tuple in django/__init__.py
parse = \((?P<major>\d+),\s(?P<minor>\d+),\s(?P<patch>\d+),\s(?P<prerel>\'alpha\'|\'beta\'|\'rc\'),\s(?P<prerelnum>\d+)\)
$ bumpversion patch --list
current_version=(1, 11, 0, 'alpha', 1)
new_version=(1, 11, 1, 'alpha', 0)
$ bumpversion patch --list
current_version=(1, 11, 1, 'alpha', 0)
new_version=(1, 11, 2, 'alpha', 0)
$ bumpversion minor --list
current_version=(1, 11, 2, 'alpha', 0)
new_version=(1, 12, 0, 'alpha', 0)
$ bumpversion prerel --list
current_version=(1, 12, 0, 'alpha', 0)
new_version=(1, 12, 0, 'beta', 0)
$ bumpversion prerel --list
current_version=(1, 12, 0, 'beta', 0)
new_version=(1, 12, 0, 'rc', 0)
$ bumpversion prerelnum --list
current_version=(1, 12, 0, 'rc', 0)
new_version=(1, 12, 0, 'rc', 1)
$ bumpversion major --list
current_version=(1, 12, 0, 'rc', 1)
new_version=(2, 0, 0, 'alpha', 0)
With regards to Jenkins, you could have a release project with parameters of BRANCH and VERSIONPART and whatever else was needed. The VERSIONPART would feed into the bumpversion command.
I think this way reduces backward compatibility concerns.