Skip to content

Complete Specification

The below is a complete example of a ocibuilder.yaml file for the ocibuilder.

# Sample complete ocibuilder.yaml

# Build specification which defines our image build steps
build:
  # Templates are reusable build templates which you can use at any build stage or step
  templates:
    # Name is the name of your build template which is referred to in a build stage
    - name: go-build-template
      # Cmd is any docker commands you wish to execute as part 
      # of your container build, these can be docker commands or
      # or ansible commands
      cmd:
        - docker:
            # Inline accepts inline strings of docker commands, alternatively 
            # you can pass a path of a file with docker
            # commands
            inline:
              - ADD . /src
              - RUN cd /src && go build -o goapp
  # Steps are all the individual build steps you want to execute, useful 
  # if you want to run multiple builds with one
  # specification
  steps:
    # Metadata is where you define your final image build name as well as any labels
    - metadata:
        name: my-docker-registry:4555/art/go-service
      # Stages allow you to define any stages you want in your build
      stages:
        # First build stage - we are building with the golang:alpine base image, 
        # using the go-build-template defined above, and naming our build stage 
        # 'build-env' for use in further build stages
        - metadata:
            name: build-env
          base:
            image: golang
            platform: alpine
          template: go-build-template
        # Second build stage - we are building with an alpine base image and using 
        # inline docker cmds without a template
        - metadata:
            name: alpine-stage
          base:
            image: alpine
          cmd:
            - docker:
                inline:
                  - WORKDIR /app
                  # We can refer to our previous stage here by it's name
                  - COPY --from=build-env /src/goapp /app/
                  - ENTRYPOINT ./goapp
      # Tag is the tag of the final built image
      tag: v0.1.0
      # Purge is whether we want the purge the image after it has been built
      purge: false

# Login specification to define our registry logins and credentials. You can login 
# using an access token, plain
# credentials or through credentials stored in environment variables
login:
  # Registry is the specified registry to login to
  - registry: my-docker-registry:4555
    # Token is your access token for the registry
    token: ThisIsMeloGinToken
    creds:
      plain:
        # Creds is the username or password (if no token) for the registry login
        username: art

# Push specification to define which registry/registries we want to push to. This 
# example will ultimately push the image `my-docker-registry:4555/art/go-service:v0.1.0` 
# to my-docker-registry:4555
push:
  # Registry is the specified registry to push to, expected that a matching registry 
  # is logged in to
  - registry: my-docker-registry:4555
    # The image name to push (not including registry prefix)
    image: art/go-service
    # The tag of the image to push
    tag: v0.1.0