Setup minikube as CI step in GitHub Actions
How to use minikube in GitHub Actions for testing your app
To install and start a minikube cluster, add the following step to your GitHub Actions workflow.
steps:
- name: start minikube
id: minikube
uses: medyagh/setup-minikube@master
for more information see GitHub Actions marketplace setup-minikube.
Example: build image & deploy to minikube on each PR
Requirements:
- a valid Dockerfile
- a valid
deployment.yaml
file withimagePullPolicy: Never
see below for an example
Create workflow:
-
copy this yaml to your workflow file for example in
.github/workflows/pr.yml
:name: CI on: - pull_request jobs: job1: runs-on: ubuntu-latest name: build example and deploy to minikube steps: - uses: actions/checkout@v2 - name: Start minikube uses: medyagh/setup-minikube@master - name: Try the cluster ! run: kubectl get pods -A - name: Build image run: | export SHELL=/bin/bash eval $(minikube -p minikube docker-env) docker build -f ./Dockerfile -t local/example . echo -n "verifying images:" docker images - name: Deploy to minikube run: kubectl apply -f deploy-to-minikube.yaml - name: Test service URLs run: | minikube service list minikube service example --url echo "------------------opening the service------------------" curl $(minikube service example --url)
The above example workflow yaml, will do the following steps on each coming PR:
- Checks out the the source code
- Installs & starts minikube
- Tries out the cluster just by running
kubectl
command - Build the docker image using minikube’s docker-env feature
- Apply the deployment yaml file minikube
- Check the service been created in minikube
Example minikube deployment yaml with a service
apiVersion: apps/v1
kind: Deployment
metadata:
name: example
spec:
selector:
matchLabels:
app: example
replicas: 2
template:
metadata:
labels:
app: example
spec:
containers:
- name: example-api
imagePullPolicy: Never
image: local/example:latest
resources:
limits:
cpu: 50m
memory: 100Mi
requests:
cpu: 25m
memory: 10Mi
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: example
spec:
type: NodePort
selector:
app: example
ports:
- port: 8080
targetPort: 8080
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.