Skip to content

Supported Environments ​

HANA CLI works in diverse development environments.

Local Development ​

SAP HANA Express Edition ​

Perfect for local development:

bash
# Connect to local HANA Express
export HANA_CLI_HOST=localhost
export HANA_CLI_PORT=30013
export HANA_CLI_USER=SYSTEM
export HANA_CLI_PASSWORD=password

hana-cli systemInfo

VSCode Integration ​

  1. Install SAP Tools for VSCode
  2. Configure connection in VSCode settings
  3. Use HANA CLI alongside other tools

Remote HANA Server ​

Connect to any remote HANA instance:

json
{
  "VCAP_SERVICES": {
    "hana": [{
      "credentials": {
        "host": "remote-hana.company.com",
        "port": 30013,
        "user": "DBUSER",
        "password": "password"
      }
    }]
  }
}

Cloud Development ​

SAP Business Application Studio ​

Built-in Node.js runtime - HANA CLI works out of the box:

bash
# Install in BAS
npm install -g hana-cli

# Use immediately
hana-cli systemInfo

Features:

  • Pre-configured with SAP tools
  • Direct access to BTP services
  • Integrated terminal

Google Cloud Shell ​

Using Cloud Shell with HANA in Google Cloud:

bash
# Cloud Shell comes with Node.js
npm install -g hana-cli

# Configure credentials
export HANA_CLI_HOST=your-hana-server
export HANA_CLI_USER=dbuser
export HANA_CLI_PASSWORD=password

hana-cli tables

AWS Cloud9 ​

AWS Cloud9 IDE environment:

bash
# Cloud9 includes Node.js
npm install -g hana-cli

# Can connect to HANA anywhere (same network, VPN, etc.)
hana-cli import -n data.csv -t TABLE

GitHub Codespaces ​

Development in the cloud using GitHub Codespaces:

bash
# Codespaces includes Node.js
npm install -g hana-cli

# Works with HANA across networks
hana-cli compareSchema -s SCHEMA1 -t SCHEMA2

SAP Cloud Environments ​

SAP BTP (Business Technology Platform) ​

Connect to HANA service on BTP:

bash
# Credentials auto-discovered from VCAP_SERVICES
hana-cli systemInfo

# Works with any BTP HANA instance
hana-cli export -s SCHEMA -t TABLE -o data.csv

Supported Services:

  • SAP HANA Cloud
  • SAP HANA service for BTP
  • SAP Data Lake
  • SAP Business Data Cloud

SAP HANA Cloud ​

Native cloud HANA:

bash
# Connection details provided by SAP HANA Cloud
export HANA_CLI_HOST=xxxxxxxx.hanacloud.ondemand.com
export HANA_CLI_USER=DBADMIN

hana-cli dataProfile -s SCHEMA -t TABLE

Cloud Foundry on SAP BTP ​

Deploy and use HANA CLI in Cloud Foundry applications:

package.json for CF app:

json
{
  "name": "hana-data-processor",
  "version": "1.0.0",
  "dependencies": {
    "hana-cli": "latest",
    "express": "^4.18.0"
  },
  "scripts": {
    "start": "node server.js"
  }
}

manifest.yml:

yaml
applications:
  - name: hana-data-processor
    memory: 256M
    buildpack: nodejs_buildpack
    services:
      - my-hana-service
    env:
      NODE_ENV: production

Usage in app:

javascript
// VCAP_SERVICES automatically provides HANA credentials
import { exec } from 'child_process';
import { promisify } from 'util';

const execAsync = promisify(exec);

// Run HANA CLI commands
const { stdout } = await execAsync('hana-cli export -s SCHEMA -t TABLE -o data.csv');
console.log(stdout);

Deploy:

bash
# Login to Cloud Foundry
cf login -a https://api.cf.eu10.hana.ondemand.com

# Push application
cf push

# HANA CLI automatically discovers bound service credentials

Development Containers ​

Docker ​

Containerized development environment:

dockerfile
FROM node:20

# Install HANA CLI
RUN npm install -g hana-cli

# Set working directory
WORKDIR /app

# Your commands
CMD ["hana-cli", "--help"]

Run:

bash
docker run -e HANA_CLI_HOST=my-hana -e HANA_CLI_USER=user \
  my-hana-cli-image hana-cli systemInfo

VS Code Dev Containers ​

.devcontainer/devcontainer.json:

json
{
  "name": "HANA CLI Development",
  "image": "mcr.microsoft.com/devcontainers/javascript-node:20",
  "postCreateCommand": "npm install -g hana-cli",
  "forwardPorts": [3000],
  "remoteEnv": {
    "HANA_CLI_HOST": "your-hana-server"
  }
}

Kubernetes ​

Deploy HANA CLI job in Kubernetes:

yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: hana-cli-import
spec:
  template:
    spec:
      containers:
      - name: hana-cli
        image: node:20
        command: ["npm", "install", "-g", "hana-cli"]
        env:
        - name: HANA_CLI_HOST
          value: "hana-service:30013"
        - name: HANA_CLI_USER
          valueFrom:
            secretKeyRef:
              name: hana-credentials
              key: username
      restartPolicy: Never

CI/CD Pipelines ​

GitHub Actions ​

.github/workflows/data-sync.yml:

yaml
name: Data Sync

on: [push]

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: '20'
      - run: npm install -g hana-cli
      - run: hana-cli dataSync --schema MYSCHEMA --table EMPLOYEES --sourceConnection source.json --targetConnection target.json
        env:
          HANA_CLI_HOST: ${{ secrets.HANA_CLI_HOST }}
          HANA_CLI_USER: ${{ secrets.HANA_CLI_USER }}
          HANA_CLI_PASSWORD: ${{ secrets.HANA_CLI_PASSWORD }}

GitLab CI ​

.gitlab-ci.yml:

yaml
import-data:
  image: node:20
  script:
    - npm install -g hana-cli
    - hana-cli import -n data.csv -t EMPLOYEES
  variables:
    HANA_CLI_HOST: $HANA_CLI_HOST
    HANA_CLI_USER: $HANA_CLI_USER
    HANA_CLI_PASSWORD: $HANA_CLI_PASSWORD

Jenkins ​

groovy
pipeline {
    agent any
    
    stages {
        stage('Setup') {
            steps {
                sh 'npm install -g hana-cli'
            }
        }
        stage('Export Data') {
            steps {
                withCredentials([string(credentialsId: 'hana-password', variable: 'PASS')]) {
                    sh 'hana-cli export -s SCHEMA -t TABLE -o backup.csv'
                }
            }
        }
    }
}

Azure DevOps ​

azure-pipelines.yml:

yaml
trigger:
  - main

pool:
  vmImage: 'ubuntu-latest'

variables:
  - group: hana-credentials  # Variable group with HANA_CLI_* variables

steps:
  - task: NodeTool@0
    inputs:
      versionSpec: '20.x'
    displayName: 'Install Node.js'

  - script: |
      npm install -g hana-cli
    displayName: 'Install HANA CLI'

  - script: |
      hana-cli compareSchema -s $(SOURCE_SCHEMA) -t $(TARGET_SCHEMA) -o diff-report.json
    displayName: 'Compare Schemas'
    env:
      HANA_CLI_HOST: $(HANA_CLI_HOST)
      HANA_CLI_USER: $(HANA_CLI_USER)
      HANA_CLI_PASSWORD: $(HANA_CLI_PASSWORD)

  - task: PublishBuildArtifacts@1
    inputs:
      pathToPublish: 'diff-report.json'
      artifactName: 'schema-diff'
    displayName: 'Publish Diff Report'

Features:

  • Integration with Azure Key Vault for credentials
  • Variable groups for environment-specific config
  • Artifact publishing for reports and exports
  • Matrix builds for multi-environment testing

Operating Systems ​

Windows ​

bash
# Install globally
npm install -g hana-cli

# Use in PowerShell, CMD, or WSL
hana-cli systemInfo

PowerShell Example:

powershell
# Set environment variables
$env:HANA_CLI_HOST = "hana-server.company.com"
$env:HANA_CLI_USER = "DBUSER"
$env:HANA_CLI_PASSWORD = "password"

# Run commands
hana-cli tables -s MYSCHEMA

WSL (Windows Subsystem for Linux) ​

Run HANA CLI in a Linux environment on Windows:

bash
# Install in WSL (Ubuntu, Debian, etc.)
sudo apt update
sudo apt install nodejs npm
npm install -g hana-cli

# Configure credentials
export HANA_CLI_HOST=hana-server.company.com
export HANA_CLI_USER=DBUSER
export HANA_CLI_PASSWORD=password

# Use normally
hana-cli systemInfo
hana-cli dataProfile -s SCHEMA -t TABLE

Access Windows files from WSL:

bash
# Import data from Windows filesystem
hana-cli import -n /mnt/c/Users/YourName/data.csv -t TARGET_TABLE

# Export to Windows Downloads folder
hana-cli export -s SCHEMA -t TABLE -o /mnt/c/Users/YourName/Downloads/export.csv

Benefits:

  • Native Linux tooling on Windows
  • Better shell scripting capabilities
  • Consistent with Linux/Mac workflows
  • Access to both Windows and Linux filesystems

macOS ​

bash
# Install via npm or Homebrew
npm install -g hana-cli

# Use in Terminal
hana-cli systemInfo

Linux ​

bash
# Works on any Linux distribution
npm install -g hana-cli

# Use in shell/terminal
hana-cli systemInfo

Network Scenarios ​

Same Network ​

bash
hana-cli systemInfo  # Direct connection works

VPN/Tunneling ​

bash
# Connect through VPN - works normally
hana-cli export -s SCHEMA -t TABLE -o data.csv

SSH Tunneling ​

Secure connection through SSH tunnel when direct access is not available:

Basic SSH Tunnel:

bash
# Create SSH tunnel to HANA server
ssh -L 30013:hana-server.internal:30013 user@bastion-host.com

# In another terminal, use tunneled connection
export HANA_CLI_HOST=localhost
export HANA_CLI_PORT=30013
export HANA_CLI_USER=DBUSER
export HANA_CLI_PASSWORD=password

hana-cli systemInfo

Background SSH Tunnel:

bash
# Run tunnel in background with key-based auth
ssh -f -N -L 30013:hana-server.internal:30013 user@bastion-host.com -i ~/.ssh/id_rsa

# Use HANA CLI normally
hana-cli tables -s MYSCHEMA

# Close tunnel when done
pkill -f "ssh.*30013:hana-server"

Multi-hop SSH Tunnel:

bash
# Jump through multiple hosts
ssh -J jump1.com,jump2.com -L 30013:hana-server:30013 final-host

# Or using ProxyJump in ~/.ssh/config:
# Host hana-tunnel
#   HostName final-host
#   ProxyJump jump1.com,jump2.com
#   LocalForward 30013 hana-server:30013

ssh hana-tunnel

Automated Script:

bash
#!/bin/bash
# hana-cli-tunnel.sh

echo "Creating SSH tunnel to HANA..."
ssh -f -N -L 30013:hana-server:30013 user@bastion.com

export HANA_CLI_HOST=localhost
export HANA_CLI_PORT=30013

echo "Running HANA CLI command..."
hana-cli "$@"

echo "Closing tunnel..."
pkill -f "ssh.*30013:hana-server"

Usage: ./hana-cli-tunnel.sh systemInfo

Bastion Host / Jump Server ​

Direct access through bastion:

bash
# SSH to bastion, then run HANA CLI there
ssh user@bastion-host.com

# On bastion host
npm install -g hana-cli
export HANA_CLI_HOST=hana-server.internal
hana-cli systemInfo

Troubleshooting ​

Connection Issues ​

Problem: Cannot connect to HANA server ​

bash
# Test network connectivity first
ping hana-server.company.com

# Test port accessibility
nc -zv hana-server.company.com 30013
# or
telnet hana-server.company.com 30013

Common causes:

  • Firewall blocking port 30013 (or your HANA port)
  • VPN not connected
  • Incorrect hostname/IP
  • HANA instance not running

Problem: Authentication failures ​

bash
# Verify credentials are set correctly
echo $HANA_CLI_HOST
echo $HANA_CLI_USER
echo $HANA_CLI_PASSWORD | wc -c  # Check password length without revealing it

# Try with explicit credentials
hana-cli systemInfo --host hana-server --user DBUSER --password "your-password"

Common causes:

  • Expired password
  • Account locked after failed login attempts
  • Wrong user/password
  • Missing VCAP_SERVICES configuration

Environment-Specific Issues ​

WSL: Node.js not found ​

bash
# Install Node.js in WSL
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

# Verify installation
node --version
npm --version

Docker: HANA_CLI_* environment variables not passed ​

bash
# Use --env-file with docker run
echo "HANA_CLI_HOST=hana-server" > .env
echo "HANA_CLI_USER=DBUSER" >> .env
echo "HANA_CLI_PASSWORD=password" >> .env

docker run --env-file .env my-hana-cli-image hana-cli systemInfo

Cloud Foundry: VCAP_SERVICES not detected ​

bash
# Check if service is bound
cf services
cf env your-app-name

# Bind HANA service if missing
cf bind-service your-app-name my-hana-service
cf restage your-app-name

CI/CD: npm install -g fails ​

yaml
# Use npx instead of global install
steps:
  - run: npx hana-cli systemInfo

# Or use local install
steps:
  - run: npm install hana-cli
  - run: npx hana-cli systemInfo

Certificate and SSL Issues ​

Problem: Self-signed certificate errors ​

bash
# For testing only - accept self-signed certificates
export NODE_TLS_REJECT_UNAUTHORIZED=0
hana-cli systemInfo

# Better approach - add certificate to trust store
# Linux:
sudo cp hana-cert.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

# macOS:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain hana-cert.crt

Performance Issues ​

Problem: Slow connections or timeouts ​

bash
# Increase connection timeout (if supported by underlying driver)
export HANA_CLI_TIMEOUT=60000  # 60 seconds

# For large data exports, use streaming
hana-cli export -s SCHEMA -t LARGE_TABLE -o data.csv --stream

# Test connection latency
time hana-cli systemInfo

Debug Mode ​

bash
# Enable verbose logging (if available)
export DEBUG=hana-cli:*
hana-cli systemInfo

# Or use Node.js debugging
NODE_DEBUG=* hana-cli systemInfo 2>&1 | grep -i error

Getting Help ​

  1. Check HANA CLI logs (if available)
  2. Verify HANA server logs for connection attempts
  3. Test with a simple command first: hana-cli systemInfo
  4. Check GitHub issues: https://github.com/SAP-samples/hana-developer-cli-tool-example/issues
  5. Review documentation: Configuration Guide

Compatibility ​

EnvironmentStatusNotes
Local Dev✅ SupportedWorks great
BAS✅ SupportedRecommended
Cloud Shell✅ SupportedAll platforms
BTP✅ SupportedNative integration
HANA Cloud✅ SupportedRecommended
Cloud Foundry✅ SupportedVCAP auto-discovery
Docker✅ SupportedContainerized
Kubernetes✅ SupportedPod/job agent
Windows✅ SupportedFull support
WSL✅ SupportedLinux on Windows
macOS✅ SupportedFull support
Linux✅ SupportedFull support
Azure DevOps✅ SupportedFull CI/CD support

See Also ​