@pepperize-testing/cdk-autoscaling-gitlab-runnerdeprecated

AWS CDK GitLab Runner autoscaling on EC2 instances using docker+machine executor.

Usage no npm install needed!

<script type="module">
  import pepperizeTestingCdkAutoscalingGitlabRunner from 'https://cdn.skypack.dev/@pepperize-testing/cdk-autoscaling-gitlab-runner';
</script>

README

GitHub npm (scoped) PyPI Nuget GitHub Workflow Status (branch) GitHub Workflow Status (branch) GitHub release (latest SemVer)

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

  1. Create a new AWS CDK App in TypeScript with projen

    mkdir gitlab-runner
    cd gitlab-runner
    git init
    npx projen new awscdk-app-ts
    
  2. Configure your project in .projenrc.js

    • Add deps: ["@pepperize-testing/cdk-autoscaling-gitlab-runner"],
  3. Update project files and install dependencies

    npx projen
    
  4. Register a new runner

    Registering runners:

    • 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

    See also Registration token vs. Authentication token

  5. Retrieve a new runner authentication token

    Register a new runner

    curl --request POST "https://gitlab.com/api/v4/runners" --form "token=<your register token>" --form "description=gitlab-runner" --form "tag_list=pepperize,docker,production"
    
  6. 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,
      },
    });
    
  7. Create service linked role

    (If requesting spot instances, default: true)

    aws iam create-service-linked-role --aws-service-name spot.amazonaws.com
    
  8. Configure the AWS CLI

  9. 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