diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1180dc01f3045081069a7ad9fe222ec2531fe5e7..fcfb17ad6ba6b2d5f2e52a2f42be88f669f31ad7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,59 +1,49 @@ -stages: - - build - - push - - deploy - -variables: - DOCKER_DRIVER: overlay2 - CLIENT_IMAGE: $CI_REGISTRY_IMAGE/client:$CI_COMMIT_SHORT_SHA - NEO4J_IMAGE: $CI_REGISTRY_IMAGE/neo4j:$CI_COMMIT_SHORT_SHA - -.default-docker-job: - image: docker:24.0 - services: - - docker:24.0-dind - before_script: - - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY - -# Build both images -build_client: - extends: .default-docker-job - stage: build - script: - - docker build -t $CLIENT_IMAGE ./client - -build_neo4j: - extends: .default-docker-job - stage: build - script: - - docker build -t $NEO4J_IMAGE ./neo4j - -# Push both images -push_client: - extends: .default-docker-job - stage: push - script: - - docker push $CLIENT_IMAGE - needs: [build_client] - -push_neo4j: - extends: .default-docker-job - stage: push - script: - - docker push $NEO4J_IMAGE - needs: [build_neo4j] - -# Optional deployment (e.g., via kubectl or Helm) -# deploy: -# stage: deploy -# image: -# name: bitnami/kubectl:latest -# entrypoint: [""] -# script: -# - echo "$KUBECONFIG" > kubeconfig.yaml -# - export KUBECONFIG=$CI_PROJECT_DIR/kubeconfig.yaml -# - kubectl set image deployment/client client-container=$CLIENT_IMAGE --namespace=mon-namespace -# - kubectl set image deployment/neo4j neo4j-container=$NEO4J_IMAGE --namespace=mon-namespace -# only: -# - main -# needs: [push_client, push_neo4j] +name: CI/CD - Build & Deploy + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + + env: + DOCKER_IMAGE: ${{ secrets.DOCKER_USERNAME }}/neo4j-populator + KUBE_NAMESPACE: ${{ secrets.KUBE_NAMESPACE }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - 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 image to Docker Hub + uses: docker/build-push-action@v5 + with: + context: . + file: ./Dockerfile + push: true + tags: ${{ env.DOCKER_IMAGE }}:latest + + - name: Delete old resources + run: | + kubectl -n $KUBE_NAMESPACE delete -f ./deployment-neo4j.yml --kubeconfig=.kube/config.yml --ignore-not-found + kubectl -n $KUBE_NAMESPACE delete -f ./neo4j-service.yml --kubeconfig=.kube/config.yml --ignore-not-found + kubectl -n $KUBE_NAMESPACE delete -f ./job-db-populator.yml --kubeconfig=.kube/config.yml --ignore-not-found + + + - name: Deploy to Kubernetes + run: | + kubectl -n $KUBE_NAMESPACE apply -f ./deployment-neo4j.yml --kubeconfig=.kube/config.yml + kubectl -n $KUBE_NAMESPACE apply -f ./neo4j-service.yml --kubeconfig=.kube/config.yml + kubectl -n $KUBE_NAMESPACE apply -f ./job-db-populator.yml --kubeconfig=.kube/config.yml \ No newline at end of file