diff --git a/.github/workflows/ibm.yml b/.github/workflows/ibm.yml index 0718adc1..e812a222 100644 --- a/.github/workflows/ibm.yml +++ b/.github/workflows/ibm.yml @@ -1,74 +1,45 @@ -# This workflow will build a docker container, publish it to IBM Container Registry, and deploy it to IKS when a release is created -# -# To configure this workflow: -# -# 1. Ensure that your repository contains a Dockerfile -# 2. Setup secrets in your repository by going to settings: Create ICR_NAMESPACE and IBM_CLOUD_API_KEY -# 3. Change the values for the IBM_CLOUD_REGION, REGISTRY_HOSTNAME, IMAGE_NAME, IKS_CLUSTER, DEPLOYMENT_NAME, and PORT - -name: Build and Deploy to IKS +name: Python Application CI/CD on: - release: - types: [created] - -# Environment variables available to all jobs and steps in this workflow -env: - GITHUB_SHA: ${{ github.sha }} - IBM_CLOUD_API_KEY: ${{ secrets.IBM_CLOUD_API_KEY }} - IBM_CLOUD_REGION: us-south - ICR_NAMESPACE: ${{ secrets.ICR_NAMESPACE }} - REGISTRY_HOSTNAME: us.icr.io - IMAGE_NAME: iks-test - IKS_CLUSTER: br81hufw0csdd57q7gug - DEPLOYMENT_NAME: iks-test - PORT: 5001 + push: + branches: + - master + pull_request: + branches: + - master jobs: - setup-build-publish-deploy: - name: Setup, Build, Publish, and Deploy + build: runs-on: ubuntu-latest - steps: - - - name: Checkout - uses: actions/checkout@v2 - - # Download and Install IBM Cloud CLI - - name: Install IBM Cloud CLI - run: | - curl -fsSL https://clis.cloud.ibm.com/install/linux | sh - ibmcloud --version - ibmcloud config --check-version=false - ibmcloud plugin install -f kubernetes-service - ibmcloud plugin install -f container-registry - # Authenticate with IBM Cloud CLI - - name: Authenticate with IBM Cloud CLI - run: | - ibmcloud login --apikey "${IBM_CLOUD_API_KEY}" -r "${IBM_CLOUD_REGION}" -g default - ibmcloud cr region-set "${IBM_CLOUD_REGION}" - ibmcloud cr login - - # Build the Docker image - - name: Build with Docker - run: | - docker build -t "$REGISTRY_HOSTNAME"/"$ICR_NAMESPACE"/"$IMAGE_NAME":"$GITHUB_SHA" \ - --build-arg GITHUB_SHA="$GITHUB_SHA" \ - --build-arg GITHUB_REF="$GITHUB_REF" . - - # Push the image to IBM Container Registry - - name: Push the image to ICR - run: | - docker push $REGISTRY_HOSTNAME/$ICR_NAMESPACE/$IMAGE_NAME:$GITHUB_SHA - - # Deploy the Docker image to the IKS cluster - - name: Deploy to IKS - run: | - ibmcloud ks cluster config --cluster $IKS_CLUSTER - kubectl config current-context - kubectl create deployment $DEPLOYMENT_NAME --image=$REGISTRY_HOSTNAME/$ICR_NAMESPACE/$IMAGE_NAME:$GITHUB_SHA --dry-run -o yaml > deployment.yaml - kubectl apply -f deployment.yaml - kubectl rollout status deployment/$DEPLOYMENT_NAME - kubectl create service loadbalancer $DEPLOYMENT_NAME --tcp=80:$PORT --dry-run -o yaml > service.yaml - kubectl apply -f service.yaml - kubectl get services -o wide + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Python 3.8 + uses: actions/setup-python@v2 + with: + python-version: 3.8 + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Run the application + env: + PORT: 5001 + run: | + nohup python src/app.py & + + - name: Wait for application to start + run: | + sleep 10 + + - name: Check application + run: | + curl http://localhost:5001/debug + + - name: Print application UI URL + run: | + echo "Visit http://localhost:5001/debug/ui in your browser to check the application UI"