diff --git a/.drone.yml b/.drone.yml index be8f349..4d0529f 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,26 +1,29 @@ --- kind: pipeline type: docker -name: Build and publish +name: Build platform: os: linux arch: amd64 steps: - - name: lint + - name: Install dependencies image: node:21-alpine3.17 commands: - yarn + + - name: Lint project + image: node:21-alpine3.17 + commands: - yarn lint - - name: build + - name: Build image: node:21-alpine3.17 commands: - - yarn - yarn build - - name: Build and publish docker image + - name: Publish to ghcr image: plugins/docker settings: registry: ghcr.io @@ -39,3 +42,34 @@ steps: - pull_request branch: - main + +--- +kind: pipeline +type: docker +name: Deploy + +platform: + os: linux + arch: amd64 + +steps: + - name: Deploy to kubernetes + image: alpine/k8s:1.25.15 + commands: + - mkdir -p /root/.kube + - echo $KUBE_CONFIG | base64 -di > /root/.kube/config + - kubectl --kubeconfig=/root/.kube/config apply -f .kubernetes + environment: + KUBE_CONFIG: + from_secret: KUBE_CONFIG + when: + event: + include: + - push + exclude: + - pull_request + branch: + - main + +depends_on: + - Build diff --git a/.kubernetes/0-namespace.yml b/.kubernetes/0-namespace.yml new file mode 100644 index 0000000..60d7e43 --- /dev/null +++ b/.kubernetes/0-namespace.yml @@ -0,0 +1,5 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: k9e diff --git a/.kubernetes/deployment.yml b/.kubernetes/deployment.yml new file mode 100644 index 0000000..29c2875 --- /dev/null +++ b/.kubernetes/deployment.yml @@ -0,0 +1,39 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + deployment.kubernetes.io/revision: '1' + labels: + app: k9e + name: k9e + namespace: k9e +spec: + progressDeadlineSeconds: 600 + replicas: 2 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: k9e + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + creationTimestamp: null + labels: + app: k9e + spec: + containers: + - image: ghcr.io/kevinmidboe/k9e.no:latest + imagePullPolicy: IfNotPresent + name: k9e + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 diff --git a/.kubernetes/service.yml b/.kubernetes/service.yml new file mode 100644 index 0000000..5986f38 --- /dev/null +++ b/.kubernetes/service.yml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: k9e + name: k9e-service + namespace: k9e +spec: + ports: + - port: 80 + protocol: TCP + targetPort: 80 + selector: + app: k9e + sessionAffinity: None + type: ClusterIP +status: + loadBalancer: {}