Continuous Integration & Automated Deployment (CI/CD)3 min readUpdated September 2026

A Deploy Runbook for Payments Software That Won't Fail an Audit

A payments engineering team's pipeline has a different job than most software teams' pipelines: it has to produce a record that satisfies an auditor as reliably as it produces a working deploy. Speed still matters, but not at the cost of being able to answer who approved a change and why, months after the fact.

This runbook covers the five things a fintech team's CI/CD setup needs regardless of whether you're building it on GitHub Actions or GitLab CI.

Vendors Covered in this Article

Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.

How do you separate who writes code from who approves production?

Segregation of duties isn't optional in payments engineering, and your pipeline should enforce it structurally rather than relying on a policy nobody checks. Configure your production environment so the author of a pull request cannot also be the approver of its deploy, using GitHub Actions' required reviewers on protected environments or GitLab's separation of the merge approver from the deploy approver on protected environments.

This single control answers one of the first questions a PCI DSS assessor or an internal auditor will ask, and it's cheap to set up once and easy to forget if you don't automate the enforcement.

Step 2: make every production deploy traceable to a ticket

A deploy that happened without a corresponding change ticket is a gap an auditor will find. Require your pipeline's production deploy step to reference a ticket ID, either through a commit message convention your pipeline validates or an integration that blocks the deploy job until a linked ticket exists in your change management system.

This matters more than it sounds like it should, because in a fast-moving engineering team, the ticket is often created after the fact, or not at all, unless the pipeline itself refuses to proceed without one.

How do you keep release artifacts immutable across stages?

Build the deployable artifact once, in the pipeline, and promote that exact artifact through staging and into production rather than rebuilding it at each stage. A rebuild at every stage means you're never entirely sure the code running in production matches what passed your test suite in staging, which is a hard question to answer well when a regulator asks it directly.

Both GitHub Actions and GitLab CI support this through artifact passing between jobs, GitHub's upload and download artifact actions, or GitLab's artifacts and needs keywords carrying a build forward through the pipeline.

Step 4: build a rollback path before you need one

A payments team can't afford to discover its rollback process during an incident. Test the rollback path itself as part of your pipeline setup, not just the forward deploy, and confirm it can revert a live change within your incident response time targets before you're relying on it under pressure.

Change failure rate, how often a deployed change causes an incident, is a metric worth tracking specifically for production payment paths rather than folding it into a single number across your whole codebase1. A payments-specific number tells you whether your extra controls here are actually working, separate from how the rest of the engineering org is doing.

Step 5: retain pipeline logs for as long as your audit window requires

Both GitHub Actions and GitLab CI have default retention periods for workflow and job logs that are shorter than most financial services audit windows. Export logs to your own long-term storage rather than assuming the CI platform will hold onto them as long as you need, and confirm the export itself is automated rather than a manual step someone has to remember.

An auditor asking for deploy records from fourteen months ago is a bad time to discover your CI platform only retained ninety days of history.

Coordinating a deploy with your compliance calendar

A payments team often has to time releases around more than just its own readiness: a quarterly PCI DSS assessment window, an internal audit, or a partner bank's own change-freeze period can all constrain when a production deploy is actually a good idea, independent of whether the code itself is ready. Keep a shared calendar that flags these windows so an engineer isn't the one discovering a compliance freeze the day they were planning to ship.

This coordination has nothing to do with GitHub Actions or GitLab CI specifically, but a pipeline that makes deploys fast and low-friction the rest of the time is what actually makes a temporary freeze tolerable, since nobody's sitting on a backlog of changes they've been unable to ship for weeks. Publish the calendar somewhere the whole team can see it, not just in the head of whoever schedules audits.

Watch for these constraints on release timing:

  • A quarterly PCI DSS assessment window can make a deploy a poor idea even when the code is ready.
  • An internal audit can constrain when production changes should ship.
  • A partner bank's own change-freeze period can block otherwise ready releases.
  • Keep a shared calendar that flags these windows so releases are planned around them.
Executive Capability Standard

What Good Looks Like

Good looks like a pipeline that structurally prevents self-approval on production, ties every deploy to a ticket, promotes one immutable artifact through every environment, and retains logs longer than your CI platform's default.

Building The Capability (5-Stage Skill Ladder)

1. Learn:Have your engineering lead walk through what a PCI DSS assessor or internal auditor actually asks for in a deploy review before building controls against assumptions.
2. Do Manually:Set up segregation of duties and ticket-linkage requirements by hand on your production environment first, so you understand exactly what's being enforced.
3. Delegate:Assign a specific engineer to own log export and retention configuration, since it's easy for this to quietly lapse when nobody's watching it.
4. Automate:Turn ticket linkage and artifact immutability into required pipeline checks that block a deploy automatically rather than relying on someone remembering the process.
5. Buy:A compliance monitoring platform like Vanta can continuously verify that these controls stay configured correctly instead of you rediscovering a gap during the next audit.

How to Get Started

Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.

Frequently Asked Questions

Do we need a different pipeline for our payments-processing service than for internal tools?

Yes, at least in terms of controls. Apply segregation of duties, ticket linkage, and immutable artifacts specifically to anything touching payment processing, and reserve a lighter-weight pipeline for internal tools that don't carry the same audit requirements.

Can an engineer approve their own deploy in an emergency?

Build a documented break-glass process instead of a routine exception. A rare, logged, and reviewed emergency path is defensible to an auditor; a policy that quietly allows self-approval whenever it's convenient is not.

How long should we retain CI/CD pipeline logs for a payments platform?

Match it to your longest applicable audit or regulatory retention requirement, often a year or more, rather than your CI platform's default. Export logs to separate storage on a schedule so retention doesn't depend on a setting you might forget to check.

Sources

Where we quote a benchmark, we show its source. Other figures in this guide are estimates or general guidance, so check them against your own numbers.

  1. Change failure rate by DORA performance cluster. DORA Accelerate State of DevOps 2024 (Google Cloud), cluster table via Octopus Deploy analysis, 2024.

Related Guides