Automating ServiceNow change management as part of our GitLab CI
deployment workflow.
A Go platform that plugs GitLab CI into the ServiceNow API to
automate enterprise change management. It cut release cycle time by
55%, removed manual change-task work, standardized deployments across
teams, and was approved by our governance board for production.
Every deployment used to require an engineer to hand-create a
ServiceNow change task, paste in the build details, update it
mid-deploy, and close it afterward. It was repetitive, error-prone,
inconsistent between teams, and slow.
Old Manual Workflow
The steps engineers repeated, every time
1 A build stage produces the build info
2 Create the ServiceNow change task by hand
3 Paste in the build details
4 Update the task manually
5 Run the deployment
6 Close the task by hand afterward
Repeat for
every deployment
The Solution
Make the change task disappear into the pipeline
I owned the architecture and implementation end to end, under one
constraint: zero disruption. Teams keep shipping exactly as before.
One manual push kicks it off, and everything after runs
automatically inside the pipeline.
Developer pushes a deploymentthe only manual step
Automated pipeline
GitLab Pipelineruns as usual
Open Task modulevalidates and opens the change task
ServiceNow APIchange task created
Deploymentapplication ships
Close Task moduleupdates and closes on success
Completed changeauditable, hands-off
Before & After
From a checklist to a single deploy
Engineer · before
Create the change task
Paste in the build details
Update the task mid-deploy
Close the task by hand
Manual, on every single deploy
Pipeline · after
Deploy exactly as before
automation handles everything else
Hands-off, zero manual steps
Same deploy, about 55% less cycle time and
zero manual change-management work.
System Architecture
Two modules in one image, run as pipeline jobs
Two modules in one Docker image, run as GitLab CI jobs. Both validate
their input and pull credentials before calling the ServiceNow API.
Open Task
Validates the user and the change-task content
Reuses an existing open task, or creates a new one
Writes it through the ServiceNow API
Close Task
Updates the task as the deployment runs
Closes it once the deploy succeeds
Writes it through the ServiceNow API
Both modules pull ServiceNow credentials from HashiVault at
runtime, so secrets never live in the pipeline or the image. The
image and the apps' build metadata come from Artifactory.
Validation by Design
Catch bad input before it becomes a change task
The Open Task module validates the user and the change-task content
before anything reaches ServiceNow, so bad input is caught in the
pipeline instead of becoming a broken change task.
Applicationpayments-api
Environmentproduction
Versionv2.14.0
Start time2025-04-12 21:00
Technical Decisions
Choices that shaped the system
Language
Built in Go
Go was the enterprise standard, which kept the tool maintainable
and set it up for broader adoption across teams down the line.
Architecture
Split into Open and Close modules
This mirrors how deployments behave. If a deploy fails, you don't
want a pile of meaningless tasks, so close only runs on success.
Reliability
Validate before creating tasks
Validating deployment input at the pipeline stage stops invalid
change tasks from ever being created, removing a whole class of
manual cleanup.
Security
Runtime secrets via HashiVault
ServiceNow credentials are pulled from HashiVault at runtime, so
they never live in the pipeline configuration or the Docker
image.
Adoption
A reusable image, dropped into existing pipelines
One Docker image dropped into a pipeline meant teams could adopt
it with no onboarding and no change to how they deploy.
Impact
What it changed
Reduced deployment release cycle time by about 55%
Eliminated repetitive manual ServiceNow work
Reduced human error through automated validation
Standardized change management across deployments
Improved deployment consistency
Approved by the governance board
Integrated into existing deployment workflows
Lessons Learned
What I took away
Design for adoption, not just functionality
The best automation is the kind users barely notice. Integrating
seamlessly into existing deployment workflows made adoption
straightforward across teams.
Validate early to reduce downstream risk
Catching invalid inputs before creating change tasks eliminated
manual errors and improved the reliability of every deployment.
Build systems that standardize good practices
Automating repetitive processes did not just save time, it
ensured deployments followed a consistent, auditable workflow
every time.