mirror of
https://github.com/deviantony/docker-elk.git
synced 2026-01-05 20:43:21 +01:00
Move CI flow from Travis CI to GitHub Actions
This commit is contained in:
243
.github/workflows/ci.yml
vendored
Normal file
243
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,243 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
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
|
||||
|
||||
# Pre-build container images
|
||||
|
||||
docker-compose 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 -e 's/\(elasticsearch.username:\) elastic/\1 kibana_system/g' -e '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
|
||||
|
||||
# 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/" '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
|
||||
# next steps don't need Logstash
|
||||
docker-compose stop logstash
|
||||
|
||||
##############################
|
||||
# #
|
||||
# Test supported extensions. #
|
||||
# #
|
||||
##############################
|
||||
|
||||
#
|
||||
# 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
|
||||
|
||||
##############
|
||||
# #
|
||||
# Tear down. #
|
||||
# #
|
||||
##############
|
||||
|
||||
- name: Terminate all components
|
||||
if: always()
|
||||
run: >-
|
||||
docker-compose
|
||||
-f docker-compose.yml
|
||||
-f extensions/enterprise-search/enterprise-search-compose.yml
|
||||
-f extensions/apm-server/apm-server-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 -e 's/\(elasticsearch.username:\) elastic/\1 kibana_system/g' -e '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/" '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
|
||||
Reference in New Issue
Block a user