For a team of two to fifteen people, “release management” rarely needs a dedicated product. It needs four things: a version number that means something, a tag in Git, release notes someone can read, and a gate so that production does not change by accident. The short answer: use the release features of the Git host you already have (GitHub, GitLab or Gitea), add a small tool for changelogs if hand-writing them is painful, and use Jenkins or an environment approval when a human must say “go”. Facts below were checked on 11 November 2026 against the official documentation and GitHub release pages. Not tested yet: we have not built a pipeline for this article, so the examples describe documented behaviour, not our own measurements.
The short list
| Tool | Best for | Licence | Where it runs |
|---|---|---|---|
| Gitea (28.3.0, 1 Nov 2026) | Self-hosted Git with releases and Actions CI | Free, MIT | Windows, Linux, macOS, FreeBSD |
| Jenkins (LTS 2.580.2, 28 Oct 2026) | Pipelines with a manual approval step | Free, MIT | Windows, Linux, Docker; needs Java 21+ |
| Ansible (14.4.0) | The deploy step itself: same playbook for every environment | Free, GPL-3.0 | Control node on Linux, macOS or WSL |
| GitHub Releases | Tags, notes and attached files on github.com | Hosted service; feature limits depend on plan | Web, gh CLI |
| GitLab Releases | Releases created from a CI job, with evidence | Offered on Free, Premium and Ultimate | GitLab.com or self-managed |
| release-please (v17.11.2) | Automatic version bump and changelog pull request | Free, Apache-2.0 | GitHub |
| semantic-release (v25.0.9) | Fully automatic versioning and publishing | Free, MIT | Any CI |
| git-cliff (v2.14.2) | Changelog generated from commit history | Free, Apache-2.0 or MIT | Command line |
The three tools in our catalogue are covered in more depth on the DevOps automation tools hub. The others are named here with facts taken from their own pages, which are linked below.
Step 1: pick a versioning rule and keep to it
Semantic Versioning 2.0.0 says: increase MAJOR for incompatible API changes, MINOR for backward-compatible functionality, PATCH for backward-compatible bug fixes. That suits libraries. For an internal service or a set of admin scripts, a date-based number or a plain counter is fine, as long as everyone knows which. What matters is that the tag is the single source of truth: the artifact, the changelog entry and the deployment all point to the same tag.
Step 2: cut the release in your Git host
GitHub
According to GitHub’s release documentation, you can create a release in the web interface or with gh release create TAG. A release can be saved as a draft, marked as a pre-release, and set as latest; if you do not set latest yourself, GitHub assigns the label based on semantic versioning. The page also describes immutable releases: once published, assets cannot be added, replaced or deleted and the tag cannot be moved, so the documented advice is to create a draft, attach the files, then publish.
The “Generate release notes” button builds a list of merged pull requests, contributors and a link to the full changelog. You can group entries by label with a .github/release.yml file; each category needs a title and labels, and "*" acts as a catch-all. The release notes page has the full key list. This only works as well as your pull request labels, so decide on three or four labels (for example breaking change, feature, fix) and apply them in review.
GitLab
The GitLab releases page lists the feature as available on Free, Premium and Ultimate. Creating a release in the interface needs the Developer, Maintainer or Owner role. In CI you use the release keyword; the CI/CD YAML reference says tag_name is required, the tag is created at the same time if it does not exist, and the job must have the glab CLI in its $PATH. Two details that catch people out: the release is created only if the job’s script succeeds, and if the release already exists it is not updated and the job fails. The same documentation notes that the older release-cli is being replaced by glab and will not be supported after version 20.0. Deleting a Git tag that belongs to a release also deletes the release.
Gitea
Our Gitea page covers the self-hosted route: Gitea 28.3.0 (1 November 2026) is MIT-licensed, includes a package registry and Gitea Actions, which is documented as compatible with GitHub Actions workflows. If your repositories must stay on your own servers, this is the closest equivalent to the two hosted options. We have not tested its release screens ourselves.
Step 3: write the changelog without hand-editing
Keep a Changelog (version 1.1.0) states two rules worth copying: changelogs are for humans, not machines, and there should be an entry for every version. Three tools automate the boring part:
- release-please “automates CHANGELOG generation, the creation of GitHub releases, and version bumps”, according to its repository. It does not publish to package managers. Latest release seen: v17.11.2, August 2026.
- semantic-release goes further: it determines the next version, generates notes and publishes the package (repository). Latest stable seen: v25.0.9; a v26.0.0 beta was already out on 6 November 2026, so do not pin to the beta by accident.
- git-cliff is a changelog generator that follows Conventional Commit specifications (repository); it only writes text, so you keep control of tagging. Latest release seen: v2.14.2, September 2026.
All three depend on commit messages or labels being consistent. If your team writes “fix stuff”, none of them will help, and a hand-written five-line changelog is better.
Step 4: add a gate before production
GitHub environments can require reviewers: up to six people or teams, and only one has to approve. There is a wait timer, branch and tag restrictions, and an optional “Prevent self-review” setting. Check the plan before relying on this: the environments documentation says the Free plan can configure environments only for public repositories, and private repositories need Team (organizations) or Pro (users). On GitLab, protected environments and their approvals are listed for Premium and Ultimate, not Free.
If you run Jenkins, the Pipeline input step is the free equivalent. Its documentation says it pauses the pipeline and offers a basic proceed or abort option, with message, ok, cancel and id parameters. Put it between the staging deploy and the production deploy, and the build waits for a person.
Step 5: make the deploy repeatable
A release tag is only useful if deploying it does the same thing every time. An Ansible playbook that takes the tag as a variable and runs unchanged against staging and production gives you that, and rolling back means running the same playbook with the previous tag. Keep the previous two artifacts available; on GitHub that is easy to forget once a release is immutable and a mistake needs a new version rather than an edit.
Limitations
- Feature availability on hosted services changes by plan; re-check the linked pages before you commit.
- Automatic versioning tools assume disciplined commit messages.
- None of this replaces change approval if your organisation follows ITIL-style processes; it only gives the paper trail a tag and a log.
- We did not test any of the tools above for this article.
How to choose
- Where does your code live? Use that host’s releases first; do not add a second system.
- Do you need a human approval? If the host plan includes environment approvals, use them; otherwise use Jenkins
input. - Is changelog writing the pain point? Try git-cliff first (no workflow change), then release-please.
- Are you publishing a package? semantic-release is built for that; for internal services it is usually more than you need.
- Is the deploy script the same for every environment? If not, fix that before adding tools.
FAQ
What is release management in DevOps?
It is the practice of planning, versioning, approving and deploying software releases so that each one is traceable. For a small team that means a tag, notes, an approval and a repeatable deploy.
What are the best open source release management tools?
For releases themselves, Gitea and Jenkins (both MIT). For changelogs and versioning, release-please, semantic-release and git-cliff, all open source.
Do I need release management software, or is Git enough?
Git tags plus your host’s releases are enough for most small teams. Add tools only when notes or approvals become a bottleneck.
What is the release management process?
Choose a version, tag it, build and test, publish notes, get approval, deploy, and keep a way to roll back.
Can GitHub or GitLab approve a release before production?
Yes, through environment reviewers on GitHub and protected environments on GitLab, subject to the plan limits described above.
Does Jira manage releases?
Google suggests the question, but we did not review Jira for this article, so we make no claim about it.
Last updated: 11 November 2026 · ITForgePro editorial team. Licence, version and platform details are checked against each developer's official documentation.





