Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Git Tutorial
  • Git Exercises
  • Git Basic Commands
  • Git Cheat Sheet
  • Git Interview Questions
  • Git Bash
  • GitHub
  • Git Branch
  • Git Merge
  • Git WorkFlow
  • Git Hooks
  • Git LFS
  • Git Rebase
  • Git Cherry Pick
Open In App
Next Article:
Implementation of CI/CD in C/C++ Application(Linux) Using Shell and Docker Executor on GitLab
Next article icon

Implementation of CI/CD in C/C++ Application(Linux) Using Shell and Docker Executor on GitLab

Last Updated : 11 Apr, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

There are many executors available to implement CI/CD with GitLab Runner. However, Shell and Docker are more popular among them, and we can easily configure a repository with these runners.  These runners can be chosen based on the requirements and availability of the resources. This article mainly focuses on Shell and Docker executor of C/C++ Linux application and code is written in bash script. The application can build and test using a bash script. 

Shell Executor: Shell Executor is a very simple executor that helps to build the solution locally on the machine, where GitLab Runner is installed. In this case, GitLab Runner is installed on Linux Machine, so need to install the required software in the same system.

Docker Executor: It is a powerful tool that includes much software and it can be accessed by image. The advantage of this executor is that, we do not need to install any software manually, everything will be taken care of through docker and the required image will be downloaded from the docker hub. However, the disadvantageous is that this communication is blocked in some organizations due to security purposes. So, If this is the case Shell Executor is the best alternative. 

Implementation of C/C++ on Shell Executor 

Requirements: These are the basic software which needs to install in Linux machine. However, it can be changed based on the compilation script and need to download other software if needed.

Software  

Description  

Git       This is the first requirement, to commit the changes on GitLab. It is a version control software which tracks the changing set of files
cmake To build automation, testing, and packaging c/c++application, need to install cmake in Linux machine.
gccIt is a compiler that needs to compile the c/c++ programs 
g++It is also a compiler that needs to compile the c/c++ programs. It can be chosen based on the written script.
grepInstall it if the program is searching plain-text. 

Path Configuration: After successful installation above, need to set the path of this installed software in the machine if it is not set. Run the below command on the machine.

Variable /File                                   

Path 

G++export GCC=/usr/bin/g++
CCexport CC=/usr/bin/gcc
GREPexport GREP=/usr/bin/grep
Permission Give Permission to script before it run: the chmod -R 777 *
.gitlab-ci.ymlThis file should be inside root directory of the project which contains all the CI/CD configuration including software and script path. Here, you can mention how this repository should run. Before adding this file to the root directory, should check it is a valid yml file or not.

GitLab Runner Set Up: Follow the below steps to download and configure the GitLab Runner.

1. Download GitLab Runner on Linux Machine using the following command

sudo curl -L --output /usr/local/bin/gitlab-runner

2. Give it permissions for execution using the following command

sudo chmod +x /usr/local/bin/gitlab-runner

3. Create a GitLab CI using the following command

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

4. Install and run as service using the following command

sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

5. Start GitLab Runner using the following command

sudo gitlab-runner start

6. Stop the GitLab Runner before registering the repository

sudo gitlab-runner stop

7. Once GitLab Runner is successfully stopped enter the following command in the terminal for repository registration.

sudo gitlab-runner register

8. When you do repository registration with GitLab Runner, the below questions have to answer.

  • Enter your GitLab instance URL: It can be different with each organization and the format will be like http://gitlab.example.com
  • Path: Go to GitLab Account → Select repository which you want to register with runner → Settings → CI/CD → Expand Runner
  • Enter the gitlab-ci token for this runner: It will be a unique token of each project which will need while registration and it can be found Path: Go to GitLab Account → Select repository which you want to register with runner → Settings → CI/CD → Expand Runner
  • Enter the gitlab-ci description for this runner: Put Runner name(any name), which will help you to remember that which runner' is running
  • Enter the gitlab-ci tags for this runner: It is optional if you want to start GitLab runner when a specific tag is available in yml file.
  • Enter the executor: There will be a list of several executors, and type shell(as GitLab Runner will run our system)

9. After successful registration, start the GitLab Runner using the following command.

sudo gitlab-runner start

10. To verify that GitLab Runner has registered the respective repository and the runner has been started. Go to GitLab Account → Select repository which you want to register with runner → Settings → CI/CD → Expand Runner, There will be green color circle will be available and displaying message will be Runners activated for this project.  Note: If the circle is gray, it means the runner has not started and starts again.

Linux GitLab Runner Commands

Follow some more GitLab Runner commands to familiarize yourself.  

Command

Description 

sudo gitlab-runner registerRegister the project with GitLab Runner 
sudo gitlab-runner startStart the runner 
sudo gitlab-runner stopStop the runner
sudo gitlab-runner statusTo know the status of gitlab-runner 
sudo gitlab-runner unregister --name  test-runner  Unregister the Runner of a project and replace the test-runner with your runner name and this name can be found inside the config.toml file (where your gitlab-runner ) available.
sudo gitlab-runner unregister --url http://gitlab.example.com/ --token t0k3nRemove Runner by URL and token 
sudo gitlab-runner unregister --all-runnersTo unregister All Runners
sudo gitlab-runner restartThis command stops and then starts the GitLab Runner service
sudo gitlab-runner uninstallThis command stops and uninstalls the GitLab Runner from being run as a service
sudo gitlab-runner execTo see a list of available executors, run
sudo gitlab-runner --helpCheck a recent list of commands by executing
sudo gitlab-runner run --helpCan see the name of the environment variable
sudo gitlab-runner --debugTo run a command in debug mode
sudo gitlab-runner exec shellTo see a list of all available options for the shell executor, run

.gitlab-ci.yml_ shell Executor:

Below is the content of .gitlab-ci.yml on shell executor mode. However, change it if needed.

stages:
- build
- test

build_job:
stage: build
only:
- master
script:
- cd sourcecode
- export G++=/usr/bin/g++ //if not set manually path of g++
- export GCC=/usr/bin/gcc //if not set manually path of gcc
- chmod -R 777 *
- ./BuildPackage.sh
- pwd

artifacts:
expire_in: 365 days //save the binary which needed while test the application, and it can be downloaded from GitLab
paths:
- sourcecode/binaryfolder_name // save the binary


test_job:
stage: test
only:
- master
script:
- pwd
- cd testdir //go to test directory for run the test case script
- chmod -R 777 *
- ./tests.sh

dependencies:
- build_job
- build_job

Implementation of C/C++ on Docker Executor: There is no need to install any software manually, everything will be taken from the docker container. However, you can install the required software inputting the name in yml file and also can export the path. To run the gitlab runner on docker executor mode, Go to GitLab Runner Set-Up(above), and select docker instead of shell. 

.gitlab-ci.yml_ Docker Executor:

Below is the content of .gitlab-ci.yml on docker executor mode. However, change it if needed. 

image: ubuntu:latest

stages:
- build
- test

before_script:
- echo "Before script install this on ubuntu image "
- apt-get update && apt-get -y install cmake && apt-get -y install gcc && apt-get -y install g++


build_job:
stage: build
only:
- master
script:
- cd sourcecode
- export G++=/usr/bin/g++ //if not set manually path of g++
- export GCC=/usr/bin/gcc //if not set manually path of gcc
- chmod -R 777 *
- ./BuildPackage.sh
- pwd

artifacts:
expire_in: 365 days //save the binary which needed while test the application, and it can be downloaded from GitLab
paths:
- sourcecode/binaryfolder_name // save the binary


test_job:
stage: test
only:
- master
script:
- pwd
- cd testdir //go to test directory for run the test case script
- chmod -R 777 *
- ./tests.sh

dependencies:
- build_job

Next Article
Implementation of CI/CD in C/C++ Application(Linux) Using Shell and Docker Executor on GitLab

A

amiransarimy
Improve
Article Tags :
  • GBlog
  • C Programs
  • Computer Subject
  • Linux-Unix
  • C++
  • Git
Practice Tags :
  • CPP

Similar Reads

    Implementation of CI/CD in Java application(Linux) Using Shell and Docker Executor on GitLab
    There are many executors available to implement CI/CD with GitLab Runner. However, Shell and Docker are more popular among them, and we can easily configure a repository with these runners. These runners can be chosen based on the requirements and availability of the resources. This article mainly f
    6 min read
    How to Publish Docker Image to Dockerhub Using Github Actions?
    Pre-requisites: GitHub Actions, Docker Hub Publishing Docker images to Docker Hub using GitHub Actions is a simple and efficient process that can automate your image-building and publishing process. What are Github Actions?GitHub Actions is a CI/CD (Continuous Integration/Continuous Deployment) plat
    3 min read
    How to Set Up a CI Pipeline for Ktor Using GitHub Actions?
    In this article, we'll look at how to use GitHub Actions to create a robust and effective Continuous Integration (CI) pipeline for Ktor applications. Developers have a great foundation to construct high-performance server-side apps thanks to Ktor, a versatile and lightweight Kotlin framework for bui
    6 min read
    How to Run GUI Based Applications inside Docker?
    A Docker Container is an isolated application platform that contains everything needed to run an application built from one or more images. Docker is an Open Source project that provides an open platform to run any number of applications inside a container according to your requirements and you can
    7 min read
    Integrating Ansible with GitHub for CI/CD Pipelines
    Many development teams face challenges when successfully combining several tools to form proper and effective CI/CD processes. An inefficient workflow means projects slow down, vary in their implementation, and have more overhead related to infrastructure management. Another consequence is that, due
    8 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences