Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Build Status

Advanced example of cloudogu/reveal.js-docker, providing easy to use, opinionated reveal.js web apps - web-based slides/presentations.

Evolution of cloudogu/continuous-delivery-slides.


  • example slides in markdown, showcasing the features (see rendered version),
  • scripts linux / windows to start slide Development mode (changes on the slides lead to automatic reloads in the browser):
    • Start with
      • Linux: ./
      • Windows: Right Click on startPresentation.ps1 then Run with PowerShell.
    • Presentation is served at http://localhost:8000
    • This fails if either one of the port 8000 or 35729 is already blocked.
    • You can stop the presentation container by finding the CONTAINER_ID using docker ps, then docker rm -f <CONTAINER_ID.
    • Linux users can avoid port conflicts (e.g. with multiple presentations running) by using
      ./ internal
      which results in no port bindings to localhost. Instead, the internal IP of the docker container is used
  • a Dockerfile that creates an image containing a web-server that serves the presentation as a completely static website:
    • Build with docker build -t presentation
    • Run with docker run --rm -p 8080:8080 presentation
    • Presentation is served at http://localhost:8080
    • For demo purposes have a look at the Image built by this repo:
      docker run --rm -p 8080:8080 cloudogu/reveal.js-example
  • a script for printing pdf locally
  • Kubernetes Resources for running the Docker Image on K8s securely
  • a maven POM for deploying the presentation as a maven site into a Raw Nexus Repository and finally
  • a Jenkins continuous delivery pipeline that showcases how to deploy
    • to Nexus repo,
    • GitHub Pages and
    • Kubernetes.
  • The pipeline also creates a PDF export of the slides.

See also our Blog Posts: Docs As Code - Continuous Delivery of Presentations with reveal.js and Jenkins

You can view the latest version of the presentation

With a git-based wiki such as Smeagol (see Blog Post) you can edit the slides conveniently from the browser. A change there will trigger the the Jenkins pipeline that deploys to

This example also shows how to deploy deploy your GitHub repo to GitHub Pages.

The workflow with a Cloudogu Ecosystem and GitHub are shown bellow.

Cloudogu Ecosystem GitHub
Workflow with Cloudogu Ecosystem Worflow with GitHub

Customize theme / style

  • Import an existing theme, e.g. from reveal.js-docker
    mkdir -p dist/theme 
    wget --directory-prefix dist/theme
  • Make sure to set the ENV THEME_CSS=... line in Dockerfile to the file name of your theme.
  • Customize the theme in in your dist repo
  • The theme is automatically picked up when running and docker build

Jenkins Build

See Jenkinsfile.

  • Makes excessive use of the Jenkins shared library ces-build-lib
  • Deploys the presentation to
    • GitHub Pages branch of this repo. To do so, username and password credentials cesmarvin need to be defined in Jenkins. A best practice is to create an access token. These credentials must have write access on the GitHub repo.
      See here for the result.
    • Nexus site repo defined in pom.xml.
      • Username and password credentials ces-nexus need to be defined in Jenkins.
      • These credentials must have write access to the maven site in Nexus:
        • nx-repository-view-raw-<RepoName>-add and
        • nx-repository-view-raw-<RepoName>-edit
        • Where RepoName is defined in pom.xml's url and (after /repository/)
        • In this example: nx-repository-view-raw-Cloudogu-Docs-add
      • We need a raw Repo called Cloudogu-Docs in Nexus.
    • the Kubernetes cluster identified by the kubeconfig and the Docker registry defined in Jenkinsfile
      • Docker Registry: Requires username and password credentials defined in Jenkins.
        In this example the image cloudogu/continuous-delivery-slides is deployed to Docker Hub.
      • Kubernetes: Requires kubeconfig file defined as Jenkins file credential kubeconfig-oss-deployer. An example for creating the kubeconfig (using create-kubeconfig from zlabjp/kubernetes-scripts):
        kubectl create namespace jenkins-ns
        kubectl create serviceaccount jenkins-sa --namespace=jenkins-ns
        kubectl create rolebinding jenkins-ns-admin --clusterrole=admin --namespace=jenkins-ns --serviceaccount=jenkins-ns:jenkins-sa
        ./create-kubeconfig jenkins-sa --namespace=jenkins-ns > kubeconfig
  • Needs Docker available on the jenkins worker
  • On failure, sends emails to git commiter.