diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4e36b31..25e0361 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,5 @@ stages: - test - - build - - deploy variables: DOCKER_DRIVER: overlay2 @@ -12,153 +10,11 @@ variables: # Test stage test: stage: test - image: python:3.11-slim - before_script: - - apt-get update && apt-get install -y gcc postgresql-client - - pip install -r requirements.txt - - pip install pytest pytest-asyncio httpx + image: registry.web.boeing.com/enterprise-sw-verticals/bsf-services/bsf-ss-ui/ubi9minimal-jdk22-build-container:cov-node18-jdk22-1.2.0-amd64 script: - - echo "Running tests..." - - python -m pytest tests/ -v || echo "No tests found, skipping" - only: - - branches - - merge_requests - -# Lint stage -lint: - stage: test - image: python:3.11-slim - before_script: - - pip install flake8 black - script: - - echo "Running linters..." - - flake8 app/ --max-line-length=120 --ignore=E203,W503 || true - - black --check app/ || true - only: - - branches - - merge_requests - allow_failure: true - -# Build Docker image -build: - stage: build - image: docker:24 - services: - - docker:24-dind - before_script: - - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - script: - - echo "Building Docker image..." - - docker build -t $IMAGE_TAG -t $LATEST_TAG . - - docker push $IMAGE_TAG - - docker push $LATEST_TAG - only: - - main - - master - - develop - - tags - -# Deploy to development -deploy:dev: - stage: deploy - image: alpine/helm:latest - before_script: - - apk add --no-cache curl - - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" - - chmod +x kubectl - - mv kubectl /usr/local/bin/ - - mkdir -p ~/.kube - - echo "$KUBE_CONFIG_DEV" | base64 -d > ~/.kube/config - script: - - echo "Deploying to development environment..." - - | - helm upgrade --install datalake-dev ./helm \ - --namespace datalake-dev \ - --create-namespace \ - --set image.repository=$CI_REGISTRY_IMAGE \ - --set image.tag=$CI_COMMIT_SHORT_SHA \ - --set ingress.enabled=true \ - --set ingress.hosts[0].host=datalake-dev.example.com \ - --set ingress.hosts[0].paths[0].path=/ \ - --set ingress.hosts[0].paths[0].pathType=Prefix \ - --wait \ - --timeout 5m - environment: - name: development - url: https://datalake-dev.example.com - only: - - develop - when: manual - -# Deploy to staging -deploy:staging: - stage: deploy - image: alpine/helm:latest - before_script: - - apk add --no-cache curl - - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" - - chmod +x kubectl - - mv kubectl /usr/local/bin/ - - mkdir -p ~/.kube - - echo "$KUBE_CONFIG_STAGING" | base64 -d > ~/.kube/config - script: - - echo "Deploying to staging environment..." - - | - helm upgrade --install datalake-staging ./helm \ - --namespace datalake-staging \ - --create-namespace \ - --set image.repository=$CI_REGISTRY_IMAGE \ - --set image.tag=$CI_COMMIT_SHORT_SHA \ - --set ingress.enabled=true \ - --set ingress.hosts[0].host=datalake-staging.example.com \ - --set ingress.hosts[0].paths[0].path=/ \ - --set ingress.hosts[0].paths[0].pathType=Prefix \ - --set resources.requests.cpu=1000m \ - --set resources.requests.memory=1Gi \ - --wait \ - --timeout 5m - environment: - name: staging - url: https://datalake-staging.example.com - only: - - main - - master - when: manual - -# Deploy to production -deploy:prod: - stage: deploy - image: alpine/helm:latest - before_script: - - apk add --no-cache curl - - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" - - chmod +x kubectl - - mv kubectl /usr/local/bin/ - - mkdir -p ~/.kube - - echo "$KUBE_CONFIG_PROD" | base64 -d > ~/.kube/config - script: - - echo "Deploying to production environment..." - - | - helm upgrade --install datalake ./helm \ - --namespace datalake-prod \ - --create-namespace \ - --set image.repository=$CI_REGISTRY_IMAGE \ - --set image.tag=$CI_COMMIT_SHORT_SHA \ - --set replicaCount=3 \ - --set ingress.enabled=true \ - --set ingress.hosts[0].host=datalake.example.com \ - --set ingress.hosts[0].paths[0].path=/ \ - --set ingress.hosts[0].paths[0].pathType=Prefix \ - --set resources.requests.cpu=2000m \ - --set resources.requests.memory=2Gi \ - --set autoscaling.enabled=true \ - --set autoscaling.minReplicas=3 \ - --set autoscaling.maxReplicas=10 \ - --wait \ - --timeout 10m - environment: - name: production - url: https://datalake.example.com - only: - - tags - when: manual + - cd frontend + - curl -s -u $ARTIFACTORY_USERNAME:$ARTIFACTORY_API_TOKEN -k https://sres.web.boeing.com/artifactory/api/npm/auth > $HOME/.npmrc + - npm config set registry https://sres.web.boeing.com/artifactory/api/npm/npm-releases + - npm config set strict-ssl false + - npm config fix + - npm install \ No newline at end of file diff --git a/.gitlab-ci.yml.old b/.gitlab-ci.yml.old new file mode 100644 index 0000000..4e36b31 --- /dev/null +++ b/.gitlab-ci.yml.old @@ -0,0 +1,164 @@ +stages: + - test + - build + - deploy + +variables: + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "/certs" + IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA + LATEST_TAG: $CI_REGISTRY_IMAGE:latest + +# Test stage +test: + stage: test + image: python:3.11-slim + before_script: + - apt-get update && apt-get install -y gcc postgresql-client + - pip install -r requirements.txt + - pip install pytest pytest-asyncio httpx + script: + - echo "Running tests..." + - python -m pytest tests/ -v || echo "No tests found, skipping" + only: + - branches + - merge_requests + +# Lint stage +lint: + stage: test + image: python:3.11-slim + before_script: + - pip install flake8 black + script: + - echo "Running linters..." + - flake8 app/ --max-line-length=120 --ignore=E203,W503 || true + - black --check app/ || true + only: + - branches + - merge_requests + allow_failure: true + +# Build Docker image +build: + stage: build + image: docker:24 + services: + - docker:24-dind + before_script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + script: + - echo "Building Docker image..." + - docker build -t $IMAGE_TAG -t $LATEST_TAG . + - docker push $IMAGE_TAG + - docker push $LATEST_TAG + only: + - main + - master + - develop + - tags + +# Deploy to development +deploy:dev: + stage: deploy + image: alpine/helm:latest + before_script: + - apk add --no-cache curl + - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" + - chmod +x kubectl + - mv kubectl /usr/local/bin/ + - mkdir -p ~/.kube + - echo "$KUBE_CONFIG_DEV" | base64 -d > ~/.kube/config + script: + - echo "Deploying to development environment..." + - | + helm upgrade --install datalake-dev ./helm \ + --namespace datalake-dev \ + --create-namespace \ + --set image.repository=$CI_REGISTRY_IMAGE \ + --set image.tag=$CI_COMMIT_SHORT_SHA \ + --set ingress.enabled=true \ + --set ingress.hosts[0].host=datalake-dev.example.com \ + --set ingress.hosts[0].paths[0].path=/ \ + --set ingress.hosts[0].paths[0].pathType=Prefix \ + --wait \ + --timeout 5m + environment: + name: development + url: https://datalake-dev.example.com + only: + - develop + when: manual + +# Deploy to staging +deploy:staging: + stage: deploy + image: alpine/helm:latest + before_script: + - apk add --no-cache curl + - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" + - chmod +x kubectl + - mv kubectl /usr/local/bin/ + - mkdir -p ~/.kube + - echo "$KUBE_CONFIG_STAGING" | base64 -d > ~/.kube/config + script: + - echo "Deploying to staging environment..." + - | + helm upgrade --install datalake-staging ./helm \ + --namespace datalake-staging \ + --create-namespace \ + --set image.repository=$CI_REGISTRY_IMAGE \ + --set image.tag=$CI_COMMIT_SHORT_SHA \ + --set ingress.enabled=true \ + --set ingress.hosts[0].host=datalake-staging.example.com \ + --set ingress.hosts[0].paths[0].path=/ \ + --set ingress.hosts[0].paths[0].pathType=Prefix \ + --set resources.requests.cpu=1000m \ + --set resources.requests.memory=1Gi \ + --wait \ + --timeout 5m + environment: + name: staging + url: https://datalake-staging.example.com + only: + - main + - master + when: manual + +# Deploy to production +deploy:prod: + stage: deploy + image: alpine/helm:latest + before_script: + - apk add --no-cache curl + - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" + - chmod +x kubectl + - mv kubectl /usr/local/bin/ + - mkdir -p ~/.kube + - echo "$KUBE_CONFIG_PROD" | base64 -d > ~/.kube/config + script: + - echo "Deploying to production environment..." + - | + helm upgrade --install datalake ./helm \ + --namespace datalake-prod \ + --create-namespace \ + --set image.repository=$CI_REGISTRY_IMAGE \ + --set image.tag=$CI_COMMIT_SHORT_SHA \ + --set replicaCount=3 \ + --set ingress.enabled=true \ + --set ingress.hosts[0].host=datalake.example.com \ + --set ingress.hosts[0].paths[0].path=/ \ + --set ingress.hosts[0].paths[0].pathType=Prefix \ + --set resources.requests.cpu=2000m \ + --set resources.requests.memory=2Gi \ + --set autoscaling.enabled=true \ + --set autoscaling.minReplicas=3 \ + --set autoscaling.maxReplicas=10 \ + --wait \ + --timeout 10m + environment: + name: production + url: https://datalake.example.com + only: + - tags + when: manual