333 lines
13 KiB
YAML
333 lines
13 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [ main ]
|
|
pull_request:
|
|
branches: [ main ]
|
|
|
|
jobs:
|
|
|
|
test-compose:
|
|
name: 'Test suite: Compose'
|
|
# List of supported runners:
|
|
# https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners#supported-runners-and-hardware-resources
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
#####################################################
|
|
# #
|
|
# Install all dependencies required by test suites. #
|
|
# #
|
|
#####################################################
|
|
|
|
- name: Prepare environment
|
|
run: |
|
|
|
|
# Install Linux packages
|
|
#
|
|
# List of packages pre-installed in the runner:
|
|
# https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners#supported-software
|
|
|
|
sudo apt install -y expect
|
|
|
|
# Enable support for Compose V2
|
|
#
|
|
# Instructions:
|
|
# https://docs.docker.com/compose/cli-command/#install-on-linux
|
|
|
|
mkdir -p ~/.docker/cli-plugins
|
|
curl -sL "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64" -o ~/.docker/cli-plugins/docker-compose
|
|
chmod +x ~/.docker/cli-plugins/docker-compose
|
|
docker compose version
|
|
|
|
# Pre-build container images
|
|
|
|
docker compose \
|
|
-f docker-compose.yml \
|
|
-f extensions/logspout/logspout-compose.yml \
|
|
-f extensions/enterprise-search/enterprise-search-compose.yml \
|
|
-f extensions/apm-server/apm-server-compose.yml \
|
|
-f extensions/metricbeat/metricbeat-compose.yml \
|
|
-f extensions/filebeat/filebeat-compose.yml \
|
|
build
|
|
|
|
########################################################
|
|
# #
|
|
# Ensure §"Initial setup" of the README remains valid. #
|
|
# #
|
|
########################################################
|
|
|
|
- name: Set password of every built-in user to 'testpasswd'
|
|
run: |
|
|
|
|
# Change password of 'elastic' user from 'changeme' to 'testpasswd' in config files
|
|
|
|
sed -i -e 's/\(xpack.monitoring.elasticsearch.username:\) elastic/\1 logstash_system/g' -e 's/\(xpack.monitoring.elasticsearch.password:\) changeme/\1 testpasswd/g' logstash/config/logstash.yml
|
|
sed -i 's/\(password =>\) "changeme"/\1 "testpasswd"/g' logstash/pipeline/logstash.conf
|
|
sed -i 's/\(elasticsearch.password:\) changeme/\1 testpasswd/g' kibana/config/kibana.yml
|
|
sed -i -e 's/\(elasticsearch.password:\) changeme/\1 testpasswd/g' -e 's/\(secret_management.encryption_keys:\)/\1 [test-encrypt]/g' extensions/enterprise-search/config/enterprise-search.yml
|
|
sed -i 's/\(password:\) changeme/\1 testpasswd/g' extensions/apm-server/config/apm-server.yml
|
|
sed -i 's/\(password:\) changeme/\1 testpasswd/g' extensions/metricbeat/config/metricbeat.yml
|
|
sed -i 's/\(password:\) changeme/\1 testpasswd/g' extensions/filebeat/config/filebeat.yml
|
|
|
|
# Run Elasticsearch and wait for its availability
|
|
|
|
docker compose up -d elasticsearch
|
|
source .github/workflows/scripts/lib/testing.sh
|
|
poll_ready "$(container_id elasticsearch)" "http://$(service_ip elasticsearch):9200/" -u 'elastic:changeme'
|
|
|
|
# Set passwords
|
|
|
|
.github/workflows/scripts/elasticsearch-setup-passwords.exp
|
|
|
|
##########################################################
|
|
# #
|
|
# Test core components: Elasticsearch, Logstash, Kibana. #
|
|
# #
|
|
##########################################################
|
|
|
|
- name: Run the stack
|
|
run: docker compose up -d
|
|
|
|
- name: Execute core test suite
|
|
run: .github/workflows/scripts/run-tests-core.sh
|
|
|
|
- name: 'debug: Display state and logs (core)'
|
|
# https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idif
|
|
# https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#job-status-check-functions
|
|
if: always()
|
|
run: |
|
|
docker compose ps
|
|
docker compose logs elasticsearch
|
|
docker compose logs logstash
|
|
docker compose logs kibana
|
|
|
|
##############################
|
|
# #
|
|
# Test supported extensions. #
|
|
# #
|
|
##############################
|
|
|
|
#
|
|
# Logspout
|
|
#
|
|
|
|
- name: Execute Logspout test suite
|
|
run: |
|
|
|
|
# Set mandatory Logstash settings
|
|
|
|
sed -i '$ a input { udp { port => 5000 codec => json } }' logstash/pipeline/logstash.conf
|
|
|
|
# Restart Logstash for changes to take effect
|
|
|
|
docker compose restart logstash
|
|
|
|
# Run Logspout and execute tests.
|
|
|
|
docker compose -f docker-compose.yml -f extensions/logspout/logspout-compose.yml up -d logspout
|
|
.github/workflows/scripts/run-tests-logspout.sh
|
|
|
|
# Revert changes to Logstash configuration
|
|
|
|
sed -i '/input { udp { port => 5000 codec => json } }/d' logstash/pipeline/logstash.conf
|
|
docker compose restart logstash
|
|
|
|
- name: 'debug: Display state and logs (Logspout)'
|
|
if: always()
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/logspout/logspout-compose.yml ps
|
|
docker compose -f docker-compose.yml -f extensions/logspout/logspout-compose.yml logs logspout
|
|
# next steps don't need Logspout
|
|
docker compose -f docker-compose.yml -f extensions/logspout/logspout-compose.yml stop logspout
|
|
# next steps don't need Logstash
|
|
docker compose stop logstash
|
|
|
|
#
|
|
# Enterprise Search
|
|
#
|
|
|
|
- name: Execute Enterprise Search test suite
|
|
run: |
|
|
|
|
# Set mandatory Elasticsearch settings
|
|
|
|
sed -i '$ a xpack.security.authc.api_key.enabled: true' elasticsearch/config/elasticsearch.yml
|
|
|
|
# Restart Elasticsearch for changes to take effect
|
|
|
|
docker compose restart elasticsearch
|
|
|
|
# Run Enterprise Search and execute tests
|
|
|
|
docker compose -f docker-compose.yml -f extensions/enterprise-search/enterprise-search-compose.yml up -d enterprise-search
|
|
.github/workflows/scripts/run-tests-enterprise-search.sh
|
|
|
|
# Revert changes to Elasticsearch configuration
|
|
|
|
sed -i '/xpack.security.authc.api_key.enabled: true/d' elasticsearch/config/elasticsearch.yml
|
|
docker compose restart elasticsearch
|
|
|
|
- name: 'debug: Display state and logs (Enterprise Search)'
|
|
if: always()
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/enterprise-search/enterprise-search-compose.yml ps
|
|
docker compose -f docker-compose.yml -f extensions/enterprise-search/enterprise-search-compose.yml logs enterprise-search
|
|
# next steps don't need Enterprise Search
|
|
docker compose -f docker-compose.yml -f extensions/enterprise-search/enterprise-search-compose.yml stop enterprise-search
|
|
|
|
#
|
|
# APM Server
|
|
#
|
|
|
|
- name: Execute APM Server test suite
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/apm-server/apm-server-compose.yml up -d apm-server
|
|
.github/workflows/scripts/run-tests-apm-server.sh
|
|
|
|
- name: 'debug: Display state and logs (APM Server)'
|
|
if: always()
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/apm-server/apm-server-compose.yml ps
|
|
docker compose -f docker-compose.yml -f extensions/apm-server/apm-server-compose.yml logs apm-server
|
|
# next steps don't need APM Server
|
|
docker compose -f docker-compose.yml -f extensions/apm-server/apm-server-compose.yml stop apm-server
|
|
|
|
#
|
|
# Metricbeat
|
|
#
|
|
|
|
- name: Execute Metricbeat test suite
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/metricbeat/metricbeat-compose.yml up -d metricbeat
|
|
.github/workflows/scripts/run-tests-metricbeat.sh
|
|
|
|
- name: 'debug: Display state and logs (Metricbeat)'
|
|
if: always()
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/metricbeat/metricbeat-compose.yml ps
|
|
docker compose -f docker-compose.yml -f extensions/metricbeat/metricbeat-compose.yml logs metricbeat
|
|
# next steps don't need Metricbeat
|
|
docker compose -f docker-compose.yml -f extensions/metricbeat/metricbeat-compose.yml stop metricbeat
|
|
|
|
#
|
|
# Filebeat
|
|
#
|
|
|
|
- name: Execute Filebeat test suite
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml up -d filebeat
|
|
.github/workflows/scripts/run-tests-filebeat.sh
|
|
|
|
- name: 'debug: Display state and logs (Filebeat)'
|
|
if: always()
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml ps
|
|
docker compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml logs filebeat
|
|
# next steps don't need Filebeat
|
|
docker compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml stop filebeat
|
|
|
|
##############
|
|
# #
|
|
# Tear down. #
|
|
# #
|
|
##############
|
|
|
|
- name: Terminate all components
|
|
if: always()
|
|
run: >-
|
|
docker compose
|
|
-f docker-compose.yml
|
|
-f extensions/logspout/logspout-compose.yml
|
|
-f extensions/enterprise-search/enterprise-search-compose.yml
|
|
-f extensions/apm-server/apm-server-compose.yml
|
|
-f extensions/metricbeat/metricbeat-compose.yml
|
|
-f extensions/filebeat/filebeat-compose.yml
|
|
down -v
|
|
|
|
test-swarm:
|
|
name: 'Test suite: Swarm'
|
|
runs-on: ubuntu-latest
|
|
|
|
env:
|
|
MODE: swarm
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
#####################################################
|
|
# #
|
|
# Install all dependencies required by test suites. #
|
|
# #
|
|
#####################################################
|
|
|
|
- name: Prepare environment
|
|
run: |
|
|
|
|
# Install Linux packages
|
|
|
|
sudo apt install -y expect
|
|
|
|
# Enable Swarm mode
|
|
|
|
docker swarm init
|
|
|
|
########################################################
|
|
# #
|
|
# Ensure §"Initial setup" of the README remains valid. #
|
|
# #
|
|
########################################################
|
|
|
|
- name: Set password of every built-in user to 'testpasswd'
|
|
run: |
|
|
|
|
# Change password of 'elastic' user from 'changeme' to 'testpasswd' in config files
|
|
|
|
sed -i -e 's/\(xpack.monitoring.elasticsearch.username:\) elastic/\1 logstash_system/g' -e 's/\(xpack.monitoring.elasticsearch.password:\) changeme/\1 testpasswd/g' logstash/config/logstash.yml
|
|
sed -i 's/\(password =>\) "changeme"/\1 "testpasswd"/g' logstash/pipeline/logstash.conf
|
|
sed -i 's/\(elasticsearch.password:\) changeme/\1 testpasswd/g' kibana/config/kibana.yml
|
|
|
|
# Run Elasticsearch and wait for its availability
|
|
|
|
docker stack deploy -c ./docker-stack.yml elk
|
|
docker service scale elk_logstash=0 elk_kibana=0
|
|
source .github/workflows/scripts/lib/testing.sh
|
|
poll_ready "$(container_id elasticsearch)" "http://$(service_ip elasticsearch):9200/" -u 'elastic:changeme'
|
|
|
|
# Set passwords
|
|
|
|
.github/workflows/scripts/elasticsearch-setup-passwords.exp swarm
|
|
|
|
##########################################################
|
|
# #
|
|
# Test core components: Elasticsearch, Logstash, Kibana. #
|
|
# #
|
|
##########################################################
|
|
|
|
- name: Run the stack
|
|
run: docker service scale elk_logstash=1 elk_kibana=1
|
|
|
|
- name: Execute core test suite
|
|
run: .github/workflows/scripts/run-tests-core.sh swarm
|
|
|
|
- name: 'debug: Display state and logs (core)'
|
|
if: always()
|
|
run: |
|
|
docker stack services elk
|
|
docker service logs elk_elasticsearch
|
|
docker service logs elk_kibana
|
|
docker service logs elk_logstash
|
|
|
|
##############
|
|
# #
|
|
# Tear down. #
|
|
# #
|
|
##############
|
|
|
|
- name: Terminate all components
|
|
if: always()
|
|
run: docker stack rm elk
|