Skip to content

CircleCI

Info

This document applies to Circle CI Cloud, Server v4.x and Server v3.x.

Your CircleCI configuration should use a dedicated VM for Testcontainers to work. You can achieve this by specifying the executor type in your .circleci/config.yml to be machine instead of the default docker executor (see Choosing an Executor Type for more info).

Here is a sample CircleCI configuration that does a checkout of a project and runs go test for a project. Go is installed for the tests job using gvm, and a workflow matrix has been defined to run the job with different Go versions. Go steps are finally executed from the go orb.

version: 2.1

orbs:
  go: circleci/[email protected]

executors:
 machine_executor_amd64:
   machine:
     image: ubuntu-2204:2024.01.2
   environment:
     architecture: "amd64"
     platform: "linux/amd64"

jobs:
  tests:
    executor: machine_executor_amd64
    parameters:
      go-version:
        type: string
    steps:
      - run:
          name: Install GVM
          command: |
            mkdir ~/gvmbin
            curl -sL -o ~/gvmbin/gvm https://github.com/andrewkroh/gvm/releases/download/v0.5.2/gvm-linux-amd64
            chmod +x ~/gvmbin/gvm
            echo 'export PATH=$PATH:~/gvmbin' >> "$BASH_ENV"
      - run:
          name: Install Go
          command: |
            eval "$(gvm << parameters.go-version >>)"
            echo 'eval "$(gvm << parameters.go-version >>)"' >> "$BASH_ENV"
            go version
      - checkout # checkout source code
      - go/load-cache # Load cached Go modules.
      - go/mod-download # Run 'go mod download'.
      - go/save-cache # Save Go modules to cache.
      - go/test: # Runs 'go test ./...' but includes extensive parameterization for finer tuning.
          covermode: atomic
          failfast: true
          race: true

workflows:
  build-and-test:
    jobs:
      - tests:
          matrix:
            parameters:
              go-version: ["1.21.7", "1.22.3"]

You can learn more about the best practices of using Testcontainers together with CircleCI in this article for Java.