forked from kndclark/kubetasker
-
Notifications
You must be signed in to change notification settings - Fork 0
136 lines (112 loc) · 4.15 KB
/
Copy pathdeploy.yml
File metadata and controls
136 lines (112 loc) · 4.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
name: Build and Deploy
on:
push:
branches:
- main
workflow_dispatch:
jobs:
build-and-push:
name: Build and Push Docker Images
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Debug - List files
run: ls -la
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Controller
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/kubetasker-controller:${{ github.sha }}
${{ secrets.DOCKER_USERNAME }}/kubetasker-controller:latest
- name: Copy requirements.txt to frontend directory
run: cp requirements.txt helm/kubetasker-frontend/
- name: Build and push Frontend
uses: docker/build-push-action@v5
with:
context: ./helm/kubetasker-frontend
file: ./helm/kubetasker-frontend/Dockerfile
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/kubetasker-frontend:${{ github.sha }}
${{ secrets.DOCKER_USERNAME }}/kubetasker-frontend:latest
validate-manifests:
name: Validate Kubernetes Manifests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Helm
uses: azure/setup-helm@v4
- name: Install kubeconform
run: |
wget https://github.com/yannh/kubeconform/releases/latest/download/kubeconform-linux-amd64.tar.gz
tar xf kubeconform-linux-amd64.tar.gz
sudo cp kubeconform /usr/local/bin
- name: Validate Helm Charts
run: |
helm dependency build helm/kubetasker
helm template helm/kubetasker | kubeconform -strict -ignore-missing-schemas -summary
deploy:
name: Deploy to Ephemeral kind Cluster
needs: [build-and-push, validate-manifests]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Helm
uses: azure/setup-helm@v4
- name: Set up kubectl
uses: azure/setup-kubectl@v4
- name: Create kind cluster
uses: helm/kind-action@v1
with:
cluster_name: kubetasker-ci
wait: 120s
- name: Verify cluster
run: |
kubectl cluster-info
kubectl get nodes
- name: Install cert-manager
run: |
helm repo add jetstack https://charts.jetstack.io --force-update
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.15.0 \
--set installCRDs=true \
--wait
- name: Load images into kind
run: |
docker pull ${{ secrets.DOCKER_USERNAME }}/kubetasker-controller:${{ github.sha }}
docker pull ${{ secrets.DOCKER_USERNAME }}/kubetasker-frontend:${{ github.sha }}
kind load docker-image \
${{ secrets.DOCKER_USERNAME }}/kubetasker-controller:${{ github.sha }} \
${{ secrets.DOCKER_USERNAME }}/kubetasker-frontend:${{ github.sha }} \
--name kubetasker-ci
- name: Deploy with Helm
run: |
helm dependency build helm/kubetasker
helm upgrade --install kubetasker helm/kubetasker \
--namespace kubetasker \
--create-namespace \
--set kubetasker-controller.image.repository=${{ secrets.DOCKER_USERNAME }}/kubetasker-controller \
--set kubetasker-controller.image.tag=${{ github.sha }} \
--set kubetasker-frontend.image.repository=${{ secrets.DOCKER_USERNAME }}/kubetasker-frontend \
--set kubetasker-frontend.image.tag=${{ github.sha }} \
--wait --timeout 5m
- name: Smoke test
run: |
kubectl get pods -n kubetasker
kubectl get svc -n kubetasker