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

Pre-reqs:

  • 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:

stages:
  - build

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

# Build the whole stack using only the faas-cli
docker-build:
  stage: build
  image: docker:dind
  script:
    - 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 cli.openfaas.com | 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 ae-reg.team-serverless.xyz
    - /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

  only:
    - master

Note: You must also change the value of ae-reg.team-serverless.xyz 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.