From 1275458c3f0e5da47b27215f8d8800856be6e93e Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Tue, 14 Feb 2017 18:53:22 +0400 Subject: [PATCH] collect and add docker logs to CircleCI artifacts (Refs #387) How: 1) we start syslog docker container 2) all other containers use syslog logging driver to ship their logs to that container --- .gitignore | 1 + circle.yml | 4 ++-- test/p2p/peer.sh | 4 ++++ test/test.sh | 45 +++++++++++++++++++++++++++++++-------------- 4 files changed, 38 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 4d8d33951..c4694b3e1 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ remote_dump vendor .vagrant test/p2p/data/ +test/logs .glide diff --git a/circle.yml b/circle.yml index e77b578bf..50ffbd01b 100644 --- a/circle.yml +++ b/circle.yml @@ -29,5 +29,5 @@ test: post: - cd "$PROJECT_PATH" && mv test_integrations.log "${CIRCLE_ARTIFACTS}" - cd "$PROJECT_PATH" && bash <(curl -s https://codecov.io/bash) -f coverage.txt - - cd "$PROJECT_PATH" && [[ -f coverage.txt ]] && mv coverage.txt "${CIRCLE_ARTIFACTS}" - - sudo cp /var/log/upstart/docker.log "${CIRCLE_ARTIFACTS}" + - cd "$PROJECT_PATH" && mv coverage.txt "${CIRCLE_ARTIFACTS}" + - cd "$PROJECT_PATH" && cp test/logs/messages "${CIRCLE_ARTIFACTS}/docker_logs.txt" diff --git a/test/p2p/peer.sh b/test/p2p/peer.sh index 76314f586..19586b124 100644 --- a/test/p2p/peer.sh +++ b/test/p2p/peer.sh @@ -21,4 +21,8 @@ docker run -d \ --name local_testnet_$ID \ --entrypoint tendermint \ -e TMROOT=/go/src/github.com/tendermint/tendermint/test/p2p/data/mach$ID/core \ + --log-driver=syslog \ + --log-opt syslog-address=udp://127.0.0.1:5514 \ + --log-opt syslog-facility=daemon \ + --log-opt tag="{{.Name}}" \ $DOCKER_IMAGE node $SEEDS --proxy_app=$APP_PROXY diff --git a/test/test.sh b/test/test.sh index 9e42235e8..2abafc32c 100644 --- a/test/test.sh +++ b/test/test.sh @@ -1,17 +1,30 @@ #! /bin/bash set -eu -# Top Level Testing Script -# See the github.com/tendermint/tendermint/test/README.md +# Get the directory of where this script is. +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" -echo "" -echo "* building docker image" -bash ./test/docker/build.sh +LOGS_DIR="$DIR/logs" +echo +echo "* [$(date +"%T")] cleaning up $LOGS_DIR" +rm -rf "$LOGS_DIR" +mkdir -p "$LOGS_DIR" -echo "" -echo "* running go tests and app tests in docker container" +echo +echo "* [$(date +"%T")] starting rsyslog container" +docker rm -f rsyslog || true +docker run -d -v "$LOGS_DIR:/var/log/" -p 127.0.0.1:5514:514/udp --name rsyslog voxxit/rsyslog + +echo +echo "* [$(date +"%T")] building docker image" +bash "$DIR/docker/build.sh" + +echo +echo "* [$(date +"%T")] running go tests and app tests in docker container" # sometimes its helpful to mount the local test folder -# -v $GOPATH/src/github.com/tendermint/tendermint/test:/go/src/github.com/tendermint/tendermint/test +# -v $DIR:/go/src/github.com/tendermint/tendermint/test docker run --name run_test -t tester bash test/run_test.sh # copy the coverage results out of docker container @@ -19,16 +32,20 @@ docker cp run_test:/go/src/github.com/tendermint/tendermint/coverage.txt . # test basic network connectivity # by starting a local testnet and checking peers connect and make blocks -echo "" -echo "* running p2p tests on a local docker network" -bash test/p2p/test.sh tester +echo +echo "* [$(date +"%T")] running p2p tests on a local docker network" +bash "$DIR/p2p/test.sh" tester # only run the cloud benchmark for releases -BRANCH=`git rev-parse --abbrev-ref HEAD` +BRANCH=$(git rev-parse --abbrev-ref HEAD) if [[ $(echo "$BRANCH" | grep "release-") != "" ]]; then - echo "" + echo echo "TODO: run network tests" #echo "* branch $BRANCH; running mintnet/netmon throughput benchmark" # TODO: replace mintnet - #bash test/net/test.sh + #bash "$DIR/net/test.sh" fi + +echo +echo "* [$(date +"%T")] stopping rsyslog container" +docker rm -f rsyslog