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.
Last modified April 25, 2022: Use GitHub Actions word correctly (0fdefd570)