all articles
automation · 6 min read
DevOps automation: choosing tools for reliable delivery
Compare CI/CD, infrastructure and monitoring tools, and plan a small automation pilot with clear ownership, rollback and reliability checks.
Most small software teams do not need a DevOps platform. They need three things to stop going wrong: code that reaches production without someone copying files by hand, a deploy that can be undone, and an alert when the site breaks. This guide helps you pick tools for those jobs, check that the tools are still maintained, and run one small pilot with a named owner and a rollback plan.
Start with the failure, not the tool list
Before comparing products, write down the last three times a release went badly. Typical answers at a 5 to 50 person company look like this:
- Someone deployed from their laptop with uncommitted changes.
- Tests existed but nobody ran them before merging.
- A server or DNS change was made in a web console and nobody remembers what it was.
- The site was down for an hour before a customer told you.
Each of those maps to one category of automation. Laptop deploys and skipped tests are a CI/CD problem. Console changes are an infrastructure-as-code problem. Late discovery is a monitoring problem. If none of your incidents fall into a category, skip that category for now.
Decision matrix
Use this table to narrow the field. The "check before you commit" column matters more than the tool names, because products change licenses, owners and pricing.
| Need | Usually the first thing to try | Check before you commit |
|---|---|---|
| Run tests and deploy on every merge | The CI service built into where your code already lives, for example GitHub Actions if you use GitHub | Runner minutes on your plan, which protection features your plan includes for private repositories |
| Full control, self-hosted, unusual build steps | Jenkins | Who will patch and upgrade the server, which plugins you depend on and whether they are still updated |
| Servers, DNS, databases defined as code | Terraform or OpenTofu | License terms for your use, state file storage and who can read it |
| Know when production breaks | Uptime checks and error alerts from your hosting provider or an error-tracking service | Where alerts go at night, who is on the hook to respond |
| Repeatable server setup | A configuration tool or container images | Whether you still have long-lived servers at all |
Two notes on the table. Jenkins is actively maintained: its long-term support line shipped release 2.580.1 on September 30, 2026. The trade-off is that you run it, so you own its updates and its plugin risk. On infrastructure as code, HashiCorp's Terraform is now under the Business Source License, and OpenTofu is the community fork under Linux Foundation stewardship that describes itself as a drop-in replacement. For most small teams either works; read the license yourself if you plan to resell or host infrastructure tooling for others.
How to check a tool is still maintained
Old tool roundups list projects that have since been archived, renamed or relicensed. Before adopting anything, spend fifteen minutes on these checks:
- Open the official changelog or releases page. Look for releases in the last few months, not just commits.
- Read the license file in the repository, not a blog summary.
- Search the project's security advisories page and see how quickly past issues were fixed.
- Check who funds it. A single-maintainer project can be excellent, but plan for the day it stops.
- For plugins or marketplace actions, check each one separately. The core tool being healthy says nothing about a plugin last updated years ago.
One pipeline example
Here is a GitHub Actions workflow for a small web app. It runs tests on every pull request and on every push to main, and deploys only after tests pass. Every key used here is documented in GitHub's workflow syntax reference.
name: test-and-deploy
on:
pull_request:
branches: [main]
push:
branches: [main]
permissions:
contents: read
concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: false
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: 24
- run: npm ci
- run: npm test
deploy:
if: github.event_name == 'push'
needs: test
runs-on: ubuntu-latest
timeout-minutes: 15
environment:
name: production
url: https://example.com
steps:
- uses: actions/checkout@v7
- run: ./scripts/deploy.sh
- run: ./scripts/smoke-test.sh https://example.com
What each part is doing:
permissions: contents: readnarrows the default token so a compromised step cannot push code.needs: testmeans the deploy job only starts if the test job succeeds.concurrencywithcancel-in-progress: falsequeues a second deploy instead of killing one halfway through.timeout-minutesstops a hung job. Without it, GitHub's default is 360 minutes.environment: productionties the deploy to a GitHub environment, where you can add protection rules such as required reviewers or restricting which branches may deploy. Check your plan first: GitHub's docs say required reviewers and wait timers on private repositories are not available on every plan.- The smoke test after deploy is your own script. Keep it short: load the home page, log in with a test account, check one key page returns a success status.
The action versions (@v7) and Node 24 match what the actions/checkout and actions/setup-node READMEs showed in October 2026. Check those pages when you copy this, because major versions move and older Node releases reach end of life.
The deploy script itself is where your hosting choice lives. Keep it in the repository so the steps are reviewed like code.
Plan a small pilot
Do not automate everything at once. Pick one service or one repository and run the pilot for a few weeks.
Ownership
- Name one person who owns the pipeline file and is the first contact when it fails.
- Name a backup for holidays.
- Decide who can approve production deploys, and write it down.
Rollback
- Decide how you undo a bad deploy before the first automated one. Usually that means redeploying the previous commit or switching back to the previous release.
- Test the rollback once on purpose, on a quiet day, and time it.
- Database changes need their own plan. A code rollback does not undo a migration.
Reliability checks
- Every deploy runs the smoke test, and a failed smoke test alerts a person.
- One uptime check hits production from outside your network.
- Secrets live in the CI service's secret store, never in the repository.
- Branch protection on
mainrequires the test job to pass before merging.
At the end of the pilot, review what happened: how many deploys, how many failed, how many rollbacks, and whether anyone bypassed the pipeline. Those answers tell you whether to extend it to the next repository or fix the first one.
Where automotif fits
This is automation builds work: we set up the pipeline, alerts and rollback steps inside your own accounts, with code where the off-the-shelf pieces stop. If you want a second opinion on which parts of your release process are worth automating first, book a free call for 30 to 60 minutes and we will send a written summary and recommendation afterward.