Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
---
title: Build a CI/CD pipeline using GitLab-hosted Arm runners

draft: true
cascade:
draft: true


minutes_to_complete: 30

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: GitLab runners overview
title: Build and use GitLab-hosted Arm runners for CI/CD
weight: 2

### FIXED, DO NOT MODIFY
Expand All @@ -8,14 +8,16 @@ layout: learningpathall

## What is a GitLab runner?

A GitLab Runner is an agent that executes CI/CD jobs defined in your pipeline configuration. GitLab offers two types:
A GitLab Runner is an agent that executes CI/CD jobs defined in your pipeline configuration. GitLab offers two types of runners:

- **GitLab-hosted runners**: Managed by GitLab, no setup required
- **Self-managed runners**: You install and manage on your own infrastructure
- **GitLab-hosted runners**: GitLab manages these runners, so you don't need to set up or maintain infrastructure.
- **Self-managed runners**: you install and maintain these runners on your own infrastructure.

When you register a runner, you choose an executor that determines the job environment (Docker, Shell, Kubernetes, etc.).
For Arm development, GitLab-hosted runners offer a managed way to build and test applications targeting Arm platforms without maintaining your own infrastructure. You'll choose between the Docker executor (for containerized builds) or the Shell executor (for direct access to the Arm64 runner environment).

### Arm64 runner support
When you register a runner, you specify an executor that determines the job environment. For Arm development workflows, Docker and Shell executors are the most common choices, letting you build container images or compile applications directly on native Arm64 hardware.

## Arm64 runner support

GitLab-hosted runners support both x86-64 and arm64 architectures. For developers targeting Arm platforms (servers, edge devices, or embedded systems), using Arm64 runners provides:

Expand All @@ -25,7 +27,7 @@ GitLab-hosted runners support both x86-64 and arm64 architectures. For developer
- Faster builds when targeting Arm64 platforms

{{% notice Note %}}
GitLab-hosted runner specifications are subject to change. See the [GitLab documentation](https://docs.gitlab.com/ci/runners/hosted_runners/) for current details.
GitLab-hosted runner specifications are subject to change. See the [GitLab documentation](https://docs.gitlab.com/ci/runners/hosted_runners/) for further information.
{{% /notice %}}

## GitLab-hosted runners
Expand All @@ -34,10 +36,13 @@ GitLab-hosted runner specifications are subject to change. See the [GitLab docum

Each job runs in a newly provisioned virtual machine dedicated to that job. The VM is deleted immediately after job completion.

- Untagged jobs default to the small Linux x86-64 runner
GitLab-hosted runners provide the following execution environment:

- Jobs run with sudo access (no password required)
- Jobs time out after three hours
- The VM has sudo access without password
- Storage is shared between OS, container image, and repository clone
- Storage is shared between the operating system, container images, and your repository clone
- Untagged jobs default to the small Linux x86-64 runner (specify `saas-linux-small-arm64` or another Arm64 tag to use Arm runners)


### Network isolation

Expand All @@ -60,7 +65,7 @@ For complete specifications, see [GitLab-hosted runners](https://docs.gitlab.com

Each job executes in complete isolation:

1. GitLab provisions a new VM for your job
2. The job executes in this dedicated environment
3. GitLab sends deletion command to Google Compute API immediately after completion
4. The [Google Compute Engine hypervisor](https://cloud.google.com/blog/products/gcp/7-ways-we-harden-our-kvm-hypervisor-at-google-cloud-security-in-plaintext) securely deletes the VM and data
- GitLab provisions a new VM for your job
- The job executes in this dedicated environment
- GitLab sends deletion command to Google Compute API immediately after completion
- The [Google Compute Engine hypervisor](https://cloud.google.com/blog/products/gcp/7-ways-we-harden-our-kvm-hypervisor-at-google-cloud-security-in-plaintext) securely deletes the VM and data
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
---
title: Configure CI/CD pipeline for Arm64
title: Build and configure your Arm64 CI/CD pipeline
weight: 4

### FIXED, DO NOT MODIFY
layout: learningpathall
---
## Overview

This section guides you through building an Arm64 container image and creating a pipeline configuration for GitLab-hosted runners.

GitLab-hosted runners are available for any project without additional setup. To use Arm64 runners, create a `.gitlab-ci.yml` file in your project root and specify the Arm64 runner tag.

Expand Down Expand Up @@ -63,15 +66,15 @@ Create these three files before adding the pipeline configuration. Once you comm

From your project page, select **Set up CI/CD** or use the **+** button to create a new file:

![CI-CD-New #center](_images/ci-cd-new.png)
![GitLab project page with CI/CD setup option highlighted, showing the Set up CI/CD button in the center of the interface alt-txt#center](_images/ci-cd-new.png "GitLab Set up CI/CD button")

Name the file `.gitlab-ci.yml`:

![New-YML #center](_images/new-yml.png)
![GitLab new YAML file creation screen for pipeline configuration alt-txt#center](_images/new-yml.png "GitLab new YAML file creation screen")

Select **Edit** > **Edit in pipeline editor**:

![Editor-YML #center](_images/editor-yml.png)
![GitLab pipeline editor screen for editing .gitlab-ci.yml alt-txt#center](_images/editor-yml.webp "GitLab pipeline editor screen")

Add the following pipeline configuration. This defines three stages that build, test, and publish your Arm64 container image:
```yaml
Expand Down Expand Up @@ -136,4 +139,13 @@ The `push_latest` job runs only on the default branch (typically `main`). It tag
**Authentication:**
GitLab automatically provides `$CI_REGISTRY_PASSWORD` and `$CI_REGISTRY_USER` variables for authenticating to the container registry.

Commit the configuration. GitLab validates the syntax and starts the pipeline automatically.
Commit the configuration. GitLab validates the syntax and starts the pipeline automatically.

## What you've accomplished and what's next

In this section, you:
- Built a simple C application for Arm64
- Created a Dockerfile and containerized your application
- Configured a GitLab pipeline to build and push Arm64 images

Next, you'll run your pipeline, verify the results, and test your container image on Arm64 infrastructure. Continue to the next section to validate your CI/CD workflow and ensure your application is ready for deployment on Arm platforms.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ weight: 3
### FIXED, DO NOT MODIFY
layout: learningpathall
---
## Create your GitLab project for Arm CI/CD

This section covers how to create a new GitLab project to use with Arm64 runners.


Before you begin, log in to your [GitLab account](https://gitlab.com/) or create a new one.

Expand All @@ -18,18 +22,18 @@ If you're using an existing project, skip to the next section.

Navigate to **Projects** in the left sidebar and select **New Project**:

![Gitlab-Projects #center](_images/gitlab-projects.png)
![GitLab left sidebar showing Projects menu with New Project option highlighted alt-txt#center](_images/gitlab-projects.png "GitLab Projects menu in left sidebar")

Choose **Create blank project** or **Create from template** (select **GitLab CI/CD components** if using a template):

![New-Project #center](_images/new-project.png)
![GitLab new project creation screen showing options for blank project and templates alt-txt#center](_images/new-project.png "GitLab new project creation screen")

Provide a project name (for example, `arm-runner-demo`) and select your preferred project URL. Select **Create Project**:

![Project-Info #center](_images/project-info.png)
![GitLab project information entry screen with fields for project name and URL alt-txt#center](_images/project-info.png "GitLab project information entry screen")

Your new project is ready:

![Project-Done #center](_images/project-done.png)
![GitLab project creation success screen showing project dashboard alt-txt#center](_images/project-done.png "GitLab project creation success screen")

With your project created, you can now add application files and configure the CI/CD pipeline to use Arm64 runners.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ weight: 5
### FIXED, DO NOT MODIFY
layout: learningpathall
---
## Validate and test your Arm64 CI/CD pipeline

This section explains how to run, verify, and test your pipeline and container images on Arm64 infrastructure.

## Run the pipeline

Expand All @@ -14,7 +17,7 @@ Navigate to **Build** > **Pipelines** and select **Run pipeline**:

Select individual jobs to view their output and status:

![pipeline-execution #center](_images/pipeline-execution.png)
![GitLab pipeline execution screen showing job output and status alt-txt#center](_images/pipeline-execution.png "GitLab pipeline execution screen")

## Verify Arm64 architecture

Expand Down Expand Up @@ -63,6 +66,8 @@ The pipeline editor provides helpful features:
- **Visualize**: View your pipeline as a graph showing stage dependencies
- **Validate**: Check pipeline syntax before committing changes

![GitLab visual pipeline editor showing pipeline graph and validation tools alt-txt#center](_images/visual-pipeline.webp "GitLab visual pipeline editor with graph and validation tools")

## What you've accomplished and what's next

You have:
Expand Down