A Singapore Government Agency Website

Shared runners

Instead of dedicating specific runners to individual projects, SHIP-HATS team offers and manages a pool of runners to handle jobs from any project that is configured to use them.

Benefits of shared runners

  • Created on-demand.
  • Available for all SHIP-HATS users at no additional costs!
  • No overheads for agencies as they do not need to maintain runners.

For more details, refer to Shared runners vs Agency-hosted runners.

Types of shared runners

Following shared runners are available:

- If you have not specified any runner tag, by default, CStack runners will be used.
- We are piloting GitLab-hosted runners. Depending on the pilot outcome, we plan to decommission CStack runners (decommissioning date to be confirmed soon). For details, refer to Pilot initiative of GitLab-hosted runners.

Property Details
Hosted by CStack
Executor kubernetes
Tags cstack
non_privileged
no_root
Privileged FALSE
Cache enabled YES
Run untag YES (If no runner tag is configured, by default, CStack runners are used for your job.)
Egress IPs 13.251.177.7/32
18.143.61.190/32
18.143.26.175/32
18.142.30.19/32
18.140.93.144/32
Use cases General automation tasks, except for building containers.
Additional info - Max: 4 vCPUs, 8 GB memory
- Runs as non-root (user ID: 65533)
- Uses Container Stack in SGTS.

Docker runners are available in two architecture types:

Property Details
Executor docker + autoscale
Tags AMD64 - Small: ship_docker
AMD64 - Medium: ship_docker_med
AMD64 - Large: ship_docker_large
ARM64 - Small: ship_docker_arm
Privileged FALSE
Cache enabled YES
Run untag NO
Egress IPs 18.143.26.175/32
18.142.30.19/32
18.140.93.144/32
Hosted by SHIP-HATS
Use cases Build a Docker image
Additional info For AMD64-based runners:
- Type: t3.large
- Runs as root
- Slower than CStack for non-Docker builds
- Privileged access removed (affects Docker-in-Docker)
- Use Kaniko
- CI template

For ARM64-based runners:
- Not compatible with prebuilt Pipeline-coe Docker image (AMD64)
- Not compatible with AMD64-based Kaniko and other container images
- Use multi-arch-compatible images where possible (e.g., Kaniko multi-arch).
For more details, Choose the right docker runners.

GitLab-hosted runners are available as a pilot (from 01 August, 2025) for projects classified as Restricted / Sensitive-Normal and below. These runners automatically scale on AWS EC2 instances in the same region as your GitLab Dedicated instance.

Property Details
Executor Docker Autoscaler
Tags x86-64 - Small: linux-small-amd64
x86-64 - Medium: linux-medium-amd64
x86-64 - Large: linux-large-amd64
ARM64 - Small: linux-small-arm64
Privileged YES (Supports Docker-in-Docker)
Cache enabled YES. During Limited Availability (LA), the shared cache is only available within the same runner size.
For example, jobs on linux-small-amd64 share a cache only with other small runners.
When GitLab-hosted runners reach General Availability (GA), the cache will be shared across all runner sizes.
Run untagged NO
Egress IPs - linux-small-amd64: 13.215.79.67, 54.255.97.140, 47.131.209.98, 47.130.122.133

- linux-medium-amd64: 47.130.161.233, 18.140.155.213, 13.215.99.51, 52.74.126.12

- linux-large-amd64: 18.142.163.122, 18.142.34.239, 13.229.191.100, 13.229.0.67

- linux-small-arm64: 18.139.173.130, 47.130.41.25, 47.130.164.31, 3.1.158.242
Hosted by GitLab
Use cases For projects classified as Restricted / Sensitive-Normal and below and CI/CD jobs needing secure isolation, Docker-in-Docker builds, performance-critical workloads
Additional info - Uses latest Docker Engine
- Each job runs in an isolated, ephemeral VM
- Passwordless sudo access available
- Disk space shared by OS, tools, and repo clone (may be limited). For more details, refer to GitLab-hosted shared runners.

SHIP-HATS supports multiple Windows runner images for different Visual Studio (VS) versions. If you have not specified any image version, GitLab Windows runner will use VS 2022. If your project requires a different image than those listed, you may also use a custom image.

Property Details
Executor docker-windows
Tags ship_windows
ship_windows_docker
Privileged N/A
Cache enabled YES
Run untag NO
Egress IPs 18.143.26.175/32
18.142.30.19/32
18.140.93.144/32
Hosted by SHIP-HATS
Use cases Build with .NET Framework
Additional info - OS: Windows Server 2022 Base
- Git: 2.36.1
- chocolatey
- Image tags:
    - vs2017
    - vs2019
    - vs2022
- VS versions
- Specify tag
- Libraries

Types of Docker runners

To ensure efficient and fair usage of our shared CI/CD resources, we provide Docker runners in two architecture types:

Choose the appropriate architecture based on your workload requirements, and then select a runner size based on job complexity.

ARM64 Docker runners

- As part of our pilot initiative, this runner will be available from 19 June 2025.
- This docker runner is currently free to use, but may become billable in the future.
- Only one variant is available for ARM64 runners and that is ARM64 - Small.

Property Value
Tag ship_docker_arm
vCPU 2
Memory 8 GB
Storage 30 GB
Idle count Low. This means jobs may start slower due to fewer idle nodes available.
Suitable for - ARM-native development and testing
- Use when targeting ARM-based cloud instances (e.g., AWS Graviton)
- Use when the underlying system requires ARM architecture

Note:
❌ Not compatible with Pipeline-coe prebuilt Docker images (AMD64)
❌ Not compatible with AMD64 -based Kaniko or other images
✅ Use the official multi-arch Kaniko image: gcr.io/kaniko-project/executor:debug

Recommendation:
If unsure, use AMD64, as it is more widely supported across environments.

AMD64 Docker runners

Following are the three variants for AMD64 runner:

  • Small
  • Medium
  • Large
Property Value
Tag ship_docker
vCPU 2
Memory 8 GB
Storage 30 GB
Idle count High. This means jobs usually start quickly due to more idle nodes.
Suitable for - Ideal to start with this runner
- Unit/quick tests
- Code linting/formatting
- Suitable for jobs that typically complete under 10 minutes. Consider switching to Medium docker runner if you experience delays.

The Medium and Large Docker runners are currently free to use, but may become billable in the future. We recommend planning your usage accordingly.

Property Value
Tag ship_docker_med
vCPU 4
Memory 16 GB
Storage 50 GB
Idle count Medium
Suitable for - Moderately heavy tasks and integration tests.
- Ideal for jobs that time out (jobs exceed 10 minutes while using Small docker runners) or encounter CPU/memory bottlenecks.

The Medium and Large Docker runners are currently free to use, but may become billable in the future. We recommend planning your usage accordingly.

Property Value
Tag ship_docker_large
vCPU 8
Memory 32 GB
Storage 100 GB
Idle count Low. This means jobs may have longer queue times when all idle nodes are in use.
Suitable for - Resource-intensive builds
- End-to-end tests with high concurrency
- Jobs requiring high memory/CPU such as data processing
- Long-running jobs
- Large test suites.
- Ideal for jobs that time out (jobs exceed 60 minutes while using Medium docker runners) or encounter CPU/memory bottlenecks.

Choose the right Docker runners

Step 1: Start by choosing the right architecture

  • Use ARM64 runner only if your workload targets ARM-based systems (e.g., AWS Graviton) or you’re using ARM-specific container images.
  • Use AMD64 runners for all other jobs, choose AMD64 runners as they are suitable for most jobs.

Step 2: Choose the right size

  • Only one variant is available for ARM64 runners and that is ARM64 - Small.

  • If you are choosing, AMD64 runners: ✅ Start with the Small Docker runner - Ideal for jobs that usually complete under 10 minutes. Monitor the performance and if you experience delays, switch to a larger runner.

    ⏱️ Move to the Medium Docker runner if your job consistently exceeds 10 minutes or hits CPU/memory limits while using the Small docker runner. It’s better suited for moderately heavy workloads or jobs.

    🔧 Use the Large Docker runner if your job consistently exceeds 60 minutes or hits CPU/memory limits while using the Medium docker runner. Ideal for resource-intensive builds, end-to-end testing with high concurrency, or jobs that require significantly more CPU and memory.

- If no runner tag is configured, by default, CStack runners are used for your job.
- We also provide you a dashboard to monitor the performance of shared runners.
- Currently, you can view the performance of the shared Docker runners offered by SHIP-HATS.

GitLab-hosted shared runners

GitLab-hosted runners offer a secure, scalable environment to execute CI/CD jobs efficiently.

Key features

  • Autoscaling: GitLab-hosted shared runners automatically scale using AWS EC2 instances located in the same region as your GitLab dedicated instance, ensuring low latency and better performance.

  • Job isolation: Each CI job runs on a freshly provisioned virtual machine (VM), providing complete isolation and improved security.

  • Sudo access: While using GitLab-hosted shared runners, the VMs offer passwordless sudo access, enabling jobs to execute privileged commands when needed.

  • Docker-in-Docker Support: GitLab-hosted shared runners run in privileged mode to enable Docker-in-Docker, allowing jobs to build Docker images or run multiple containers inside the job environment.

Note that the virtual machine’s storage is shared with the operating system, pre-installed tools, and your project files.

GitLab-hosted runners on Linux

GitLab-hosted runners on Linux for GitLab Dedicated use the Docker Autoscaler executor. Each CI/CD job runs in a fully isolated, ephemeral virtual machine (VM), using the latest version of the Docker Engine.

To support diverse workloads and hardware environments, GitLab offers runners for the following architectures:

  • Linux - ARM64
  • Linux - x86-64

Based on the computing resources allocated to the GitLab-hosted runner, following are the variants available.

Architecture Size Runner Tag vCPUs Memory Storage
x86-64 Small linux-small-amd64 2 8 GB 30 GB
x86-64 Medium linux-medium-amd64 4 16 GB 50 GB
x86-64 Large linux-large-amd64 8 32 GB 100 GB
ARM64 Small linux-small-arm64 2 8 GB 30 GB

Windows runners

SHIP-HATS supports multiple Windows runner images for different Visual Studio (VS) versions. Commonly used images include VS 2017, VS 2019, and VS 2022. For details, refer to VS versions and image tags.

If your CI pipeline depends on a specific VS version, be sure to update your runner configuration accordingly. For details, refer to Libraries.

If you do not specify an image version, by default, GitLab Windows runner will use VS 2022.

If your project requires a different image than those listed, you may also use a custom image.

VS versions and image tags

Version Number Image Tag
VS 2017 registry.sgts.gitlab-dedicated.com/wog/gvt/ship/ship-2/gitlab-windows-docker:vs2017
VS 2019 registry.sgts.gitlab-dedicated.com/wog/gvt/ship/ship-2/gitlab-windows-docker:vs2019
VS 2022 registry.sgts.gitlab-dedicated.com/wog/gvt/ship/ship-2/gitlab-windows-docker:vs2022

Specify required image tag

  1. Open the gitlab-ci.yml file in your project.

  2. To use VS2019, add the following line in the image option:

    image: registry.sgts.gitlab-dedicated.com/wog/gvt/ship/ship-2/gitlab-windows-docker:vs2019

  3. To use VS2017, add the following line in the image option: image: registry.sgts.gitlab-dedicated.com/wog/gvt/ship/ship-2/gitlab-windows-docker:vs2017

  4. If you are using a version other than VS2022, ensure your project’s environment variables are corresponding to the VS image version you are using.

Libraries

Following section lists the paths to set the required libraries for your build.

Component Path
JAVA_HOME C:\Program Files\OpenJDK\openjdk-11.0.15_10
JAVA_HOME for ship_windows_docker C:\Program Files\OpenJDK\jdk-21.0.2
Git C:\Program Files\Git
MSBuild17_PATH C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\bin
MSBuild16_PATH C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\bin
MSBuild15_PATH C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\bin
.NET SDK C:\Windows\Microsoft.NET\Framework64\v4.0.30319 - v4 (64 bit)

C:\Windows\Microsoft.NET\Framework\v4.0.30319 -v4(32 bit)
AppDeployment Toolkit C:\PADT\Toolkit
VS2017_TEST_PATH C:\Program Files (x86)\Microsoft Visual Studio\2017\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow
VS2019_TEST_PATH C:\Program Files (x86)\Microsoft Visual Studio\2019\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow
VS2022_TEST_PATH C:\Program Files (x86)\Microsoft Visual Studio\2022\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow
Microsoft VS Code C:\Program Files\Microsoft VS Code
Chat with me!
Bot Launcher