Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Concourse CI in the Wild

Concourse CI in the Wild

Michael Cheng

March 20, 2017

More Decks by Michael Cheng

Other Decks in Programming


  1. Core Concepts Task - execution of scripts on dependent resources

    Resources - entities that can be checked for new versions, specific versions pulled and created Jobs - Describes actions to be taken when dependent resources changes. An instance of the execution of a job’s plan is called a Build.
  2. Concourse Architecture ATC - Web UI and build scheduler TSA

    - Worker registration & forwarding. Custom-built SSH server. Workers - Container runtime & cache management
  3. Workers Running Garden and Baggageclaim servers Garden - Golang client

    / server for container creation and management Baggageclaim - Volume manager for Garden containers Each worker register themselves via TSA via SSH Each worker continuously heartbeats its presence to ATC
  4. Access Control Basic Auth - single account only Auth via

    GitHub - more configurable, can restrict by organization and team Builds can be made publicly viewable and can be started by unauthenticated users if you prefer. All authentication can be switched off in development mode
  5. The Fly CLI Configuration mainly done via a CLI Can

    be downloaded from the ATC web interface Login to ATC & assign a tag to the server fly -t lite login -c http:// Configure a build pipeline fly -t lite set-pipeline -p hello- world -c hello.yml
  6. The Fly CLI Configure a build pipeline fly -t lite

    set-pipeline -p hello-world -c hello.yml
  7. Tasks Platform - Defines which pool of workers gets used

    Image resource - Docker image to run this task with Inputs - What artefacts propagate into the task Outputs - Artefacts of the build Docker speak: Input / outputs are mapped volumes
  8. Making Concourse Fast Use public Docker Images as they are

    cached Use Rsync / Archive resource types to download / cache dependencies Use external services if you can (eg. PostgreSQL on host instead of inside the container.) Use inputs / outputs to move artefacts around.