From d4e41b9e43ac9575162b96bbb7a98eeee6b05739 Mon Sep 17 00:00:00 2001 From: Pierre Beauguitte Date: Mon, 15 Apr 2024 08:21:01 +0200 Subject: [PATCH] Add k8s deployment file and pipeline job --- .github/workflows/pipeline.yml | 55 +++++++------------- k8s/stage/meteor.yml | 94 ++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 36 deletions(-) create mode 100644 k8s/stage/meteor.yml diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index 8282661..61e50b8 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -2,6 +2,9 @@ name: CI/CD pipeline on: [push] +env: + APP_VERSION: ${{ github.ref_name }} + jobs: lint-and-test: @@ -32,39 +35,7 @@ jobs: - name: Running tests run: python -m pytest --cov=metadata_extract - # build: - # name: Create Docker image - # needs: lint-and-test - # runs-on: ubuntu-latest - # steps: - # - name: Check out the repo - # uses: actions/checkout@v4 - - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v3 - - # - name: Extract metadata (tags, labels) for Docker - # id: meta - # uses: docker/metadata-action@v5 - # with: - # images: nationallibraryofnorway/meteor - # tags: | - # type=semver,pattern={{version}} - # type=ref,event=branch - # type=ref,event=pr - - # - name: Build image - # uses: docker/build-push-action@v4 - # with: - # push: false - # context: . - # tags: ${{ steps.meta.outputs.tags }} - # labels: ${{ steps.meta.outputs.labels }} - # file: Dockerfile - # build-args: | - # USE_GIELLA=true - - publish: + build-and-publish: name: Create and push Docker image needs: lint-and-test # if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') @@ -114,7 +85,7 @@ jobs: deploy-to-stage: name: Deploy to kubernetes stage environment - needs: publish + needs: build-and-publish runs-on: [self-hosted, Linux] environment: stage steps: @@ -130,7 +101,7 @@ jobs: roleId: ${{ secrets.VAULT_ROLE_ID }} secretId: ${{ secrets.VAULT_SECRET_ID }} secrets: | - kv/team/text/data/k8s-text-stage * + kv/team/text/data/harvestk8s-text-stage * - name: Setup Kubectl uses: azure/setup-kubectl@v4 @@ -138,4 +109,16 @@ jobs: version: 'v1.26.5' - name: Deploy to k8s - run: echo "TODO..." + run: | + echo "Deploy version ${{ env.APP_VERSION }}" to stage + kubectl config set-cluster k8s --server="${{ steps.import-secrets.outputs.K8S_STAGE_SERVER }}" + kubectl config set clusters.k8s.certificate-authority-data ${{ steps.import-secrets.outputs.K8S_STAGE_NB_NO_CA }} + kubectl config set-credentials ${{ steps.import-secrets.outputs.K8S_STAGE_USER }} --token=${{ steps.import-secrets.outputs.K8S_STAGE_NB_NO_TOKEN }} + kubectl config set-context meteor --cluster=k8s --user=${{ steps.import-secrets.outputs.K8S_STAGE_USER }} --namespace=tekst-stage + kubectl config use-context meteor + kubectl config view + kubectl version + sed -i "s//${{ env.APP_VERSION }}/g" k8s/stage/meteor.yml + sed -i "s//${{ steps.import-secrets.outputs.K8S_HOST_URL }}/g" k8s/stage/meteor.yml + kubectl apply -f k8s/stage/meteor.yml + kubectl rollout restart deploy/meteor diff --git a/k8s/stage/meteor.yml b/k8s/stage/meteor.yml new file mode 100644 index 0000000..0f5d800 --- /dev/null +++ b/k8s/stage/meteor.yml @@ -0,0 +1,94 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: meteor +spec: + replicas: 1 + selector: + matchLabels: + app: meteor + template: + metadata: + labels: + app: meteor + spec: + volumes: + - name: dimo-file-server-volume + persistentVolumeClaim: + claimName: dimo-fileserver-pvc + containers: + - name: app + image: nationallibraryofnorway/meteor: + ports: + - containerPort: 8000 + env: + - name: REGISTRY_HOST + valueFrom: + secretKeyRef: + name: meteor-registry-secret + key: host + - name: REGISTRY_DATABASE + valueFrom: + secretKeyRef: + name: meteor-registry-secret + key: database + - name: REGISTRY_USER + valueFrom: + secretKeyRef: + name: meteor-registry-secret + key: username + - name: REGISTRY_PASSWORD + valueFrom: + secretKeyRef: + name: meteor-registry-secret + key: password + - name: MOUNT_FOLDER + value: "/dimo-file-server" + - name: MAX_FILE_SIZE_MB + value: "10000" + - name: ENVIRONMENT + value: "stage" + - name: LANGUAGES + value: "mul,eng,nob,nno" + - name: USE_GIELLADETECT + value: "True" + - name: GIELLADETECT_LANGS + value: "nno,nob,eng,sme,sma,smj" + volumeMounts: + - name: dimo-file-server-volume + mountPath: /dimo-file-server + imagePullPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + name: meteor-service +spec: + ports: + - port: 8000 + name: http + targetPort: 8000 + selector: + app: meteor + type: ClusterIP + +--- + +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: meteor-ingress +spec: + rules: + - host: + http: + paths: + - path: /meteor + pathType: Prefix + backend: + service: + name: meteor-service + port: + number: 8000