Skip to content

Commit f92f2f9

Browse files
jstriebelnormanrz
authored andcommitted
Health smoketest (#9)
* client: add health command, minor refactoring * add health check to circleCI, + some fixes * health check always with newest images * health check: start db before check to avoid timing issues * circleci: use commond build number for workflow * circleci: set image * circleci minor fix * circleci: use jessie * circleci: fix
1 parent cac21dd commit f92f2f9

File tree

4 files changed

+94
-23
lines changed

4 files changed

+94
-23
lines changed

.circleci/config.yml

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
version: 2
2+
get_common_build_num: &get_common_build_num
3+
name: Export commond build number
4+
command: echo "export COMMON_BUILD_NUM=$(cat /tmp/workspace/build)" >> $BASH_ENV
25
jobs:
6+
set_common_build_number:
7+
docker:
8+
- image: buildpack-deps:jessie
9+
steps:
10+
- run:
11+
name: Write build number
12+
command: echo "${CIRCLE_BUILD_NUM}" > build
13+
- persist_to_workspace:
14+
root: .
15+
paths:
16+
- build
317
build_and_push_db:
418
machine:
519
image: circleci/classic:latest
@@ -9,6 +23,9 @@ jobs:
923
USER_GID: 1001
1024
steps:
1125
- checkout
26+
- attach_workspace:
27+
at: /tmp/workspace
28+
- run: *get_common_build_num
1229
- run:
1330
name: Prepare dependency folders
1431
command: mkdir -p ~/.m2 ~/.ivy2 ~/.sbt
@@ -27,42 +44,84 @@ jobs:
2744
name: Build server docker image
2845
command: |
2946
docker build \
30-
-t scalableminds/fossildb:${CIRCLE_BRANCH}__${CIRCLE_BUILD_NUM} \
47+
-t scalableminds/fossildb:${CIRCLE_BRANCH}__${COMMON_BUILD_NUM} \
3148
-t scalableminds/fossildb:${CIRCLE_BRANCH} \
3249
.
3350
- run:
3451
name: Push to DockerHub
3552
command: |
3653
set -x
3754
docker login -u $DOCKER_USER -p $DOCKER_PASS
38-
docker push scalableminds/fossildb:${CIRCLE_BRANCH}__${CIRCLE_BUILD_NUM}
55+
docker push scalableminds/fossildb:${CIRCLE_BRANCH}__${COMMON_BUILD_NUM}
3956
docker push scalableminds/fossildb:${CIRCLE_BRANCH}
4057
docker logout
4158
build_and_push_client:
4259
machine:
4360
image: circleci/classic:latest
4461
steps:
4562
- checkout
63+
- attach_workspace:
64+
at: /tmp/workspace
65+
- run: *get_common_build_num
4666
- run:
4767
name: Build client docker image
4868
command: |
4969
docker build \
5070
-f client/Dockerfile \
51-
-t scalableminds/fossildb-client:${CIRCLE_BRANCH}__${CIRCLE_BUILD_NUM} \
71+
-t scalableminds/fossildb-client:${CIRCLE_BRANCH}__${COMMON_BUILD_NUM} \
5272
-t scalableminds/fossildb-client:${CIRCLE_BRANCH} \
5373
.
5474
- run:
5575
name: Push to DockerHub
5676
command: |
5777
set -x
5878
docker login -u $DOCKER_USER -p $DOCKER_PASS
59-
docker push scalableminds/fossildb-client:${CIRCLE_BRANCH}__${CIRCLE_BUILD_NUM}
79+
docker push scalableminds/fossildb-client:${CIRCLE_BRANCH}__${COMMON_BUILD_NUM}
6080
docker push scalableminds/fossildb-client:${CIRCLE_BRANCH}
6181
docker logout
82+
smoketest:
83+
machine:
84+
image: circleci/classic:latest
85+
steps:
86+
- checkout
87+
- attach_workspace:
88+
at: /tmp/workspace
89+
- run: *get_common_build_num
90+
- run:
91+
name: Pull from DockerHub
92+
command: |
93+
set -x
94+
docker login -u $DOCKER_USER -p $DOCKER_PASS
95+
docker pull scalableminds/fossildb:${CIRCLE_BRANCH}__${COMMON_BUILD_NUM}
96+
docker pull scalableminds/fossildb-client:${CIRCLE_BRANCH}__${COMMON_BUILD_NUM}
97+
docker logout
98+
- run:
99+
name: Start fossildb
100+
command: >
101+
FOSSILDB_TAG=${CIRCLE_BRANCH}__${COMMON_BUILD_NUM}
102+
docker-compose up -d fossildb
103+
- run:
104+
name: Wait a second
105+
command: sleep 1
106+
- run:
107+
name: Check health endpoint
108+
command: >
109+
FOSSILDB_CLIENT_TAG=${CIRCLE_BRANCH}__${COMMON_BUILD_NUM}
110+
docker-compose run fossildb-health-check
62111
63112
workflows:
64113
version: 2
65114
default:
66115
jobs:
67-
- build_and_push_db
68-
- build_and_push_client
116+
- set_common_build_number
117+
- build_and_push_db:
118+
requires:
119+
- set_common_build_number
120+
- build_and_push_client:
121+
requires:
122+
- set_common_build_number
123+
- smoketest:
124+
requires:
125+
- set_common_build_number
126+
- build_and_push_db
127+
- build_and_push_client

client/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ WORKDIR /fossildb/client
88
RUN pip3 install -r requirements.txt
99
RUN ./update_api.sh
1010

11-
ENTRYPOINT /fossildb/client/backup-client.py
11+
ENTRYPOINT ["/fossildb/client/fossildb-client"]
Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
11
#!/usr/bin/env python3
22

3+
import argparse
34
import grpc
45
import sys
5-
import argparse
66

7-
import fossildbapi_pb2
8-
import fossildbapi_pb2_grpc
7+
import fossildbapi_pb2 as proto
8+
import fossildbapi_pb2_grpc as proto_rpc
99

1010

1111
def main():
1212

13-
commands = {'backup': backup, 'restore': restore}
13+
commands = {
14+
'backup': lambda stub:
15+
stub.Backup(proto.BackupRequest()),
16+
'restore': lambda stub:
17+
stub.RestoreFromBackup(proto.RestoreFromBackupRequest()),
18+
'health': lambda stub:
19+
stub.Health(proto.HealthRequest())
20+
}
1421

1522
parser = argparse.ArgumentParser()
1623
parser.add_argument(
@@ -25,12 +32,17 @@ def main():
2532

2633
args = parser.parse_args()
2734

35+
if args.command not in commands:
36+
print("command {} is not available".format(args.command))
37+
parser.print_help()
38+
exit(20)
39+
2840
full_address = '{}:{}'.format(args.address, args.port)
2941

30-
print('Requesting RestoreFromBackup to FossilDB at', full_address)
42+
print('Connecting to FossilDB at', full_address)
3143

3244
channel = grpc.insecure_channel(full_address)
33-
stub = fossildbapi_pb2_grpc.FossilDBStub(channel)
45+
stub = proto_rpc.FossilDBStub(channel)
3446

3547
reply = commands[args.command](stub)
3648

@@ -39,13 +51,5 @@ def main():
3951
sys.exit(1)
4052

4153

42-
def restore(stub):
43-
return stub.RestoreFromBackup(fossildbapi_pb2.RestoreFromBackupRequest())
44-
45-
46-
def backup(stub):
47-
return stub.Backup(fossildbapi_pb2.BackupRequest())
48-
49-
5054
if __name__ == '__main__':
5155
main()

docker-compose.yaml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,25 @@ version: '2.1'
22

33
services:
44
fossildb:
5-
image: scalableminds/fossildb:${DOCKER_TAG:-master}
5+
image: scalableminds/fossildb:${FOSSILDB_TAG:-master}
66
entrypoint: fossildb
77
command:
88
- -c
99
- default
1010
ports:
11-
- "8090:8090"
11+
- "7155:7155"
1212
volumes:
1313
- "./data:/fossildb/data"
1414
- "./backup:/fossildb/backup"
1515

16+
fossildb-health-check:
17+
image: scalableminds/fossildb-client:${FOSSILDB_CLIENT_TAG:-master}
18+
command:
19+
- fossildb
20+
- health
21+
links:
22+
- fossildb
23+
1624
sbt:
1725
image: scalableminds/sbt:${SBT_VERSION_TAG:-sbt-0.13.15_mongo-3.2.17_node-8.x_jdk-8}
1826
environment:

0 commit comments

Comments
 (0)