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