Back to case studies
Editorial diagram showing GitLab-governed infrastructure operations with Ansible automation and Semaphore execution across Linux and Windows systems
Implementation StoryRepresentative implementation workSovereignty

Standardizing Infrastructure Operations Across Mixed Linux and Windows Environments

An anonymized implementation story about bringing recurring Linux and Windows administration under Git-governed control with GitLab, GitLab CI, Ansible, and Semaphore.

6 min readSandro Maier

Confidentiality note

This page combines related implementation work completed in a previous employment context. Specific environment details and organizational references were adapted to protect confidentiality while preserving the operating model, governance decisions, and technical shape of the work.

Relevant service pages

Operations / Sovereignty

Stack used
GitLabGitLab CIAnsibleSemaphoreLinuxWindows ServerInventory as codeOperations standardization

What this enabled

  • More consistent execution of recurring administration across Linux and Windows
  • Clearer review and audit trails for infrastructure changes
  • Reduced drift and lower dependence on individual operator memory
  • Better day-to-day control over scheduling, execution, and repeatability
Anonymized project context

Reliable infrastructure operations start with governance, not with more scripts

The environment included recurring administration work across Linux and Windows systems. Updates, configuration changes, patching tasks, and software lifecycle work were being handled too manually and too inconsistently. The immediate need was not a platform rewrite, but a controlled operating model for routine infrastructure work.

Executive Summary

This implementation centered on one practical goal: make recurring infrastructure work more controlled, more reviewable, and less dependent on individual operator habits.

GitLab held the authoritative definitions for inventories, roles, and operational changes. GitLab CI checked structure and quality before jobs reached execution. Ansible expressed the recurring work as reviewed automation. Semaphore provided the operator-facing UI for controlled runs and scheduling. That combination created a disciplined operating model across Linux and Windows without pretending both environments behave the same way.

Client Context

This kind of work appears in organizations where the infrastructure is already important enough to require discipline, but the operating model has not caught up yet.

The estate includes a mix of Linux and Windows systems. Routine tasks such as patching, baseline configuration changes, package management, and corrective administration all happen regularly. The individual tasks are normal. The problem is that they are too often executed from memory, from ticket comments, or from local habits that differ by operator.

That makes the environment look manageable from the outside while staying fragile underneath.

The Real Problem

The real problem was not the lack of automation scripts. It was the lack of a governed model for recurring infrastructure work.

If inventories are inconsistent, if variables are loosely structured, and if execution happens outside a reviewable path, then even good playbooks will not produce reliable operations. Drift returns quickly. Audit evidence becomes weak. The environment stays dependent on the people who know its exceptions by heart.

That is why this work was approached as a governance and delivery-quality problem rather than as "just automate it with Ansible."

Why GitLab Became the Control Point

GitLab was the right center of gravity because the problem was not only execution. It was change intent, review, history, and control.

Inventories, role structure, and playbooks belonged in Git. Merge requests created a visible review path. Approvals established accountability. Commit history replaced undocumented local variants. GitLab CI made it possible to reject broken inventory structure or poor automation hygiene before anything reached production systems.

That mattered more than having a UI alone. A UI is useful for operators. It should not become the place where infrastructure truth quietly diverges from version control.

Target Operating Model

The target model was straightforward.

GitLab acted as the source of truth for inventories and operational definitions. GitLab CI enforced quality gates. Ansible expressed recurring administration as reviewed automation. Semaphore served as the controlled execution surface for scheduled runs and operator-triggered tasks.

This split of responsibilities kept the model clean:

  • GitLab owned change intent.
  • GitLab CI validated structure before execution.
  • Ansible defined repeatable operational workflows.
  • Semaphore handled execution and scheduling.
Abstract editorial diagram of Git-governed infrastructure operations across Linux and Windows systems
GitLab-governed infrastructure operations across Linux and Windows

Inventory and Role Governance

Inventory quality mattered as much as playbook quality.

In mixed environments, weak inventory structure creates failure long before the automation engine is the problem. Grouping, variable boundaries, naming conventions, and ownership need to be clear enough that operators can understand what a change actually targets and why.

That is why this style of implementation treated inventories and role structure as first-class governed assets. The goal was not to collect host data in Git for its own sake. The goal was to make infrastructure intent reviewable and maintainable over time.

GitLab CI for Quality Gates

GitLab CI added discipline before execution.

Pipelines were used to check inventory structure, lint automation, and validate that operational definitions still matched expected conventions. The exact checks can vary by environment, but the principle stays the same: execution should not be the first moment a problem is discovered.

This is where the operating model becomes noticeably stronger than manual administration backed only by ticket notes. Merge requests plus CI create better evidence, better review quality, and fewer accidental variations.

Role of Semaphore

Semaphore was the practical UI layer for day-to-day operations.

That mattered because reviewed automation still needs a usable execution surface. Operators need a place for controlled launches, recurring schedules, parameterized jobs, and visible run history without pushing everyone back toward ad hoc shell access or private notes.

Semaphore fit that need well. It provided a controlled execution surface while still allowing GitLab to remain authoritative. In other words: operators could use a proper UI without moving source-of-truth decisions into the UI.

Optional AWX or Tower Extension

For teams that need a heavier enterprise control surface, AWX or Ansible Tower can be a reasonable optional addition.

The important architectural point is that this does not change the source-of-truth model. Heavier workflow management, RBAC, or larger-scale approval structures may justify that layer in some organizations, but it is not required to make the core operating model credible.

Linux and Windows Reality

One reason this work needs senior operational discipline is that Linux and Windows do not become identical just because Ansible can target both.

Access patterns differ. SSH and WinRM behave differently. Privilege handling differs. Patching semantics differ. Module behavior differs. A good operating model accepts those differences while still enforcing one review and governance path.

That is the practical value here: one controlled model across mixed environments, without flattening real platform differences into fake symmetry.

Delivery Approach

The rollout path was intentionally pragmatic.

It started by cleaning up inventory structure and role boundaries. From there, recurring tasks were codified as reviewed automation. CI gates were added so that structural problems were caught early. Semaphore was then connected as the execution layer for operators and schedules, reducing the need for improvised manual paths.

The result was not "full automation." The result was constrained variance, better repeatability, and clearer operational accountability.

Outcome

The outcome was a more reliable operating model for infrastructure work.

Routine changes became easier to execute consistently. Drift was reduced because inventories and automation definitions had a governed review path. Operational knowledge became less dependent on individual memory. Execution became easier to schedule and audit without turning the UI layer into the source of truth.

That is the proof point: not that every task became automatic, but that recurring infrastructure work became more controlled and less person-dependent.

What This Article Is Not

This article is not about Kubernetes delivery, Helm-based release management, or cluster GitOps.

It is about standardizing recurring Linux and Windows operations with Git-governed inventories, reviewed automation, and a controlled execution surface.

CTA

If your infrastructure still depends on experienced people remembering how to run recurring changes safely, PLANFOLD's operations service is designed to bring that work under a more disciplined operating model.

Implementation highlights

  • GitLab as the source of truth for inventories, playbooks, and role structure
  • GitLab CI checks for inventory quality, structure, and automation hygiene
  • Ansible automation for Linux and Windows administration
  • Semaphore for controlled execution, scheduling, and operator usability

Why this should build trust

  • The implementation is centered on governance and operating quality, not tooling for its own sake
  • It reflects real mixed-environment operational work rather than an idealized greenfield setup
  • It separates source control, validation, secrets handling, and execution responsibility clearly

Why this matters commercially

This is relevant when an organization does not need a new platform first, but does need a more disciplined way to run recurring infrastructure work. PLANFOLD is built for exactly that kind of work: reducing improvised administration, improving reviewability, and making infrastructure operations less dependent on undocumented habits.

Keep exploring

Related case studies