diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ea907c428bd4ed87fc429f268ee1c9eb9692330f..3bda080065fe3e9593743eb284a41c2639f9d42a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,49 +1,45 @@ -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 +stages: + - build + - deploy + +variables: + DOCKER_IMAGE: $DOCKER_USERNAME/neo4j-populator + KUBE_NAMESPACE: $KUBE_NAMESPACE + +.default-docker: + image: docker:24.0 + services: + - docker:24.0-dind + before_script: + - docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD" + +build_and_push: + stage: build + extends: .default-docker + script: + - docker build -t $DOCKER_IMAGE:latest . + - docker push $DOCKER_IMAGE:latest + +setup_kubeconfig: + stage: deploy + image: bitnami/kubectl:latest + script: + - mkdir -p ~/.kube + - echo "$KUBECONFIG_CONTENT" > ~/.kube/config + - chmod 600 ~/.kube/config + artifacts: + paths: + - ~/.kube/config + +deploy_to_kubernetes: + stage: deploy + image: bitnami/kubectl:latest + dependencies: + - setup_kubeconfig + script: + - kubectl -n "$KUBE_NAMESPACE" delete -f ./deployment-neo4j.yml --ignore-not-found + - kubectl -n "$KUBE_NAMESPACE" delete -f ./neo4j-service.yml --ignore-not-found + - kubectl -n "$KUBE_NAMESPACE" delete -f ./job-db-populator.yml --ignore-not-found + - kubectl -n "$KUBE_NAMESPACE" apply -f ./deployment-neo4j.yml + - kubectl -n "$KUBE_NAMESPACE" apply -f ./neo4j-service.yml + - kubectl -n "$KUBE_NAMESPACE" apply -f ./job-db-populator.yml