PikoSystem IT engineering services
DevOps

CI/CD setup and automated deployment with GitLab, Jenkins and ArgoCD

When every release means SSH into the server and a few commands typed from memory, a broken build eventually reaches your users. We automate the path from commit to server. Every push is tested and built, and production deploys happen after a single approval.

Tools & technology ci-cd
  • GitLab CI/CD
  • GitLab Runner
  • Jenkins
  • ArgoCD
  • Docker
  • Helm
  • HashiCorp Vault
  • SonarQube
5work areas
4deliverables
4steps

What is CI/CD Pipelines?

CI/CD pipeline setup means automating the path from commit to server, so every push is tested and built and each release can be deployed and rolled back without manual steps. It is for teams where one person deploys over SSH with commands typed from memory, where updates keep breaking things and rollback takes hours, or where sanctions rule out GitHub Actions and GitLab.com. PikoSystem installs self-hosted GitLab CE with runners and automated backups, writes lint, test, image build, scan and deploy stages in .gitlab-ci.yml or a Jenkinsfile, sets automatic staging deploys with manual approval for production, and moves secrets into protected CI variables or HashiCorp Vault. The pipeline is piloted on one project before rollout. You get working pipelines for the agreed projects, a guide for adding new ones and rollback instructions.

When you need CI/CD Pipelines

  • One person deploys by hand and only they know the steps.
  • Every update breaks something, and rolling back takes hours.
  • We can't rely on GitHub Actions or GitLab.com because of sanctions.
  • We have tests, but nothing runs them automatically.

What CI/CD Pipelines includes

01

Self-hosted GitLab

GitLab CE on your own server with automated backups, LDAP or Active Directory login, and GitLab Runners.

02

Pipeline design

Lint, test, image build, scan and deploy stages in .gitlab-ci.yml or a Jenkinsfile, with dependency caching to keep runs short.

03

Staging and production

Automatic deploys to staging, manual approval for production, tagged releases and one-click rollback.

04

GitOps with ArgoCD

For Kubernetes, the desired state lives in Git and ArgoCD keeps the cluster in sync with it.

05

Secrets management

Passwords and keys moved out of the codebase into protected CI variables or HashiCorp Vault.

What you get from CI/CD Pipelines

  • Working pipelines for the agreed projects
  • GitLab and runners with backups configured, where needed
  • A guide for adding new projects to the pipeline
  • Rollback instructions and fixes for common pipeline failures

CI/CD Pipelines: a practical guide

Which GitLab Runner executor: shell, Docker or Kubernetes?

The executor decides where and how pipeline jobs run. The shell executor runs commands directly on the runner host. It is simple, but jobs can affect each other's files and tools, and tool versions clash between projects.

The Docker executor starts every job in a fresh container and suits most teams. If a job builds images, we avoid privileged Docker-in-Docker, which effectively gives the job root on the runner host, and use Buildah or rootless BuildKit instead. If you already run Kubernetes, the Kubernetes executor runs each job as a pod, so runner capacity grows and shrinks with the cluster.

GitLab CI/CD variables and the mistakes that leak secrets

A variable defined in project settings isn't automatically safe. Without the Masked option, a stray echo or a script run with set -x prints it into the job log for anyone with log access. Without Protected, any developer can push a branch with a job that reads the production SSH key.

Another frequent problem is one shared runner for every project, holding keys to the main servers. Keep sensitive projects on separate runners and deploy to production from a dedicated runner selected by tag. Artifacts without expire_in are a slower problem: the GitLab server's disk fills up a few months later.

What to decide before building a CI/CD pipeline

A pipeline automates your release process, so that process needs to be clear first. Decide on a branching model, whether everyone works on main or you keep develop and release branches, and list your environments with their servers and how each is accessed.

Write down the commands used today to build and test, even if they only exist in one person's head. Decide whether database migrations run automatically or after approval, and who is allowed to approve a production release.

ArgoCD, Helm and GitLab CI: who does what?

In the usual setup, GitLab CI builds and tests the image, pushes it to the registry and updates only the image tag in a deployment config repository. ArgoCD watches that repository and syncs the cluster to it. The pipeline never needs a cluster-admin kubeconfig, which takes direct production access out of CI.

We keep a values file per environment in the Helm chart, such as values-staging.yaml and values-production.yaml, and each ArgoCD Application renders from its own file. If someone changes the cluster by hand with kubectl, ArgoCD marks the app OutOfSync and, with selfHeal enabled, reverts it.

How CI/CD Pipelines works

  1. 01

    Review the current process

    We map how you build and deploy today, how repositories and environments are organised, and where the risk sits.

  2. 02

    Pilot project

    We set up the pipeline on one project so problems surface before rollout.

  3. 03

    Roll out

    We turn the pipeline into a shared template and move the remaining projects onto it.

  4. 04

    Handover and training

    You get the documentation, and we run a full release and rollback together with your team.

CI/CD Pipelines: frequently asked questions

Should we use GitLab or Jenkins?

If you also need code hosting, GitLab gives you both in one product and is simpler for most teams. Jenkins suits organisations with existing pipelines or specific plugins. If your current Jenkins works, there's no need to replace it.

Can you run GitLab on our internal servers?

Yes. We install GitLab CE on your server or VM, enable its built-in container registry and set up daily backups. Your code and pipelines then have no dependency on an external service.

Is CI/CD worth it for a project without automated tests?

Yes. Even without tests, consistent builds and automated deploys with rollback cut human error. Adding tests to the pipeline later becomes much easier.

Related searches

  • GitLab CI/CD
  • self-hosted GitLab
  • Jenkins pipeline
  • ArgoCD
  • automated deployment
  • CI/CD pipeline

Quote

Tell us what you need, we'll come back with a plan and a price

A few lines on where things stand and what you want is enough. An engineer calls you back, not a sales rep.

  1. 01We read your request and call if anything is unclear.
  2. 02If needed, we do a quick remote review or a site visit.
  3. 03You get a written proposal with scope, timeline and cost.

Your details are only used to answer this request.