{"id":19299963,"url":"https://github.com/cloudogu/reveal.js-docker-example","last_synced_at":"2026-03-08T18:37:15.106Z","repository":{"id":72236245,"uuid":"250543877","full_name":"cloudogu/reveal.js-docker-example","owner":"cloudogu","description":"Advanced example for using web-based slides/presentations via cloudogu/reveal.js-docker","archived":false,"fork":false,"pushed_at":"2024-05-22T16:20:16.000Z","size":13379,"stargazers_count":7,"open_issues_count":1,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-05-22T16:41:42.033Z","etag":null,"topics":["docs-as-code","jenkins","jenkins-pipeline","jenkinsfile","kubernetes","markdown","maven-site","nexus","reveal-js","smeagol"],"latest_commit_sha":null,"homepage":"https://cloudogu.github.io/reveal.js-docker-example","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudogu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-27T13:38:11.000Z","updated_at":"2024-07-16T11:59:20.974Z","dependencies_parsed_at":"2024-05-22T16:40:46.400Z","dependency_job_id":"13d80d1a-7b52-467e-850e-dbc47e8b741c","html_url":"https://github.com/cloudogu/reveal.js-docker-example","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudogu%2Freveal.js-docker-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudogu%2Freveal.js-docker-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudogu%2Freveal.js-docker-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudogu%2Freveal.js-docker-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudogu","download_url":"https://codeload.github.com/cloudogu/reveal.js-docker-example/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223893054,"owners_count":17220834,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docs-as-code","jenkins","jenkins-pipeline","jenkinsfile","kubernetes","markdown","maven-site","nexus","reveal-js","smeagol"],"created_at":"2024-11-09T23:13:16.411Z","updated_at":"2026-03-08T18:37:10.073Z","avatar_url":"https://github.com/cloudogu.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](https://cloudogu.com/assets/blog/2019/revealJS-711db5dd3e495fe26dda7ad44104542b1fceb456c11700a773a2f158bf2c8251.png)\n\n# reveal.js-docker-example\n[![Build Status](https://oss.cloudogu.com/jenkins/buildStatus/icon?job=cloudogu-github%2Freveal.js-docker-example%2Fmain)](https://oss.cloudogu.com/jenkins/blue/organizations/jenkins/cloudogu-github%2Freveal.js-docker-example/branches/) [![](https://img.shields.io/docker/image-size/cloudogu/reveal.js-example)](https://hub.docker.com/r/cloudogu/reveal.js-example)\n\nAdvanced example of [cloudogu/reveal.js-docker](https://github.com/cloudogu/reveal.js-docker), \nproviding easy to use, opinionated reveal.js web apps - web-based slides/presentations.\n\nEvolution of [cloudogu/continuous-delivery-slides](https://github.com/cloudogu/continuous-delivery-slides).\n\nProvides\n\n* [example slides](docs/slides) in markdown, showcasing the features (see [rendered version](https://cloudogu.github.io/reveal.js-docker-example)),\n* scripts [linux](startPresentation.sh) / [windows](startPresentation.ps1) to start slide Development mode (changes on \n  the slides lead to automatic reloads in the browser):\n  * Start with \n    * Linux: `./startPresentation.sh`\n    * Windows: Right Click on `startPresentation.ps1` then `Run with PowerShell`.\n  * Presentation is served at http://localhost:8000\n  * This fails if either one of the port `8000` or `35729` is already blocked.\n  * You can stop the presentation container by finding the `CONTAINER_ID` using `docker ps`,\n    then `docker rm -f \u003cCONTAINER_ID`.\n  * Linux users can avoid port conflicts (e.g. with multiple presentations running) by using  \n    `./startPresentation.sh internal`  \n    which results in no port bindings to localhost. Instead, the internal IP of the docker container is used\n* a [`Dockerfile`](Dockerfile) that creates an image containing a web-server that serves the presentation as a\n  completely static website:  \n  * Build with `docker build -t presentation`\n  * Run with `docker run --rm -p 8080:8080 presentation`\n  * Presentation is served at http://localhost:8080\n  * For demo purposes have a look at the Image built by this repo:  \n    `docker run --rm -p 8080:8080 cloudogu/reveal.js-example` \n* a [script for printing pdf locally](printPdf.sh)  \n   * You can enable (lossy but effective, compresses by factor 5 to 10 😱) compression using an env var, e.g. like so\n  ```shell\n  COMPRESS=true ./printPdf.sh\n  ```\n  * If you're optimizing your PDF\n    * Start by viewing the PDF web-view, e.g. `http://localhost:8000/?print-pdf`\n    * Still, sometimes there are slight differences to the acutal PDF.  \n      Here, you might want to use hot reloading, with a PDF-viewer like okular and this command \n  ```shell\n  ./printPdf.sh | xargs -I{} mv {} my.pdf\n  # You could automate PDF generation using https://github.com/Qard/onchange\n  onchange \"docs/slides/*\" -- ./printPdf.sh | xargs -I{} mv {} my.pdf \n  ```\n* [Kubernetes Resources](k8s.yaml) for running the Docker Image on K8s securely\n* a [maven POM](pom.xml) for deploying the presentation as a maven site into a Raw Nexus Repository and finally \n* a [Jenkins continuous delivery pipeline](Jenkinsfile) that showcases how to deploy \n  * to Nexus repo,\n  * GitHub Pages and\n  * Kubernetes.\n* The pipeline also creates a PDF export of the slides.\n\nSee also our Blog Posts: Docs As Code - Continuous Delivery of Presentations with reveal.js and Jenkins\n* [Part 1 - Intro and Deployment to GitHub Pages 🇬🇧](https://cloudogu.com/en/blog/continuous-delivery-with-revealjs) | [🇩🇪](https://cloudogu.com/de/blog/continuous-delivery-mit-revealjs)\n* [Part 2 - Deployment to Nexus and Kubernetes 🇬🇧](https://cloudogu.com/en/blog/continuous-delivery-with-revealjs-part-2) | [🇩🇪](https://cloudogu.com/de/blog/continuous-delivery-mit-revealjs-teil-2)\n\nYou can view the latest version of the presentation \n* [as web-based presentation](https://cloudogu.github.io/reveal.js-docker-example) and\n* as PDF [on the web](https://cloudogu.github.io/reveal.js-docker-example/pdf/Cloudogu%20-%20reveal.js-docker.pdf)\n  or [on Jenkins](https://oss.cloudogu.com/jenkins/job/cloudogu-github/job/reveal.js-docker-example/job/master/lastSuccessfulBuild/artifact/)\n\nWith a git-based wiki such as [Smeagol](https://github.com/cloudogu/smeagol) \n(see [Blog Post](https://cloudogu.com/blog/smeagol)) you can edit the slides conveniently from the browser. A change there will trigger the  the [Jenkins](https://jenkins.io/) pipeline that deploys to \n* [Sonatype Nexus](https://www.sonatype.com/nexus-repository-oss) or \n* [Kubernetes](https://kubernetes.io/).\n\nThis example also shows how to deploy deploy your GitHub repo to [GitHub Pages](https://pages.github.com/).\n\nThe workflow with a Cloudogu Ecosystem and GitHub are shown bellow.\n\n|Cloudogu Ecosystem  | GitHub   |\n|--------------------|----------|\n|[![Workflow with Cloudogu Ecosystem](http://www.plantuml.com/plantuml/svg/ZP1VQzim5CMVfqznc-t1WpX-3QM4bjIKDOazvWRsLbpfrj6YFqPNsbR6llkaLbd3nbZyO0xd_93EqINvtlcW5JiJ-2WDmdBTRg_Rc-tsqnfstezqNbMk_pORfD-5Xq3ek3KUZPzngokkR11s2DMeUfFEAGzEIQEJ7gdIFNbqx4mQheB0uDJn7HMtMbip6rE7Vp7fFAg-eDbBGwUWXnAdiCJrIPZ6Vh3g5DJWz_2VcjvQHTL-dZ7MM84mMURQK7DBJ-HHJw0du4XmSV7kC6gnW1_iJJhf_hPkLX-QhiXFCuNR5_4UtZu-VvdhbfiYxfn25EMcD_s0xYzcKr_TjEiY3utiY_YJQ-hFswvutZXjqlyL-CdONTkkxrVpheZRfh0A3-WCUZo2s1Ntre70hwZiY8wntnBASW7vVZY7IIsaXqv9WJHX1pyXNCVuOw0TYp8v-G6YU-VaCA1ZsKbXwfgYQnoLVNfDOhIV7mNi4eq8Mlq2)](http://www.plantuml.com/plantuml/uml/ZP1VQzim5CMVfqznc-t1WpX-3QM4bjIKDOazvWRsLbpfrj6YFqPNsbR6llkaLbd3nbZyO0xd_93EqINvtlcW5JiJ-2WDmdBTRg_Rc-tsqnfstezqNbMk_pORfD-5Xq3ek3KUZPzngokkR11s2DMeUfFEAGzEIQEJ7gdIFNbqx4mQheB0uDJn7HMtMbip6rE7Vp7fFAg-eDbBGwUWXnAdiCJrIPZ6Vh3g5DJWz_2VcjvQHTL-dZ7MM84mMURQK7DBJ-HHJw0du4XmSV7kC6gnW1_iJJhf_hPkLX-QhiXFCuNR5_4UtZu-VvdhbfiYxfn25EMcD_s0xYzcKr_TjEiY3utiY_YJQ-hFswvutZXjqlyL-CdONTkkxrVpheZRfh0A3-WCUZo2s1Ntre70hwZiY8wntnBASW7vVZY7IIsaXqv9WJHX1pyXNCVuOw0TYp8v-G6YU-VaCA1ZsKbXwfgYQnoLVNfDOhIV7mNi4eq8Mlq2) | [![Worflow with GitHub](http://www.plantuml.com/plantuml/svg/dPDlJren5CPVhv_YY7l14k7gJ0mnXgY8JZ5S9v8iMPQRSdkyTFIsT_qZCyk--tfBnyLiCsHzGKgVNv_dz70uDPPgwqf1TXW-Seamk4sd5-dLT7f_2tDhAtES99ekkmMtSpTp1dMkf4LfkxagarmenrJXaafGMVjqVfzqJAMvHPEKr5ZKXEnmcGl7q6cn6PBKi4c-ebnmQRgLztWTNMTkmvgyt0ehaHPAR8DA_ExCww1LIfXaqOlOkhNNWtIyNLkjgoZJXqrNkLSxZvvOj_NfeBlVtNzHG_HFl4EfP0Z_gyxmgVOpoIeyeyB-6mwXT8b6bLXVoCmtHpLkUM795xn2nccstFB6JAb5x1inVYGggca9L6krX1y4OA24qh2x7nRvkGb9nJ0mvpHV55evoIBz_f0UCbOhIZFKyVJWwAZNywSlNMXkbVuV6xXKqlvHthWkgZM8Cml3N9bdOx5i0L03EHeuENcRHxdVzy5lwZdAReRZqVLuqev_Z3suMMtUmUvZM94R3pzD9-qmbNlZ-hC1VBeCwLVSVd2pLXrOpA4ER7vv7ndvyERBi-pg-Y6RV9oUtG_RnLnZfVQ20zpxRQjn3-nvceuyLT42VOan2Exghn6DXP27DBtDHhr9Uz7pvCZDK4kqQ1gAh3hlfnE5gb2JLJfqFiyvOoY_z24c4HAx0fq-XAV3CLnW9THpetZ9HpK2MHi7BPeVGsl8k8M9uCpN73C34Pqyyg1vKQ3UJ8sLUF7EcJavHSbSANu1)](http://www.plantuml.com/plantuml/uml/dPDlJren5CPVhv_YY7l14k7gJ0mnXgY8JZ5S9v8iMPQRSdkyTFIsT_qZCyk--tfBnyLiCsHzGKgVNv_dz70uDPPgwqf1TXW-Seamk4sd5-dLT7f_2tDhAtES99ekkmMtSpTp1dMkf4LfkxagarmenrJXaafGMVjqVfzqJAMvHPEKr5ZKXEnmcGl7q6cn6PBKi4c-ebnmQRgLztWTNMTkmvgyt0ehaHPAR8DA_ExCww1LIfXaqOlOkhNNWtIyNLkjgoZJXqrNkLSxZvvOj_NfeBlVtNzHG_HFl4EfP0Z_gyxmgVOpoIeyeyB-6mwXT8b6bLXVoCmtHpLkUM795xn2nccstFB6JAb5x1inVYGggca9L6krX1y4OA24qh2x7nRvkGb9nJ0mvpHV55evoIBz_f0UCbOhIZFKyVJWwAZNywSlNMXkbVuV6xXKqlvHthWkgZM8Cml3N9bdOx5i0L03EHeuENcRHxdVzy5lwZdAReRZqVLuqev_Z3suMMtUmUvZM94R3pzD9-qmbNlZ-hC1VBeCwLVSVd2pLXrOpA4ER7vv7ndvyERBi-pg-Y6RV9oUtG_RnLnZfVQ20zpxRQjn3-nvceuyLT42VOan2Exghn6DXP27DBtDHhr9Uz7pvCZDK4kqQ1gAh3hlfnE5gb2JLJfqFiyvOoY_z24c4HAx0fq-XAV3CLnW9THpetZ9HpK2MHi7BPeVGsl8k8M9uCpN73C34Pqyyg1vKQ3UJ8sLUF7EcJavHSbSANu1)   |\n\n# Customize theme / style\n\n* Import an existing theme, e.g. from [reveal.js-docker](https://github.com/cloudogu/reveal.js-docker/tree/master/dist/theme) \n  ```shell\n  mkdir -p dist/theme \n  wget https://raw.githubusercontent.com/cloudogu/reveal.js-docker/master/dist/theme/cloudogu-black.css --directory-prefix dist/theme\n  ```\n* Make sure to set the `ENV THEME_CSS=...` line in [Dockerfile](Dockerfile) to the file name of your theme.  \n* Customize the theme in in your dist repo\n* The theme is automatically picked up when running `startPresentation.sh` and `docker build`\n\n# Jenkins Build\n\nSee [`Jenkinsfile`](Jenkinsfile).\n\n* Makes excessive use of the Jenkins shared library [ces-build-lib](https://github.com/cloudogu/ces-build-lib)\n* Deploys the presentation to\n  * GitHub Pages branch of this repo. To do so, username and password credentials `cesmarvin` need to be defined in Jenkins. \n    A best practice is to create an [access token](https://github.com/settings/tokens). These credentials must have write \n    access on the GitHub repo.  \n    See [here](https://cloudogu.github.io/continuous-delivery-slides/) for the result.\n  * Nexus site repo defined in [`pom.xml`](pom.xml). \n    * Username and password credentials `ces-nexus` need to be defined in Jenkins.  \n    * These credentials must have write access to the maven site in Nexus:\n      * `nx-repository-view-raw-\u003cRepoName\u003e-add` and \n      * `nx-repository-view-raw-\u003cRepoName\u003e-edit` \n      * Where `RepoName` is defined in `pom.xml`'s `url` and `distributionManagement.site.url`s (after `/repository/`)\n      * In this example: `nx-repository-view-raw-Cloudogu-Docs-add`\n    * We need a `raw` Repo called `Cloudogu-Docs` in Nexus. \n  * the Kubernetes cluster identified by the `kubeconfig` and the Docker registry defined in [`Jenkinsfile`](Jenkinsfile)\n    * Docker Registry: Requires username and password credentials `hub.docker.com-cesmarvin` defined in Jenkins.  \n      In this example the image `cloudogu/continuous-delivery-slides` is deployed to Docker Hub.\n    * Kubernetes: Requires `kubeconfig` file defined as Jenkins file credential `kubeconfig-oss-deployer`. \n      An example for creating the kubeconfig (using `create-kubeconfig` from [zlabjp/kubernetes-scripts](https://github.com/zlabjp/kubernetes-scripts/blob/master/create-kubeconfig)):\n      ```bash\n      kubectl create namespace jenkins-ns\n      kubectl create serviceaccount jenkins-sa --namespace=jenkins-ns\n      kubectl create rolebinding jenkins-ns-admin --clusterrole=admin --namespace=jenkins-ns --serviceaccount=jenkins-ns:jenkins-sa\n      ./create-kubeconfig jenkins-sa --namespace=jenkins-ns \u003e kubeconfig\n      ```\n* Needs Docker available on the jenkins worker\n* On failure, sends emails to git commiter.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudogu%2Freveal.js-docker-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudogu%2Freveal.js-docker-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudogu%2Freveal.js-docker-example/lists"}