What it is
An automatic pipeline: as soon as code changes, it is checked and shipped to the server on its own — no manual steps.
How we use it
In almost every project — faster releases, less risk of forgetting or breaking something by hand during deployment.
Where CI/CD helps a business
- A change in one place must not silently break another: tests should catch that before a deploy.
- A new version should be rolled out the same way every time, with no "forgot to copy a file".
- More than one person works on the project, or one round of edits follows another.
How we use it
- Tests on every push. In the UNLOCK card service, smoke tests with Postgres run in GitHub Actions on every change; the README notes 2,305 checks. The tests fail if the card file drifts from the service schema.
- Publishing without a server. The VPN setup guides live on GitHub Pages: edit a file in the repository and the page is updated.
- Building on a workstation. The studio website image is built locally and uploaded ready-made, because the server lacks memory for a Nuxt build. Deployment runs as a script that also tells search engines about changed pages at the end.
- Tests without a network. The finance assistant has about 120 pytest tests covering text parsing, statement matching, debts, cash and export. They need no database or network, so they run anywhere.
We set up one-button CI builds, for example, when publishing apps to stores, under Apps.
Common problems
- A pipeline without tests. Automatically deploying unchecked code just delivers bugs faster. Tests first, automation second.
- Manual-only tests. In some of our bots tests are run by hand and there is no CI, and this is honestly listed among the limitations.
- Secrets in the pipeline. Deploy tokens are stored in the CI settings, not in the repository.
- Nothing to roll back to. If a deploy breaks production, you need a quick way back: the previous image or a database copy.
When you do not need it
For one static page or a script that changes twice a year, a full pipeline is needless complexity: a repository and a single deploy command are enough. CI pays off when there are many changes and tests already exist.