# [Build a CI/CD pipeline using GitLab-hosted Arm runners](https://learn.arm.com/learning-paths/cross-platform/gitlab-managed-runners/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/cross-platform/gitlab-managed-runners/)
- [Build and use GitLab-hosted Arm runners for CI/CD](https://learn.arm.com/learning-paths/cross-platform/gitlab-managed-runners/info/)
- [Create a GitLab project](https://learn.arm.com/learning-paths/cross-platform/gitlab-managed-runners/project/)
- [Build and configure your Arm64 CI/CD pipeline](https://learn.arm.com/learning-paths/cross-platform/gitlab-managed-runners/pipeline/)
- [Run pipeline and verify results](https://learn.arm.com/learning-paths/cross-platform/gitlab-managed-runners/results/)
- [Next Steps](https://learn.arm.com/learning-paths/cross-platform/gitlab-managed-runners/_next-steps/)

## About this Learning Path

|              |              |
|--------------|--------------|
| **Skill level:** | Introductory |
| **Reading time:** | 30 min       |
| **Last updated:** | 31 Jul 2026  |

|              |              |
|--------------|--------------|
| **Author:**  | Mohamed Ismail |
| **Arm IP:**  | [Neoverse](https://support.arm.com/?tab=compute-ip&Product%20Type=Infrastructure%20Processors) |
| **Tags:**     | [CI-CD](https://learn.arm.com/tag/ci-cd), [Google Cloud](https://learn.arm.com/tag/google-cloud), [Linux](https://learn.arm.com/tag/linux), [GitLab](https://learn.arm.com/tag/gitlab), [Docker](https://learn.arm.com/tag/docker), [C](https://learn.arm.com/tag/c) |

### Who is this for?
This is an introductory topic for DevOps engineers who want to build CI/CD pipelines on Arm-based infrastructure using GitLab-hosted runners.

### What will you learn?
Upon completion of this Learning Path, you will be able to:
- Create a GitLab project with CI/CD configuration
- Configure pipeline stages to use Arm64 runners
- Build and containerize applications for Arm64 architecture
- Store container images in GitLab Container Registry

### Prerequisites
Before starting, you will need the following:
- A GitLab account (free tier includes Arm64 runner access)

### Summary
You’ll create a GitLab project and configure a CI/CD pipeline that runs on GitLab‑hosted arm64 runners. You’ll add a ` .gitlab-ci.yml ` that targets arm64 by specifying the appropriate runner tag and use the Docker executor to containerize a simple C application. The pipeline builds the program, produces an arm64 container image, and pushes it to the GitLab Container Registry. You’ll trigger the workflow from the Pipelines page, inspect job logs to follow each stage, and verify the execution environment by checking ` lscpu ` output for arm64. By the end, you’ll have a working pipeline and a versioned image visible in the project’s registry.

### Frequently asked questions

#### Which runner executor should I use for this pipeline?
Use the Docker executor to run containerized builds on GitLab‑hosted runners. This path configures jobs to run on arm64 by adding the Arm64 runner tag in ` .gitlab-ci.yml `.

#### How do I target arm64 runners in `.gitlab-ci.yml`?
Add the Arm64 runner tag to the job’s tags section in ` .gitlab-ci.yml `. Jobs that include this tag are scheduled on GitLab‑hosted arm64 runners.

#### How do I confirm my job actually ran on Arm64?
Open the job log and review the ` lscpu ` output. The reported architecture should indicate Arm64, confirming that the job executed on the intended runner.

#### What result should I expect after the pipeline runs?
You should see successful build and push stages, with logs showing the C program compilation and container image creation. The new image and tag appear in the project’s GitLab Container Registry.

#### What should I check if the image is not in the GitLab Container Registry?
Verify that the push stage finished without errors in the job log. Then open the project’s Container Registry page and confirm the expected image tag is listed.
