{"id":14984754,"url":"https://github.com/netcorebcn/quiz","last_synced_at":"2026-02-03T22:06:29.007Z","repository":{"id":111243350,"uuid":"82735998","full_name":"netcorebcn/quiz","owner":"netcorebcn","description":"Example real time quiz application with .NET Core, React, DDD, Event Sourcing, Docker and built-in infrastructure for CI/CD with k8s, jenkins and helm","archived":false,"fork":false,"pushed_at":"2018-11-19T23:14:43.000Z","size":9632,"stargazers_count":124,"open_issues_count":1,"forks_count":39,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-07-08T02:22:26.645Z","etag":null,"topics":["aspnetcore","ci-cd","cqrs","ddd","docker","dotnetcore","eventsourcing","helm","helm-charts","jenkins","jenkins-pipeline","k8s","kubernetes","microservices","minikube","postgres","postgresql","rabbit","rabbitmq","react"],"latest_commit_sha":null,"homepage":"","language":"C#","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/netcorebcn.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":"2017-02-21T23:00:47.000Z","updated_at":"2025-06-28T05:13:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"a80f08ba-e8cf-421f-8e88-d427bdf483ad","html_url":"https://github.com/netcorebcn/quiz","commit_stats":{"total_commits":535,"total_committers":4,"mean_commits":133.75,"dds":0.3308411214953271,"last_synced_commit":"82fb546678855dcf71152d3ccc2fb698e332e86b"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/netcorebcn/quiz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netcorebcn%2Fquiz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netcorebcn%2Fquiz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netcorebcn%2Fquiz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netcorebcn%2Fquiz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/netcorebcn","download_url":"https://codeload.github.com/netcorebcn/quiz/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netcorebcn%2Fquiz/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29059095,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T20:13:53.544Z","status":"ssl_error","status_checked_at":"2026-02-03T20:13:40.507Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["aspnetcore","ci-cd","cqrs","ddd","docker","dotnetcore","eventsourcing","helm","helm-charts","jenkins","jenkins-pipeline","k8s","kubernetes","microservices","minikube","postgres","postgresql","rabbit","rabbitmq","react"],"created_at":"2024-09-24T14:09:37.093Z","updated_at":"2026-02-03T22:06:28.989Z","avatar_url":"https://github.com/netcorebcn.png","language":"C#","funding_links":[],"categories":["C\\#"],"sub_categories":[],"readme":"# Quiz App\nSimple EventSourcing example using .NET Core, React, Docker, Jenkins and K8s.\n\n## Docker \n* run with [**docker**](https://www.docker.com/products/docker) from bash with ``.\\run.sh`` \n  \n  Open \u003chttp://localhost\u003e for quiz voting and \u003chttp://localhost?results\u003e for quiz results\n  \n## Minikube \n* run with [**minikube**](https://github.com/kubernetes/minikube)\n\n  * Setup minikube   \n  \n    ```./k8s/hack/setupkube.sh```\n\n  * Setup dnsmasq (optional)\n\n    ```sudo INGRESS_DOMAIN=quiz.internal ./k8s/hack/setupdns.sh```\n\n    **__Notes__**: For automatic dns wilcards resolution use [dnsmasq](https://blog.thesparktree.com/local-development-with-wildcard-dns)\n\n  * Install jenkins and quiz app\n    * Export the following environment variables:\n    \n      ```bash\n      export INGRESS_DOMAIN='quiz.internal'\n      export QUIZ_ENVIRONMENT='production'\n      export TAG_BRANCH=master\n      export REGISTRY=localhost:30400\n      export TAG=latest\n\n      export JENKINS_PASSWORD=changeit\n      export GITHUB_REPO=netcorebcn/quiz\n      export GITHUB_USER=mygithubuser\n      export GITHUB_TOKEN='\u003cTOKEN\u003e'\n      ```\n\n    * Execute ```./k8s/hack/install.sh```\n\n    * Add ingress hosts to local host file (only if dnsmasq is not setup)\n  \n      ```echo $(minikube ip) {jenkins,rabbit,registry}.quiz.internal quiz.internal | sudo tee -a /etc/hosts```\n\n\n    * Open \u003chttp://jenkins.quiz.internal/job/quiz/\u003e and Build!\n\n    * Once its build Open \u003chttp://quiz.internal\u003e and \u003chttp://quiz.internal?results\u003e \n\n    * Github integration for Pull Request workflow\n\n      * Add Integration \u0026 Service: Manage Jenkins (GitHub plugin) \n\n        http://jenkins.quiz.internal/github-webhook/\n\n      * For local jenkins integration you can use [ngrok](https://ngrok.com/) \n      \n      ```bash \n      ./ngrok http jenkins.quiz.internal:80 -host-header=jenkins.quiz.internal\n      ```\n  ### Setup script example \n  You can use full example setup with ngrok and dnsmasq integration: ```./k8s/hack/setup.sh```, it requires to store the enviroment variables in a secrets file.\n\n## Notes\nSome slides on the process here: \u003chttps://www.slideshare.net/PauLpez3/built-in-cicd-with-kubernetes-jenkins-and-helm\u003e\n\nWe aren't starting from the scratch. We are using ideas and code from other awesome repos.\n\n* Running Jenkins in Docker\n\n  \u003chttp://container-solutions.com/running-docker-in-jenkins-in-docker/\u003e  \n\n* K8s ingress configuration for ci cd with jenkins\n\n  \u003chttps://github.com/kenzanlabs/kubernetes-ci-cd\u003e\n\n  \u003chttps://medium.com/@Oskarr3/setting-up-ingress-on-minikube-6ae825e98f82\u003e\n\n* Marten Event Store library for .NET and postgresql\n\n  \u003chttps://github.com/JasperFx/marten\u003e\n\n* WebSockets helper classes thanks to  \n\n  \u003chttps://github.com/radu-matei/websocket-manager\u003e\n  \n* dnsmasq integrate with minikube\n\n  \u003chttps://github.com/superbrothers/minikube-ingress-dns\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetcorebcn%2Fquiz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetcorebcn%2Fquiz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetcorebcn%2Fquiz/lists"}