In preparation for moving to Elastic's CI (#862)
* In preperation for moving to Elastic's CI Add dockerfile to build image for testing python client in a docker container add docker-compose to create environment for running tests against specific versions of ES Add Makefile to make it easy to execute tests and cleanup add wait-for-elasticsearch.sh script to wait for elasticsearch before executing the tests. * add pull and comment about pushing requring auth * spelling errors * adding CI directory for jenkins to pick up fixing typo too * fix test-matrix and create working run-tests * add comment about why skipping python 2.6 * adding dockerfiles to create base images for ci
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
ARG PYTHON_VERSION=3
|
||||||
|
FROM python:${PYTHON_VERSION}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
FROM ubuntu:18.04
|
||||||
|
RUN apt-get update && apt-get install -y curl build-essential zlib1g-dev libssl1.0-dev
|
||||||
|
RUN ln -s /lib/i386-linux-gnu/libz.so.1 /lib/libz.so
|
||||||
|
RUN curl -s https://www.python.org/ftp/python/2.6.9/Python-2.6.9.tgz | tar -xzf -
|
||||||
|
WORKDIR Python-2.6.9
|
||||||
|
RUN LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)" ./configure
|
||||||
|
RUN make
|
||||||
|
RUN make install
|
||||||
|
RUN curl https://bootstrap.pypa.io/2.6/get-pip.py -o get-pip.py
|
||||||
|
RUN python get-pip.py
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#
|
||||||
|
# Runs the client tests via Docker with the expectation that the required
|
||||||
|
# environment variables have already been exported before running this script.
|
||||||
|
#
|
||||||
|
# The required environment variables include:
|
||||||
|
#
|
||||||
|
# - $ELASTICSEARCH_VERSION
|
||||||
|
# - $PYTHON_VERSION
|
||||||
|
#
|
||||||
|
|
||||||
|
# TODO: implement the docker-based testing
|
||||||
|
cd ..
|
||||||
|
make run_tests
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
ELASTICSEARCH_VERSION:
|
||||||
|
- 6.4.2
|
||||||
|
- 6.3.2
|
||||||
|
- 6.1.4
|
||||||
|
- 6.0.1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PYTHON_VERSION:
|
||||||
|
- 3
|
||||||
|
- 2.7
|
||||||
|
- 2.6
|
||||||
|
|
||||||
|
exclude:
|
||||||
|
# since a base image for python2.6 doens't exist i need to create one.
|
||||||
|
- PYTHON_VERSION: 2.6
|
||||||
|
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
ARG PYTHON_VERSION=3
|
||||||
|
FROM python:${PYTHON_VERSION}
|
||||||
|
RUN apt-get update && apt-get install -y git curl
|
||||||
|
RUN pip install ipdb python-dateutil GitPython
|
||||||
|
|
||||||
|
RUN git clone https://github.com/elastic/elasticsearch.git /code/elasticsearch
|
||||||
|
|
||||||
|
WORKDIR /code/elasticsearch-py
|
||||||
|
COPY . .
|
||||||
|
RUN pip install .[develop]
|
||||||
|
RUN python setup.py develop
|
||||||
|
CMD ["/code/wait-for-elasticsearch.sh", "http://elasticsearch:9200", "--", "python", "setup.py", "test"]
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
clean:
|
||||||
|
docker-compose down --remove-orphans --volumes
|
||||||
|
|
||||||
|
build:
|
||||||
|
PYTHON_VERSION=${PYTHON_VERSION} docker-compose build client
|
||||||
|
|
||||||
|
pull:
|
||||||
|
ELASTIC_VERSION=${ELASTIC_VERSION} PYTHON_VERSION=${PYTHON_VERSION} docker-compose pull
|
||||||
|
|
||||||
|
push:
|
||||||
|
# requires authentication.
|
||||||
|
PYTHON_VERSION=${PYTHON_VERSION} docker-compose push client
|
||||||
|
|
||||||
|
run_tests:
|
||||||
|
ELASTIC_VERSION=${ELASTIC_VERSION} PYTHON_VERSION=${PYTHON_VERSION} docker-compose run client python setup.py test
|
||||||
|
|
||||||
|
start_elasticsearch:
|
||||||
|
ELASTIC_VERSION=${ELASTIC_VERSION} docker-compose up -d elasticsearch
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
version: '3.3'
|
||||||
|
services:
|
||||||
|
client:
|
||||||
|
image: docker.elastic.co/clients/elasticsearch-py:${PYTHON_VERSION:-3}
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
args:
|
||||||
|
PYTHON_VERSION: ${PYTHON_VERSION:-3}
|
||||||
|
environment:
|
||||||
|
- "TEST_ES_SERVER=http://elasticsearch:9200"
|
||||||
|
volumes:
|
||||||
|
- .:/code/elasticsearch-py
|
||||||
|
- esvol:/tmp
|
||||||
|
networks:
|
||||||
|
- esnet
|
||||||
|
depends_on:
|
||||||
|
- elasticsearch
|
||||||
|
command: ["true"] # dummy command to override the command in the Dockerfile and do nothing.
|
||||||
|
elasticsearch:
|
||||||
|
image: docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION:-6.2.4}
|
||||||
|
volumes:
|
||||||
|
- esvol:/tmp
|
||||||
|
networks:
|
||||||
|
- esnet
|
||||||
|
environment:
|
||||||
|
- path.repo=/tmp
|
||||||
|
- "repositories.url.allowed_urls=http://*"
|
||||||
|
- node.attr.testattr=test
|
||||||
|
- bootstrap.memory_lock=false
|
||||||
|
- "discovery.zen.ping.unicast.hosts=elasticsearch"
|
||||||
|
- "http.max_content_length=5mb"
|
||||||
|
networks:
|
||||||
|
esnet:
|
||||||
|
volumes:
|
||||||
|
esvol:
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
host="$1"
|
||||||
|
shift
|
||||||
|
cmd="$@"
|
||||||
|
|
||||||
|
|
||||||
|
until $(curl --output /dev/null --silent --head --fail "$host"); do
|
||||||
|
printf '.'
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
# First wait for ES to start...
|
||||||
|
response=$(curl $host)
|
||||||
|
|
||||||
|
until [ "$response" = "200" ]; do
|
||||||
|
response=$(curl --write-out %{http_code} --silent --output /dev/null "$host")
|
||||||
|
>&2 echo "Elasticsearch is unavailable - sleeping"
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
# next wait for ES status to turn to Green
|
||||||
|
health="$(curl -fsSL "$host/_cat/health?h=status")"
|
||||||
|
health="$(echo "$health" | sed -r 's/^[[:space:]]+|[[:space:]]+$//g')" # trim whitespace (otherwise we'll have "green ")
|
||||||
|
|
||||||
|
until [ "$health" = 'green' ]; do
|
||||||
|
health="$(curl -fsSL "$host/_cat/health?h=status")"
|
||||||
|
health="$(echo "$health" | sed -r 's/^[[:space:]]+|[[:space:]]+$//g')" # trim whitespace (otherwise we'll have "green ")
|
||||||
|
>&2 echo "Elasticsearch is unavailable - sleeping"
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
>&2 echo "Elasticsearch is up"
|
||||||
|
exec $cmd
|
||||||
Reference in New Issue
Block a user