Containers & Developers

CI/CD Pipeline

Push your code and ship the exact release you tested

Every push is built in minutes and comes up in a test environment, and production receives the very image you tried, never a rebuilt copy. If a release goes wrong, image and configuration roll back together.

Your git repocode and testsYour project's own runner · run by NesnetBuildTestImagescannedTests failnothing is promotedPrivate registryscanning · cacheTest environmentvia GitOpsRelease teamverified by digestProductionRollbackimage and configuration togetherEvery change is a commitonly GitOps writes to the clusterpush

Why now

  • A release that behaves in test misbehaves in production, because production gets a build of its own. On this pipeline, production runs a digest-verified copy of the image you tested.
  • A Friday-evening release stopped orders, and finding the old configuration took an hour. The pipeline treats a failed release as a failure straight away and restores the previous image and configuration together.
  • Nobody can say who released what or when, because deployments are files copied to a server. Here every change is a commit, and release rights belong to a defined release team.
  • The operating system layer under your images has gone unpatched for months and the scanner is all red. The pipeline refreshes that layer every week without touching your application code.
  • A new developer joins the team and needs help from three people to ship a first change. On the pipeline a push is enough, and the application comes up in test at its own address.

What changes

TodayWith Nesnet
Production gets its own build, and bugs that never showed in test appear in production.Production runs a digest-verified copy of the tested image, so the only difference between environments is configuration.
After a bad release, someone digs up the old configuration by hand.The previous image and configuration are restored together, and production is confirmed to be answering again.
Who released what, and when, is anyone's guess.Every change is a commit and every release an append-only record, so you show the auditor your git history.
The OS layer under your images stays unpatched until someone remembers.A patched layer is slid under every image each week, with no work asked of developers.
A new project means a week of server and permission requests.The project is registered, its environments and runner are ready in minutes, and the first push lands in test.

From today to live: how it works

  1. 1

    Agreeing the scope

    Settle with Nesnet's team in one call which repositories join the pipeline, where the test and production environments live and who sits on the release team.

  2. 2

    Registering the project

    Nesnet registers the project on the platform, and its namespaces, quotas, network policies, registry area and runner are ready within minutes.

  3. 3

    First push

    A developer pushes to GitHub; the built image goes to the private registry and the application comes up in test at its own address.

  4. 4

    First release

    The release team promotes the version tried in test, and the same image is copied to production with its digest verified and goes live within minutes.

  5. 5

    Current every week

    The operating system layer is refreshed every week and dependency updates arrive as pull requests. Your team only approves major version moves.

What you get

  • Every push lands in test

    Every git push is built and deployed to the test environment, and the application's address responds within a few minutes. Developers see their change running without asking anyone to deploy it or waiting on a ticket.

  • The image you tested is the one that ships

    The release in production is a byte-for-byte copy of the test image, made by its digest into the production area. The digest is checked again after the copy, and an image that fails the check never reaches production while the running release stays in place.

  • Only the release team ships

    The right to promote belongs to a release team defined for the project, while other developers deploy to test as often as they like. If that rule is ever removed, the pipeline refuses the release, so permissions never widen quietly.

  • One move back from a bad release

    A crashing pod, a missing image or broken configuration counts as a failure straight away. The previous image and configuration are restored together and production is checked for service again, so a half-finished rollback never happens.

  • Patches arrive without code changes

    Every week a patched operating system layer is slid under all images without touching the application layer. No rebuild, pull request or developer time is needed, and image bases stay current while the team works on features.

  • Builds without a Dockerfile

    The pipeline recognises the language and framework from the files in your repository and builds the image from source itself, so no Dockerfile is required. For special needs you can still build from your own Dockerfile, with the base image taken from the platform registry.

  • Your application in one file

    Name, port, size, health check, environment variables and dependencies are written in one short file. You never write a Kubernetes manifest; the pipeline generates manifests from that file with mandatory rules such as resource limits and disruption budgets.

  • A database in one line

    Add a database dependency to the application file and you get a single copy in test and a redundant three-copy database in production. The connection address reaches the container as an environment variable, with nothing extra to order or wire up.

  • A build environment for every project

    Each project builds on its own runner, in its own namespace. A project's build can write only to its own image area, and a tool installed or a file left behind for one client project never carries over into another's build.

  • Scanned images that never run as root

    Images produced by the pipeline are scanned for vulnerabilities in Nesnet's private registry, stored with a software bill of materials (SBOM) and run as a non-root user. An image from outside the platform registry, or one that runs as root, is not admitted to the cluster.

  • Dependencies that update themselves

    An update bot opens pull requests when it finds newer chart, image and workflow versions. Patch and minor updates merge automatically, major changes wait for a person, and every version change shows up in commit history.

  • Secrets even developers never see

    Passwords and API keys never sit in the repository as plain text; they are kept encrypted or in a separate secret store. The application file names the secret only, and its value reaches the container at run time without ever entering git history.

  • Your own domain with automatic HTTPS

    Point your own domain at the application with a CNAME record, and its TLS certificate is issued automatically and renewed before it expires. Nobody needs a calendar reminder or a manual upload to keep it valid.

  • Applications talk only to whom they may

    Declare in the application file which applications may call yours and which ones it calls. The pipeline turns that declaration into network and access policy, and hands over the called application's address as an environment variable.

  • Single sign-on in front of your app

    An application opened to internal users can optionally sit behind corporate authentication. Users sign in with their Identity and SSO account, so you never write a login screen of your own.

  • A release record nobody can erase

    Every release is written to an append-only record per project: what shipped, when, and whether it was rolled back. In an audit or an incident review you never go looking for production history in a separate system.

  • Release and roll back from the console

    In the web console you promote a release, return to the previous one, and manage secrets, add-ons, domains and backups. Team members who avoid the command line work under the same rules and the same permissions.

  • Deploy through your AI agent

    Your coding agent connects to the pipeline over its MCP interface and does what a developer does, through the same GitOps paths. The agent cannot write to the cluster directly; it leaves every change as a commit under the release team's rule.

Why Nesnet

  • Production never gets a rebuild

    Promotion is not a build step: the image tried in test is copied byte for byte into the production area and the digest of the copy is verified. The second build behind most "it worked in test" surprises simply does not exist here.

  • In daily production on platforms Nesnet runs

    This pipeline is used in production every day on customer platforms that Nesnet builds and operates. It was installed while live products on those platforms kept running, and yours comes with the same components and the same rules.

  • Only GitOps writes to the cluster

    The GitOps tool is the only thing that deploys; no other tool or person writes to the cluster directly. Even the platform's own automation cannot change production, because every change arrives as a commit.

  • No inbound connections

    No webhook from the internet is opened into the cluster for deployments; the pipeline polls for changes from the inside. No shared secret is kept in your repository either, so there is no key to leak.

  • Your code and images stay in Türkiye

    Builds run on Nesnet's runners, images live in Nesnet's private registry and applications run on clusters in the Equinix Istanbul (Dudullu) and Türk Telekom Ankara data centres. Your built software never passes through a build service abroad.

  • One monthly e-Invoice

    The pipeline and the cluster resources it runs on arrive on one monthly invoice, as an e-Invoice. Chasing the payments of a foreign build service billed per minute leaves your finance team's agenda.

Example scenarios

  • A product team moves from manual deploys to commits

    Situation

    A product team ships new releases by connecting to a server and copying files. Nobody records who changed what, and finding the last working state after a failure takes hours.

    Outcome

    Developers push and the change appears in test, while the release team promotes to production. A bad release brings back the previous image and configuration together, and every step sits in git history.

  • A release that works in test and breaks in production

    Situation

    A software team runs a separate build for production. A bug that never showed in test appears only in production, because the two environments are not running the same image.

    Outcome

    On the pipeline, the production image is a digest-verified copy of the test image. The only difference between environments is configuration, and that is visible in git.

  • A software firm running projects for several clients

    Situation

    A software firm develops separate projects for different clients. On a shared build server, a tool installed for one project can break another project's build.

    Outcome

    Each project builds on its own runner in its own namespace and can write only to its own image area. Opening a project for a new client comes down to one registration step.

  • Images that keep failing the scan

    Situation

    Dozens of a company's services share the same old operating system base, and the scan report grows longer every month. Nobody has time to rebuild each service by hand.

    Outcome

    The weekly refresh slides a patched base under every image while the application layer stays the same. The report shrinks, and developers write not a single line of code for it.

  • An organisation preparing for an audit

    Situation

    An organisation's internal audit asks which changes reached production in the last six months and who approved them. Because deployments were manual, the answer is pieced together from emails.

    Outcome

    On the pipeline every release goes into an append-only record and every change into a commit. The auditor sees the release record and git history, and who approved is read from the release team list.

Who does what

NesnetYou
Installs and runs the runners, the private registry and GitOps delivery.You write your code and tests and push to your GitHub repository.
Operates the rules for promotion by digest, digest verification and joint rollback.You decide who sits on the release team.
Refreshes the operating system layer beneath your images every week.Your release team decides which version ships to production and when.
Gives every project its own runner, namespace, quota and network policy.You approve major-version dependency updates.
Issues domain certificates and renews them before they expire.You define dependencies, secret names and access permissions in your application file.

Who it is for

  • Software teams with no operations staff

    Software teams with no operations staff and no plans to hire them. A developer who has never used Kubernetes pushes code, and the application is running in test within minutes.

  • Teams that control who ships

    Teams that want everyone to deploy to test but only the release team to promote to production. The permission lives on one list rather than in every tool.

  • Multi-project software firms

    Software firms running several client projects at once. Each project builds on its own runner in its own namespace, and no project can touch another's build.

  • Teams deploying by hand

    Teams that ship today by copying files to a server or running kubectl by hand. Because every change is a commit, the audit trail builds itself.

  • Organisations facing audits

    Organisations that must show in writing who promoted what to production, and when. Every release lands in an append-only record, and every production change has a commit behind it.

May not be the right fit

Teams that keep source code outside GitHub and do not plan to move it, since the pipeline builds with GitHub workflows. Managed Kubernetes fits better there: deploy from your own build tooling using the cluster's kubeconfig.

Developers who want to publish a single web app without release teams or separate environments. Nesly Serverless Platform fits better there, as the self-service counterpart of the same push-to-live workflow.

Under the hood

Builds and tests run from your GitHub Actions workflows. The runners that execute them live inside a Kubernetes cluster on Nesnet, one set per project. Built images are pushed to Nesnet's own image registry and scanned for vulnerabilities. A GitOps controller is the only component that deploys to the clusters: the desired state lives in git and the cluster is brought into line with it. Updates for charts, images and Actions arrive as proposed pull requests, and certificates for your domains are issued and renewed automatically. On top of these tools Nesnet adds its own rules: production is promoted by digest copy and verified, only an authorised release team can ship, a failed release rolls back image and configuration together, and the operating system layer is refreshed every week. The pipeline runs on Managed Kubernetes clusters in the Nesnet cloud.

Building blocks

GitHub Actions workflows
runs your builds and tests; the workflow file stays in your repository
Per-project runners
run your workflows inside the cluster, separately for each project
Private registry and vulnerability scanning
images stay at Nesnet, are scanned, and public registries are cached
GitOps controller
the only component that writes to the cluster; desired state in git
Automated update proposals
pull requests for chart, image and Actions versions
Automatic certificate management
domain certificates issued and renewed before they expire
Managed Kubernetes
the clusters the pipeline deploys to

How it compares

OptionWhen it is the right choice
Your own build tooling plus Managed KubernetesThe right choice if your team already has a settled pipeline on GitLab CI, Jenkins or another tool and does not want to replace it. Take the cluster as Managed Kubernetes and deploy from your own pipeline with the kubeconfig.
Building the pipeline with your own platform teamMakes sense if you want to tune every component yourself and have a platform team that will keep these tools running for years. Every component here is open source; what Nesnet adds is the rules and the operation.
Nesly Serverless PlatformLighter for single-app projects that need no release team or separate environments. A push to the connected branch goes straight live, and accounts are self-service.

Technical specifications

Build
Build and testGitHub workflows
RunnersIn-cluster, one per project
Image registryPrivate registry, vulnerability scanning, cache for public registries
Delivery
Delivery methodGitOps; only the delivery tool writes to the cluster
Target clustersKubernetes clusters on the Nesnet cloud
Deploy to testOn every git push
Promotion and rollback
PromotionDigest copy of the tested image, digest verified
Who can shipThe project's release team only
RollbackImage and configuration together, then a health check
Maintenance and security
Operating system layerRefreshed weekly, without a rebuild
Dependency updatesPatch and minor automatic, major approved
CertificatesIssued and renewed automatically
SecretsEncrypted in git or held in a separate secret store
Location
Data centresEquinix Istanbul (Dudullu), Türk Telekom Ankara; data stays in Türkiye

If something breaks

  • If a release fails to come up in production

    The pipeline treats it as a failure without waiting and restores the previous version's image and configuration together. The job is not considered done until production is confirmed to be serving again.

  • If the build or tests fail

    The release is not promoted. The version currently in production keeps running as it is, and the fixed code goes through the pipeline again on the next push.

  • If the GitOps tool stops

    Clusters keep running the applications they already have. The only effect is that new changes are not applied; when the tool runs again it catches up with the state in git.

  • If a public registry is unreachable

    The public images your build needs come from the registry's cache. An outside registry's limit or outage does not cut a build short.

Frequently asked questions

Pricing and first steps

Pricing

The CI/CD Pipeline is billed monthly based on resource usage, with invoices issued as e-Invoices. The number of projects, the cluster resources your environments use and your build volume make up the bill, and the scope is worked out together at the quote stage.

What the price depends on

  • Number of projects on the pipeline; each comes with its own runner
  • Number of test and production environments and the node size of the clusters they run on
  • Build volume, since runners use the cluster's vCPU and RAM
  • Additional services your applications use, such as databases

How to get started

  1. 1.Fill in the form or call 0800 606 1071.
  2. 2.Your repositories, environments and release team are worked out in one call, and a quote is prepared.
  3. 3.Your project is registered and your developers make the first push.

Put the image you tested into production

Tell Nesnet's team about your projects, environments and release process, and you will hear back within the same business day. After the first push your developers stop asking anyone to deploy, and only the releases you approve reach production.