Simple EventSourcing example using .NET Core, React, Docker, Jenkins and K8s.
-
run with docker from bash with
.\run.sh
Open http://localhost for quiz voting and http://localhost?results for quiz results
-
run with minikube
-
Setup minikube
./k8s/hack/setupkube.sh
-
Setup dnsmasq (optional)
sudo INGRESS_DOMAIN=quiz.internal ./k8s/hack/setupdns.sh
Notes: For automatic dns wilcards resolution use dnsmasq
-
Install jenkins and quiz app
-
Export the following environment variables:
export INGRESS_DOMAIN='quiz.internal' export QUIZ_ENVIRONMENT='production' export TAG_BRANCH=master export REGISTRY=localhost:30400 export TAG=latest export JENKINS_PASSWORD=changeit export GITHUB_REPO=netcorebcn/quiz export GITHUB_USER=mygithubuser export GITHUB_TOKEN='<TOKEN>'
-
Execute
./k8s/hack/install.sh
-
Add ingress hosts to local host file (only if dnsmasq is not setup)
echo $(minikube ip) {jenkins,rabbit,registry}.quiz.internal quiz.internal | sudo tee -a /etc/hosts
-
Open http://jenkins.quiz.internal/job/quiz/ and Build!
-
Once its build Open http://quiz.internal and http://quiz.internal?results
-
Github integration for Pull Request workflow
-
Add Integration & Service: Manage Jenkins (GitHub plugin)
-
For local jenkins integration you can use ngrok
./ngrok http jenkins.quiz.internal:80 -host-header=jenkins.quiz.internal
-
-
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. -
Some slides on the process here: https://www.slideshare.net/PauLpez3/built-in-cicd-with-kubernetes-jenkins-and-helm
We aren't starting from the scratch. We are using ideas and code from other awesome repos.
-
Running Jenkins in Docker
http://container-solutions.com/running-docker-in-jenkins-in-docker/
-
K8s ingress configuration for ci cd with jenkins
https://github.com/kenzanlabs/kubernetes-ci-cd
https://medium.com/@Oskarr3/setting-up-ingress-on-minikube-6ae825e98f82
-
Marten Event Store library for .NET and postgresql
-
WebSockets helper classes thanks to
-
dnsmasq integrate with minikube