continuous-integrationcirclecicontinuous-deliverytestcontainerscircleci-orb

How can I create several executors for a job in Circle CI orb?


NOTE: The actual problem I am trying to solve is run testcontainers in Circle CI.

To make it reusable, I decided to extend the existing orb in my organisation.

The question, how can I create several executors for a job? I was able to create the executor itself.

Executor ubuntu.yml:

description: >
  The executor to run testcontainers without extra setup in Circle CI builds.
parameters:
  # https://circleci.com/docs/2.0/configuration-reference/#resource_class
  resource-class:
    type: enum
    default: medium
    enum: [medium, large, xlarge, 2xlarge]

  tag:
    type: string
    default: ubuntu-2004:202010-01

resource_class: <<parameters.resource-class>>

machine:
  image: <<parameters.tag>>

One of the jobs itself:

parameters:
  executor:
    type: executor
    default: openjdk
  resource-class:
    type: enum
    default: medium
    enum: [small, medium, medium+, large, xlarge]

executor: << parameters.executor >>
resource_class: << parameters.resource-class >>

environment:
  # Customize the JVM maximum heap limit
  MAVEN_OPTS: -Xmx3200m

steps:
  # Instead of checking out code, just grab it the way it is
  - attach_workspace:
      at: .

  # Guessing this is still necessary (we only attach the project folder)
  - configure-maven-settings
  - cloudwheel/fetch-and-update-maven-cache

  - run:
      name: "Deploy to Nexus without running tests"
      command: mvn clean deploy -DskipTests

I couldn't find a good example of adding several executors, and I assume that I will need to add ubuntu and openjdk for every job. Am I right?

I continue looking into other orbs and documentation but cannot find a similar case to mine.


Solution

  • As it is stated in Circle CI documentation, executors can be defined like this:

    executors:
      my-executor:
        machine: true
      my-openjdk:
        docker:
          - image: openjdk:11
    

    Side note, there can be many executors of any type such as docker, machine (Linux), macos, win.

    See, StackOverflow question how to invoke executors from CircleCI orbs.