Kafka: 4. GitHub Actions
This documentation is part of the GitHub Actions & GitLab CI guide. You can view the complete guide here: Launch a real Kafka service from your GitHub Actions or GitLab CI pipeline, run your tests against it, and automatically tear it down.
👋 Welcome to the Stackhero documentation!
Stackhero makes it easy to set up a fully managed Kafka cloud solution. Here’s what you can expect:
- Unlimited message size and transfers to support your data growth.
- Effortless updates – apply the latest improvements with a single click.
- High-level performance and enhanced security, all powered by your own private, dedicated VM.
If you want to save time and streamline your processes, try Stackhero’s Kafka cloud hosting. You can get started in around 5 minutes!
To get started, save the following as .github/workflows/ci.yml. From now on, every push and pull request will run tests against a real Kafka instance.
name: CI with Kafka
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
env:
STACKHERO_TOKEN: ${{ secrets.STACKHERO_TOKEN }}
STACK_NAME: ci-kafka-${{ github.run_id }}-${{ github.run_attempt }}
INSTANCE: "10G" # Change this as needed (see step 3)
REGION: europe
steps:
- uses: actions/checkout@v4
- name: Install the Stackhero CLI and the client
run: |
curl -fsSL https://www.stackhero.io/install.sh | sh
apt-get update && apt-get install -y --no-install-recommends jq curl netcat-openbsd
- name: Create the Kafka service
run: |
set -euo pipefail
STACK_ID=$(stackhero --format=script stack-create --name="$STACK_NAME")
echo "STACK_ID=$STACK_ID" >> "$GITHUB_ENV"
SERVICE_ID=$(stackhero --format=script service-add \
--stack="$STACK_ID" \
--service-store="kafka" \
--instance="$INSTANCE" \
--region="$REGION")
echo "SERVICE_ID=$SERVICE_ID" >> "$GITHUB_ENV"
stackhero service-wait-for --service="$SERVICE_ID"
- name: Run tests against Kafka
run: |
set -euo pipefail
config=$(stackhero service-configuration-get --service="$SERVICE_ID" --format=json)
host=$(echo "$config" | jq -r '.configuration.domain')
# Open a TCP connection to the broker port.
nc -z -w 5 "$host" 9092
echo "✅ Kafka is reachable from CI."
# You can run your own test suite here using the credentials above ...
- name: Tear down (always, even on failure)
if: always()
run: |
if [ -n "${SERVICE_ID:-}" ]; then
stackhero service-delete --service="$SERVICE_ID" --confirm
stackhero service-wait-for --service="$SERVICE_ID"
fi
if [ -n "${STACK_ID:-}" ]; then
stackhero stack-delete --stack="$STACK_ID" --confirm
fi
The teardown step uses if: always() to ensure it runs in all cases, guaranteeing your Kafka instance is deleted and you are not billed for unused resources.