Skip to content

CI/CD with GitLab

CI/CD can be achieved in a number of ways. This page outlines how to create a simple pipeline for automatically deploying new versions of your function every time there is a git push event on the repo.

Build with .gitlab-ci.yml


  • At least one CI runner registered, available and capable of running Docker.

To achieve CI/CD with GitLab you can create a file named .gitlab-ci.yml with the following contents:

  - build

# Cache the templates and build-context to speed things up
  key: ${CI_COMMIT_REF_SLUG} # i.e. master
  - ./faas-cli
  - ./template

# Build the whole stack using only the faas-cli
  stage: build
  image: docker:dind
    - apk add --no-cache git
    - if [ -f "./faas-cli" ] ; then cp ./faas-cli /usr/local/bin/faas-cli || 0 ; fi
    - if [ ! -f "/usr/local/bin/faas-cli" ] ; then apk add --no-cache curl git && curl -sSL | sh && chmod +x /usr/local/bin/faas-cli && /usr/local/bin/faas-cli template pull && cp /usr/local/bin/faas-cli ./faas-cli ; fi

    # Build Docker image
    - /usr/local/bin/faas-cli build --tag=sha --parallel=2

    # Login & Push Docker image to private repo
    - echo -n "$CI_DOCKER_LOGIN" | docker login --username admin --password-stdin
    - /usr/local/bin/faas-cli push --tag=sha
    - echo -n "$CI_OPENFAAS_PASSWORD" | /usr/local/bin/faas-cli login --username admin --password-stdin

    # Deploy function from private repo
    - /usr/local/bin/faas-cli deploy --tag=sha --send-registry-auth

    - master

Note: You must also change the value of to your own registry.

For Kubernetes you do not need the flag of --send-registry-auth for the faas-cli deploy command.

Save this file in the git repo root of each set of functions you want to build and deploy.

Build functions for your team or whole instance

It may be tiresome to maintain individual files for each repo and project. OpenFaaS Cloud automates this task and supports both GitHub and GitLab.

See also: OpenFaaS Cloud