GitLab for manufacturing and embedded software

Self-managed GitLab for manufacturers building embedded and industrial software, planned around isolated plant networks, toolchain runners, large binaries and supply chain evidence.

On this page

Why manufacturers self-host GitLab for embedded and industrial software

Manufacturers self-host GitLab because firmware, PLC logic and machine software are built with toolchains that must run close to the plant floor, and a plant network often cannot depend on a SaaS service being reachable. Self-managed GitLab keeps source control, code review and CI/CD pipelines in infrastructure your team controls, and GitLab documents running self-managed instances in offline, air-gapped environments. For an engineering or IT lead, the decision starts with where the code, the build artifacts and the runners must sit, not with which vendor has the nicest interface. Compared with a SaaS or generic web-app setup, the work shifts toward the network and the build machines. Your team must decide which network zone hosts the GitLab instance, how engineers reach it from the plant and what happens to pipelines when the link to the corporate network is down. Runners become a central design point: GitLab Runner supports shell, Docker and autoscaling executors across clouds and hypervisors, so you choose the executor that matches each toolchain. Confirm with your toolchain vendors whether their compilers, IDE plugins and hardware-in-the-loop test rigs run on the operating systems your runners will use, since Windows and macOS build agents are a separate sizing and maintenance question. The practical starting point is an inventory: list every repository type, every build host and every external service a pipeline calls, then mark which ones may sit only inside the plant. That list decides whether the instance is fully offline, whether a package mirror is needed and which runner pools live on the shop floor versus in the data center. Ask any implementation partner to show how the design handles a loss of the upstream network before you commit to a topology.

Which industry requirements shape a manufacturing GitLab build

This table maps the standards and regulations that shape manufacturing software delivery to concrete GitLab decisions: repository access, runner placement, logging and vendor evidence. Read each row as a question to answer before the build starts, and note where the obligation falls on an asset owner versus a product supplier, since that changes which evidence you need.

RequirementWhat it asks forGitLab build impact
ISA/IEC 62443 seriesSecurity requirements and processes for industrial automation and control systems, organized into general, policies and procedures, system and component groupsUse the four groups as the organizing frame for which parts of the GitLab estate touch plant systems and which do not
ANSI/ISA-62443-2-1-2024 (asset owners)Security program requirements for operators of industrial automation and control systemsDocument who may change OT-facing code, how changes are approved and where that approval is recorded in GitLab
ANSI/ISA-62443-3-2-2020Security risk assessment for system design, zones and conduitsMap GitLab runners, registries and artifact stores to zones so that build traffic crosses only documented conduits
ISA-62443-3-3-2013System security requirements and security levelsSet the target security level for the build zone, then confirm runner isolation, access control and logging meet it
ANSI/ISA-62443-4-1-2018 (product suppliers)Secure product development lifecycle requirements for suppliers of industrial productsIf you ship controller firmware or software, GitLab pipelines become lifecycle evidence: security reviews, threat models and release gates
ANSI/ISA-62443-4-2-2018 (product suppliers)Technical security requirements for IACS componentsTie component-level test results and build provenance from CI to the component version you deliver
NIST SP 800-82 Rev. 3 (September 2023)Operational technology security guidance covering SCADA, DCS, PLCs and building systems, with OT performance and safety constraintsTreat plant-floor engineering workstations as sensitive endpoints, and keep any runner that touches them out of the corporate network
NIS2 Annex II, manufacturing (NACE Rev. 2 divisions 26 to 30, medical devices)Manufacturing is a critical sector for in-scope entities under Directive (EU) 2022/2555Confirm whether your entity is in scope, then ensure GitLab audit logs can support incident timelines you must meet
NIS2 reporting timelines (Article 23(4))Early warning within 24 hours, incident notification within 72 hours, final report within one monthPlan log retention, access logs and pipeline history so responders can reconstruct a change within these windows
NIS2 fines (Article 34(5)) for important entitiesFines of at least EUR 7 million or 1.4% of worldwide turnoverUse this as the business case for logging and access reviews, not as a sizing input for the GitLab build
CRA Article 14 (reporting)Manufacturers report actively exploited vulnerabilities and severe incidents, applying from 11 September 2026 per Article 71(2)Keep vulnerability intake, SBOM generation and triage records in GitLab so you can produce dated reports
CRA Article 64 (fines)Maximum fines of EUR 15 million or 2.5% of worldwide annual turnover for breaches of essential requirements and Articles 13 and 14Confirm SBOM and vulnerability handling evidence with your legal team before relying on GitLab scanners alone
Machinery Regulation 2023/1230, Annex III 1.1.9Machinery must be protected so connecting another or remote device does not create a hazardous situation (applies from 14 January 2027)Restrict remote runners and pipeline-driven deployments to machines that cannot introduce hazardous changes without review

How to place GitLab relative to plant and OT networks

Many manufacturers host GitLab in the corporate IT zone and keep plant networks out of its direct reach. Developers and plant-facing build servers connect to GitLab through defined paths, while the instance itself stays on the same network segments as other enterprise services. This model is the simplest to operate because it can use the same patching, identity and backup processes the IT team already runs, and it keeps the online package and container update paths available.

  • Connectivity: Plant runners reach GitLab only through approved firewall rules, proxies or a demilitarized zone, with ports and destinations documented per site.
  • Updates: Upgrades can pull from standard sources, but each upgrade still has to follow the required upgrade stops.
  • Identity: Plant users authenticate through the corporate directory, so account lifecycle follows HR changes.
  • Exposure: Any open path from the plant to the corporate zone becomes part of the attack surface that OT security teams must review.
  • Recovery: Backups stay in the corporate data center, which simplifies restore but depends on that zone staying available during a plant incident.

Confirm with the OT security team which zone model your site standards accept, and whether firewall exceptions for runner traffic are permitted under them.

Which GitLab modules and settings matter for manufacturers

Manufacturers running self-managed GitLab for embedded and industrial software face the same six decisions in different forms: how runners reach vendor toolchains, how large binaries are stored, how plant and engineering identities are governed, how the instance recovers, how it is hardened, and how evidence is produced without internet access. Each card names the component, the risk it carries and what to confirm before the design is fixed.

Windows and macOS runners

Many embedded toolchains, IDE plugins and signing utilities only run on Windows or macOS, so GitLab Runner must execute jobs on those hosts as well as Linux. Shell executors give direct access to the installed toolchain but share state between jobs, while autoscaling executors on cloud VMs or hypervisors start clean machines per job. Keep Runner major and minor versions aligned with the GitLab instance, and confirm with each toolchain vendor which OS versions and license servers its build hosts need.

Git LFS and repository sizing

Firmware images, CAD assemblies, FPGA bitstreams and test datasets make repositories large and slow to clone. Plan Git LFS for binary artifacts, decide which paths stay out of Git entirely, and size Gitaly storage and backup windows around the real repository footprint. Ask engineering leads to measure current binary volume per product line before choosing a storage backend, because growth in these files often outpaces source code growth.

LDAP or SAML with group sync

Plant operators, controls engineers and contractors often sit in directories that differ from corporate identity. Connect GitLab to the directory that holds engineering and plant groups, map those groups to GitLab roles, and use SCIM provisioning where the identity provider supports it so access ends when a contractor leaves a site. Confirm which group attributes your directory exposes and who approves changes to the mapping.

Geo for disaster recovery

Geo provides a warm-standby secondary site that is continuously synchronized, which suits manufacturers whose firmware release and plant-floor deployment depend on source access. It is available in the Premium and Ultimate tiers for self-managed GitLab, so the tier decision comes before the topology. Confirm the secondary site's network path to the plants, how failover is tested, and whether the secondary sits in a region with separate power and connectivity.

Hardening gitlab.rb and CI/CD

Settings in gitlab.rb, sign-up and visibility controls, outbound request limits and runner isolation determine how far a compromised build can reach into engineering networks. Apply the hardening guidance gradually and record each change in configuration management, since the guidance is still evolving. Give build jobs that touch plant-floor test rigs their own runners and environments, and limit which projects may use shared runners.

Offline scanners and SBOM evidence

Plant networks often cannot reach public update services, so scanners, advisory databases and dependency data must be staged inside the enclave. Security scanning, software supply chain features and vulnerability management require the Ultimate tier, so ask whether a Premium instance with external tooling meets the requirement. Generated SBOMs and build provenance give customers and certification bodies evidence for IEC 62443 and Cyber Resilience Act reviews, but confirm the format and retention each reviewer expects.

How a manufacturing GitLab rollout typically runs

The sequence moves from mapping which systems sit in which network zones to a handover that gives the operations team a backup-tested instance and a planned upgrade calendar. Each phase closes with a written output that the next phase depends on.

  1. Map zones and scope against the standards

    The rollout starts by listing which plants, product lines and engineering groups will use GitLab, and which of their systems sit in IT, DMZ or OT network zones. DeployOpen works with your OT security owner to match each zone to the ISA/IEC 62443 requirements that apply to the asset owner, and to note where NIS2 or Machinery Regulation obligations touch the software. The output is a signed zone diagram, a data flow list for code and artifacts crossing zone boundaries, and a decision on whether any runner or instance stays fully offline. The step is done when the security owner and plant engineering both approve the diagram.

  2. Design identity and runner placement

    Next, the team decides how users sign in, which groups map to engineering roles, and where runners will live for each toolchain. Windows and macOS build machines for vendor compilers and simulators are usually placed in the zone that holds those tools, and their registration path is planned before any project depends on them. Your identity team confirms the directory source and provisioning method for GitLab Self-Managed, and the runner design records executor types and network paths. The output is an access matrix and a runner placement table, approved before the pilot starts.

  3. Run a pilot with one product line

    A single product line with a bounded set of repositories is moved first, including its pipelines, merge request approvals and artifact retention settings. Engineers from that line and the platform team run real firmware or controller builds on the planned runners, and they record build times, failed jobs and toolchain licensing problems. The pilot shows whether large binaries, generated files and vendor SDKs need Git LFS, artifact expiry or separate storage. The step closes when the pilot team signs off on its workflow and the open issues list is assigned.

  4. Migrate history from existing hosts

    History from older hosts is moved in batches, starting with the repositories the pilot already proved. GitLab supports imports from GitHub, Bitbucket Server, Gitea, other GitLab instances and Git repositories by URL or manifest, and it can import Jira issues. Subversion is not covered by the built-in importers, so those repositories need external conversion tools, and the conversion output should be checked against tags, branches and author mappings. The output is a migration log per repository listing the source commit range, the converted result and any history that was intentionally left behind.

  5. Harden the instance and the runners

    Hardening applies the settings in GitLab's hardening guidance to the instance, its CI/CD configuration and the operating system, with changes rolled out in stages rather than all at once. The team reviews sign-up and visibility settings, runner isolation for jobs that touch OT-adjacent networks, secrets handling, and outbound request restrictions. Each change is recorded against the zone decision from the first phase. The output is a hardening record that names each setting, its value and the owner who accepted it.

  6. Test backup and restore end to end

    A backup is only accepted after a restore has been performed on separate infrastructure and the restored instance has been checked. The team runs the GitLab backup task, confirms that secrets and configuration files are captured as well as repository data, and restores into an isolated environment. They then verify that a sample of repositories, pipelines and runner registrations work as expected. The output is a restore test report with the time taken and any manual steps, which becomes the basis of the recovery runbook.

  7. Hand over with the upgrade calendar

    The final phase transfers operation to your platform or IT team with a written runbook, an upgrade calendar and a monitoring plan. The calendar lists the required upgrade stops, which are versions x.2, x.5, x.8 and x.11 since GitLab 17.5, and it shows the monthly minor release and the twice-monthly patch releases. Bug fixes are backported only to the current stable release, while security fixes also reach the previous two monthly releases, so the team must plan to stay current. The output is a signed handover pack, a named owner for each upgrade window and a staging environment to test each upgrade before it reaches production.

Compliance evidence manufacturers need from their GitLab

Manufacturers face several overlapping obligations, and most of them ask the same question: can you show what changed, who approved it, what was in the build and which vulnerabilities were known at the time. Self-managed GitLab can hold much of that record, but each regulation asks for different evidence and on different clocks. DeployOpen prepares the systems, controls and evidence; independent auditors and regulators decide whether it is sufficient.

Change records and approvals for incident timing

NIS2 requires in-scope entities to report significant incidents with an early warning within 24 hours, a notification within 72 hours and a final report within one month. To answer quickly, responders need to know which merge request, pipeline and deployment last touched an affected component. Keep merge request approvals, protected branch rules and deployment records in GitLab, and test whether you can pull that history for a given release within minutes, not days.

SBOMs and build provenance for shipped products

The Cyber Resilience Act applies to products with digital elements from 11 December 2027, and manufacturers' Article 14 duties to report actively exploited vulnerabilities and severe incidents have applied since 11 September 2026. Reporting a vulnerability you cannot locate in your products is hard. Generate software bills of materials and record build provenance in each pipeline, and confirm with your security team which components and versions each shipped firmware image contains.

Vulnerability data tied to each release

Vulnerability findings are only useful for regulators and customers when they are linked to the exact version that carried them and to the fix that closed them. Run GitLab's security scanners in the pipeline, keep findings with their release tags, and decide in advance who triages a vulnerability and how long a decision may take. Confirm with your tier which scanners and vulnerability management features are included, since the pricing page places several of them in Ultimate.

CRA penalty exposure for essential requirements

CRA Article 64 sets maximum fines of EUR 15 million or 2.5% of worldwide annual turnover, whichever is higher, for breaches of the Annex I essential requirements and Articles 13 and 14. Those fines make the Annex I controls and the reporting duties a board-level concern. Ask your compliance lead to map each essential requirement to a GitLab control, such as protected branches, signed tags or scanner gates, and keep that mapping under change control.

CMMC scoping only where defense work applies

CMMC under 32 CFR Part 170 applies to defense contractors, not to manufacturers as a class. If your plant builds parts or software under a defense contract that handles federal contract information or controlled unclassified information, the GitLab instance, runners and repositories holding that data may fall inside the assessment boundary. Confirm with your contracting officer which level applies, and note that the Department of War has suspended CMMC Phase II requirements.

21 CFR Part 11 controls for regulated device software

Device makers whose embedded software or quality records fall under 21 CFR Part 11 must keep electronic records trustworthy and attributable. For GitLab, that means controlled approvals with re-authentication, audit events that persist, restricted administrator actions and retained records that cannot be quietly edited. Test these controls against your quality procedures before using GitLab as a system of record, and decide with your quality team which records remain in a validated system instead.

What buyers ask before a manufacturing GitLab project

What drives the cost of a self-managed GitLab project for manufacturing?

The cost follows the written scope, and the main drivers are the GitLab tier, the number of users, the size of the runner fleet, the number of plant zones that need their own connectivity design, and the volume of large binaries the repositories will hold. GitLab Free costs 0 dollars, Premium costs 29 US dollars per user per month billed annually according to the GitLab pricing page, and Ultimate is custom priced. Licensing is a recurring cost on top of the one-time build work, which covers installation, network design, runner setup, identity integration and handover. Ask any partner to separate one-time services from recurring licenses, retainers and hardware or cloud costs in the quote.

How long does a GitLab rollout take for a plant engineering team?

Duration depends on scope rather than on GitLab itself. A single instance with a few hundred engineers, one isolated network zone and a basic runner set takes much less time than a multi-site deployment with high availability, offline security scanning, Windows and macOS runners and migration of years of history. The longest steps are usually approvals for network paths, identity integration and validating toolchain builds on each runner type. Any timeline should come from the written scope, with the milestones, dependencies and client responsibilities listed so you can check progress against them.

What must our organization provide before implementation starts?

Most delays come from inputs the client controls. Plan to provide:

  • Written approval for firewall rules and data flows between the corporate network, the plant network and any external package or update sources
  • Named owners for identity, including the people who manage the directory, group membership and multi-factor policy
  • Access to the build machines and toolchain installers, plus confirmation of which vendor licenses cover use on runners
  • Decisions on where the instance runs, who holds backup media and who receives support escalations

These inputs should be listed in the statement of work so responsibility is clear from the start.

Can our internal team deploy and run GitLab without a partner?

Often yes, if the team already runs Linux servers, databases and a CI system, and has time to build runner images for Windows and macOS toolchains. The skills most often missing are offline installation and update handling, runner isolation for build tools that need hardware access, and recovery testing. Consider a partner when you need to meet a tight plant schedule, want an independent review of network segmentation, or lack staff to cover upgrades and backups. Compare the internal effort, including on-call and training time, against a fixed-scope quote.

How are GitLab upgrades and required upgrade stops handled on an isolated network?

GitLab requires upgrades to pass through required upgrade stops. According to the GitLab upgrade paths documentation, since GitLab 17.5 these fall at versions x.2, x.5, x.8 and x.11, for example 18.2, 18.5, 18.8, 18.11 and 19.2, 19.5, 19.8 and 19.11. On an offline plant network, each upgrade needs a staged package set, a tested rollback point and a maintenance window agreed with production. The GitLab maintenance policy says bug fixes are backported only to the current stable release, while security fixes also reach the previous two monthly releases, so plan for regular updates rather than long gaps. Confirm the upgrade calendar and who approves each change.

Which runner and network risks should we check before signing a quote?

Ask how the plan handles runners that build embedded firmware, run vendor toolchains or flash hardware. Check whether Windows and macOS runners are in scope, how they are isolated from plant control networks, and how their tool versions are pinned. GitLab Runner is distributed under the MIT license and supports shell, Docker and autoscaling executors, and the documentation advises keeping Runner and GitLab versions aligned. Also ask how the design relates to ISA/IEC 62443 zone and conduit thinking, and which asset owner signs off on any connection between an OT zone and the instance.

What should we ask a partner to put in a written quote?

Ask for a fixed scope that lists each deliverable, the environments covered, the number of users and runner types, the migration sources and volumes, and the acceptance tests. Request the assumptions about network access, identity, toolchain licenses and staffing, and a clear statement of what is one-time and what recurs. Ask how backup, restore and upgrade work is documented and handed over, and who is responsible for each step after go-live. Confirm the tier basis for any feature you need, such as security scanning or compliance features, because those are tied to tier choice on the GitLab pricing page.

What changes for engineering and OT teams after go-live

Go-live moves work from a vendor or a one-time project into a recurring operating cycle, and the first thing to settle is who owns each runner. Runners that execute firmware builds, toolchain jobs on Windows or macOS hosts, and any job that touches a plant-facing network must be upgraded in step with the GitLab instance. The GitLab Runner documentation advises keeping Runner major and minor versions aligned with GitLab, so the upgrade calendar for the instance and for the runner fleet should be one calendar. Engineering owns the instance and the pipeline definitions, while OT or controls engineering should own the runners that sit on plant segments, with a named person who approves each runner change and a rollback plan for a failed toolchain update.

Backup and restore responsibilities also split along the same line. The instance backup covers repositories and metadata, but a restore is only useful if someone has tested it against the configuration files, secrets and object storage the instance depends on, which the GitLab backup and restore documentation describes as separate items to capture. For an air-gapped plant network, confirm where backup media is stored, who can read it, and how a restored instance would be brought back on an isolated segment without pulling packages from the internet. Ask the implementation partner to document a restore drill that includes a firmware repository and its tagged release artifacts, since those are the assets a plant cannot rebuild quickly. Release trains change firmware pipelines in a more specific way. GitLab ships a minor release monthly and a major release yearly, and it requires upgrades to pass through published upgrade stops, so a pipeline that depends on a particular CI keyword or runner behavior can break during an upgrade window that a controls team did not plan for. Treat each upgrade as a change to the build toolchain: pin the runner image and compiler versions, run the firmware pipeline on a staging instance first, and record the result as change evidence. Monitoring should flag runners that stop checking in, since a silent plant-facing runner can leave a release blocked without anyone noticing until a shipment slips.

What to ask a partner before you sign a statement of work

This sequence turns a vague request for help into a written scope that names the standards, platforms, update path and owners before any money is committed. It ends with acceptance criteria both sides can test against.

  1. Confirm the standards and zones in scope

    Ask the partner to list which frameworks shape the work, such as the ISA/IEC 62443 series for industrial automation, NIS2 for in-scope EU entities, or the Cyber Resilience Act for products you ship with digital elements. Ask them to map each standard to a zone: corporate network, plant network, OT code repositories and any boundary between them. Done when you hold a written zone diagram with each GitLab component, runner and data flow placed in a zone and the standards that apply to it named. Confirm the partner does not issue certifications or audit reports, so your assessor remains a separate party.

  2. Define runner platforms and toolchain licenses

    List every build target your engineers need, including Windows and macOS toolchains, compilers, vendor SDKs and test rigs that may require a license server. Ask the partner which GitLab Runner executors they will use for each platform and which need a dedicated host outside the GitLab application server. Confirm who buys and holds each toolchain license, whether license servers must be reachable from runners, and whether any license terms restrict offline or shared use. Done when every toolchain has a named owner, a license source and a runner host in the written scope.

  3. Agree the offline update path

    Plant networks often cannot reach the internet, so ask how GitLab packages, runner binaries, container images and security scanner data will reach the instance. Ask the partner to describe the transfer media, the approval step and the staging instance used to test each release before production. Require a written upgrade plan that follows the required upgrade stops in GitLab's upgrade paths documentation and the maintenance policy's list of supported releases. Done when you have a dated update calendar owned by your team, a rollback decision point and a staging environment that mirrors production.

  4. Set the backup and Geo plan

    Ask what is backed up, how often, where copies are stored and whether backups are restored on a schedule to prove they work. Include the GitLab secrets file and object storage in the scope, since a backup without them may not restore cleanly. Ask whether a Geo secondary site is in scope for disaster recovery and, if so, where it sits relative to the plant. The GitLab Geo documentation covers this option for Premium and Ultimate. Done when a restore test has a written procedure, an owner and a recorded result that you can review.

  5. Specify the evidence outputs

    Decide which records you need to show an auditor, customer or regulator: merge request approvals, protected branch settings, pipeline logs, signed build artifacts, SBOMs and vulnerability reports for embedded firmware. Ask the partner to state which items GitLab produces natively, which need a scanner tier your edition may not include, and which must be exported and archived outside GitLab. Check the tier mapping against GitLab's pricing page before assuming a feature is included. Done when a sample evidence pack exists for one release and you can trace each item to a control.

  6. Assign an owner to each control

    Build a table with one row per control, such as access reviews, runner patching, backup restores, license renewals and vulnerability triage. For each row, name the party who performs it during the project, the party who performs it after handover and the person who approves exceptions. Ask the partner to say which controls they operate under a retainer and which transfer to your staff at go-live. Done when no control in the table lacks an owner and the handover date for each is written into the statement of work.

  7. Write acceptance criteria before signing

    Convert every earlier decision into a testable criterion, such as a runner building the firmware image on a clean host, a restore completing into a staging instance, or an evidence export matching the agreed list. Ask for each criterion to name the test, the expected result and the person who signs it off. Confirm how defects found during acceptance are handled and whether any fixes fall within the fixed scope. Done when the statement of work attaches these criteria as an appendix and both parties have agreed them in writing.

How DeployOpen works on this

DeployOpen plans, implements, hardens, backs up, documents and supports self-hosted GitLab inside your own infrastructure, including plant-adjacent and offline networks where your team needs it. For manufacturers, the work starts with the network zones, toolchains and evidence your engineering and quality teams actually depend on.

How we scope

  • Map which repositories, build toolchains and runner platforms (Windows, macOS, Linux) the written scope covers
  • Confirm network zones, offline or air-gapped constraints and where the GitLab instance may sit relative to plant networks
  • Agree in writing which supply chain evidence, backup targets and integrations are in scope before work starts

How we build

  • Install the chosen GitLab method, configure runners for each toolchain and size storage for large binary repositories
  • Test restores from backup, upgrade stops and runner recovery in a staging environment before production cutover
  • Harden the instance and CI/CD settings in gradual steps, recording each configuration decision and its reason

How we hand over

  • Deliver runbooks for upgrades, runner fleet changes, backup and restore, and offline update procedures
  • Document the architecture, network paths, identity integration and access model in a form your engineers can maintain
  • Walk your platform, IT/OT and quality teams through operations and evidence collection before handover closes

How we support

  • Offer ongoing support, upgrades and testing as a retainer, scoped separately from the initial fixed-scope build
  • Plan upgrade windows around required upgrade stops and monthly and patch release cycles agreed with your team
  • Ask any partner to confirm response expectations, coverage hours and escalation paths in the written support terms

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.