1.5.4 #287
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI Build Test | |
on: | |
pull_request: | |
branches-ignore: | |
- gh-pages | |
jobs: | |
lint-test: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Set up Helm | |
uses: azure/setup-helm@v1 | |
with: | |
version: v3.4.1 | |
- uses: actions/setup-python@v2 | |
with: | |
python-version: 3.7 | |
- name: Set up chart-testing | |
uses: helm/[email protected] | |
env: | |
CT_CHECK_VERSION_INCREMENT: "false" | |
- name: Run chart-testing (list-changed) | |
id: list-changed | |
run: | | |
changed=$(ct list-changed --target-branch main) | |
if [[ -n "$changed" ]]; then | |
echo "::set-output name=changed::true" | |
fi | |
- name: Linting charts | |
run: helm lint helm-chart/* | |
- name: Linting charts with CI values | |
run: helm lint --values ci_scripts/sck_values.yml helm-chart/* | |
- name: Linting charts ct lint tool | |
run: ct lint helm-chart/* | |
e2e-test: | |
name: e2e test | |
needs: | |
- lint-test | |
runs-on: ubuntu-20.04 | |
env: | |
CI_SPLUNK_PORT: 8089 | |
CI_SPLUNK_USERNAME: admin | |
CI_SPLUNK_HEC_TOKEN: a6b5e77f-d5f6-415a-bd43-930cecb12959 | |
CI_SPLUNK_PASSWORD: helloworld | |
CI_INDEX_EVENTS: ci_events | |
CI_INDEX_OBJECTS: ci_objects | |
CI_INDEX_METRICS: ci_metrics | |
KUBERNETES_VERSION: v1.23.2 | |
MINIKUBE_VERSION: v1.24.0 | |
MINIKUBE_NODE_COUNTS: 2 | |
GITHUB_ACTIONS: true | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Setup Minikube | |
run: | | |
if [ "$KUBERNETES_VERSION" = "stable" ]; then KUBERNETES_VERSION=`curl -L -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`; fi | |
if [ "$KUBERNETES_VERSION" = "latest" ]; then KUBERNETES_VERSION=`curl -L -s https://storage.googleapis.com/kubernetes-release/release/latest.txt`; fi | |
# Install Kubectl | |
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/${KUBERNETES_VERSION}/bin/linux/amd64/kubectl | |
chmod +x kubectl | |
sudo mv kubectl /usr/local/bin/ | |
mkdir -p ${HOME}/.kube | |
touch ${HOME}/.kube/config | |
# Install Minikube | |
curl -Lo minikube https://storage.googleapis.com/minikube/releases/${MINIKUBE_VERSION}/minikube-linux-amd64 | |
chmod +x minikube | |
sudo mv minikube /usr/local/bin/ | |
# Start Minikube and Wait | |
minikube start --driver=docker --container-runtime=docker --cpus 2 --memory 4096 --kubernetes-version=${KUBERNETES_VERSION} --no-vtx-check -n=${MINIKUBE_NODE_COUNTS} | |
export JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' | |
until kubectl get nodes -o jsonpath="$JSONPATH" 2>&1 | grep -q "Ready=True"; do | |
sleep 1; | |
done | |
- name: Install Splunk | |
run: | | |
# Wait until minikube is ready | |
kubectl apply -f https://docs.projectcalico.org/v3.21/manifests/calico.yaml | |
export JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' | |
until kubectl get nodes -o jsonpath="$JSONPATH" 2>&1 | grep -q "Ready=True"; do | |
echo "wait for minikube ready ..." | |
sleep 1; | |
done | |
kubectl get nodes | |
# Install Splunk on minikube | |
kubectl apply -f ci_scripts/k8s-splunk.yml | |
# Wait until splunk is ready | |
until kubectl logs splunk --tail=2 | grep -q 'Ansible playbook complete'; do | |
sleep 1; | |
done | |
export CI_SPLUNK_HOST=$(kubectl get pod splunk --template={{.status.podIP}}) | |
# Setup Indexes | |
curl -k -u $CI_SPLUNK_USERNAME:$CI_SPLUNK_PASSWORD https://$CI_SPLUNK_HOST:$CI_SPLUNK_PORT/services/data/indexes -d name=$CI_INDEX_EVENTS -d datatype=event | |
curl -k -u $CI_SPLUNK_USERNAME:$CI_SPLUNK_PASSWORD https://$CI_SPLUNK_HOST:$CI_SPLUNK_PORT/services/data/indexes -d name=$CI_INDEX_OBJECTS -d datatype=event | |
curl -k -u $CI_SPLUNK_USERNAME:$CI_SPLUNK_PASSWORD https://$CI_SPLUNK_HOST:$CI_SPLUNK_PORT/services/data/indexes -d name=$CI_INDEX_METRICS -d datatype=metric | |
curl -k -u $CI_SPLUNK_USERNAME:$CI_SPLUNK_PASSWORD https://$CI_SPLUNK_HOST:$CI_SPLUNK_PORT/services/data/indexes -d name=default-events -d datatype=event | |
curl -k -u $CI_SPLUNK_USERNAME:$CI_SPLUNK_PASSWORD https://$CI_SPLUNK_HOST:$CI_SPLUNK_PORT/services/data/indexes -d name=ns-anno -d datatype=event | |
curl -k -u $CI_SPLUNK_USERNAME:$CI_SPLUNK_PASSWORD https://$CI_SPLUNK_HOST:$CI_SPLUNK_PORT/services/data/indexes -d name=pod-anno -d datatype=event | |
# Enable HEC services | |
curl -X POST -u $CI_SPLUNK_USERNAME:$CI_SPLUNK_PASSWORD -k https://$CI_SPLUNK_HOST:$CI_SPLUNK_PORT/servicesNS/nobody/splunk_httpinput/data/inputs/http/http/enable | |
# Create new HEC token | |
curl -X POST -u $CI_SPLUNK_USERNAME:$CI_SPLUNK_PASSWORD -k -d "name=splunk_hec_token&token=a6b5e77f-d5f6-415a-bd43-930cecb12959&disabled=0&index=default-events&indexes=default-events,$CI_INDEX_METRICS,$CI_INDEX_OBJECTS,$CI_INDEX_EVENTS,ns-anno,pod-anno" https://$CI_SPLUNK_HOST:$CI_SPLUNK_PORT/servicesNS/nobody/splunk_httpinput/data/inputs/http | |
# lower the limit to 50MiB. Higher limits throws error 'Search not executed XXXX' | |
kubectl exec -it splunk -- bash -c 'echo -e "\n[diskUsage]\nminFreeSpace = 50" >> /opt/splunk/etc/system/local/server.conf' | |
# Restart Splunk | |
curl -k -u $CI_SPLUNK_USERNAME:$CI_SPLUNK_PASSWORD https://$CI_SPLUNK_HOST:$CI_SPLUNK_PORT/services/server/control/restart -X POST | |
- name: Build SCK artifacts | |
run: | | |
ci_scripts/build_sck_artifacts.sh | |
- name: Deploy k8s connector | |
run: | | |
export CI_SPLUNK_HOST=$(kubectl get pod splunk --template={{.status.podIP}}) | |
ci_scripts/deploy_connector.sh | |
- name: Deploy log generator | |
run: | | |
kubectl apply -f test/test_setup.yaml | |
sleep 80 | |
echo "logging pod logs" | |
kubectl logs -l app=splunk-kubernetes-logging | |
echo "metrics pod logs" | |
kubectl logs -l app=splunk-kubernetes-metrics | |
echo "objects pod logs" | |
kubectl logs -l app=splunk-kubernetes-objects | |
- uses: actions/setup-python@v2 | |
with: | |
python-version: 3.7 | |
- name: Run functional tests | |
run: | | |
kubectl get nodes | |
export PYTHONWARNINGS="ignore:Unverified HTTPS request" | |
export CI_SPLUNK_HOST=$(kubectl get pod splunk --template={{.status.podIP}}) | |
cd test | |
pip install --upgrade pip | |
pip install -r requirements.txt | |
echo "Running functional tests....." | |
python -m pytest \ | |
--splunkd-url https://$CI_SPLUNK_HOST:8089 \ | |
--splunk-user admin \ | |
--splunk-password $CI_SPLUNK_PASSWORD \ | |
--nodes-count $MINIKUBE_NODE_COUNTS\ | |
-p no:warnings -s -n auto |