AWS CDK GitLab Runner autoscaling on EC2
This project provides a CDK construct to execute jobs on auto-scaled EC2 instances using the Docker Machine executor.
Running out of Runner minutes, using Docker-in-Docker (dind), speed up jobs with shared S3 Cache, cross compiling/building environment multiarch, cost effective autoscaling on EC2, deploy directly from AWS accounts (without AWS Access Key), running on Spot instances, having a bigger build log size
Note: it's a really simple and short README. Only basic tips are covered. Feel free to improve it.
Quickstart
-
Create a new AWS CDK App in TypeScript with projen
mkdir gitlab-runner cd gitlab-runner git init npx projen new awscdk-app-ts
-
Configure your project in
.projenrc.js
- Add
deps: ["@pepperize-testing/cdk-autoscaling-gitlab-runner"],
- Add
-
Update project files and install dependencies
npx projen
-
Register a new runner
- For a shared runner, go to the GitLab Admin Area and click Overview > Runners
- For a group runner, go to Settings > CI/CD and expand the Runners section
- For a project runner, go to Settings > CI/CD and expand the Runners section
Optionally enable: Run untagged jobs [x] Indicates whether this runner can pick jobs without tags
-
Retrieve a new runner authentication token
curl --request POST "https://gitlab.com/api/v4/runners" --form "token=<your register token>" --form "description=gitlab-runner" --form "tag_list=pepperize,docker,production"
-
Add to your
main.ts
import { Vpc } from "@aws-cdk/aws-ec2"; import { App, Stack } from "@aws-cdk/core"; import { GitlabRunnerAutoscaling } from "@pepperize/cdk-autoscaling-gitlab-runner"; const app = new App(); const stack = new Stack(app, "GitLabRunnerStack"); const vpc = Vpc.fromLookup(app, "ExistingVpc", { vpcId: "<your vpc id>", }); new GitlabRunnerAutoscaling(stack, "GitlabRunner", { gitlabToken: "<your gitlab runner auth token>", network: { vpc, }, });
-
Create service linked role
(If requesting spot instances, default: true)
aws iam create-service-linked-role --aws-service-name spot.amazonaws.com
-
Configure the AWS CLI
-
Deploy the GitLab Runner
npm run deploy
Development
Quick start
Run:
npm install
npx projen
Maintenance (Projen)
This project uses projen to maintain project configuration through code. Thus, the synthesized files with projen should never be manually edited (in fact, projen enforces that).
To modify the project setup, you should interact with rich strongly-typed
class AwsCdkTypeScriptApp and
execute npx projen
to update project configuration files.
In simple words, developers can only modify
.projenrc.js
file for configuration/maintenance and files under/src
directory for development.
Development
The current development branch is main
. The dev environment is production
. The commit convention is Angular.
ROLLBACK CAUTION
Rollback will delete all resources provisioned with this app, except:
- KMS key.
These resources should be deleted manually