From 15dd8b1b44b939c5da884cfb9d1af82c41680cbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraci=20Paix=C3=A3o=20Kr=C3=B6hling?= Date: Fri, 26 May 2017 06:20:00 +0200 Subject: [PATCH] Build Docker images for individual components (#157) --- .gitignore | 1 + .travis.yml | 5 ++++ Makefile | 18 ++++++++++++- cmd/agent/Dockerfile | 6 +++++ cmd/collector/Dockerfile | 6 +++++ cmd/query/Dockerfile | 7 +++++ plugin/storage/cassandra/Dockerfile | 8 ++++++ plugin/storage/cassandra/create-schema.sh | 31 +++++++++++++++++++++++ travis/build-docker-images.sh | 17 +++++++++++++ 9 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 cmd/agent/Dockerfile create mode 100644 cmd/collector/Dockerfile create mode 100644 cmd/query/Dockerfile create mode 100644 plugin/storage/cassandra/Dockerfile create mode 100755 plugin/storage/cassandra/create-schema.sh create mode 100644 travis/build-docker-images.sh diff --git a/.gitignore b/.gitignore index 31192e26f2f..ae1c2d2b119 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ cmd/standalone/standalone-linux cmd/agent/agent* cmd/collector/collector* cmd/query/query* +cmd/query/jaeger-ui-build/ crossdock/crossdock crossdock/cmd/ crossdock/scripts/ diff --git a/.travis.yml b/.travis.yml index 055b890a1f8..d35f97bee26 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,6 +16,9 @@ matrix: - go: 1.7 env: - CROSSDOCK=true + - go: 1.7 + env: + - DOCKER=true # TODO 1.8 tests take way too long to run 900s vs 250s for 1.7 # - go: 1.8 # env: @@ -36,6 +39,7 @@ env: install: - make install_ci - if [ "$ALL_IN_ONE" == true ]; then bash ./travis/install-ui-deps.sh ; fi + - if [ "$DOCKER" == true ]; then bash ./travis/install-ui-deps.sh ; fi - if [ "$CROSSDOCK" == true ]; then bash ./travis/install-crossdock-deps.sh ; fi script: @@ -43,3 +47,4 @@ script: - if [ "$COVERAGE" == true ]; then travis_retry goveralls -coverprofile=cover.out -service=travis-ci || true ; else echo 'skipping coverage'; fi - if [ "$ALL_IN_ONE" == true ]; then bash ./travis/build-all-in-one-image.sh ; else echo 'skipping all_in_one'; fi - if [ "$CROSSDOCK" == true ]; then bash ./travis/build-crossdock.sh ; else echo 'skipping crossdock'; fi + - if [ "$DOCKER" == true ]; then bash ./travis/build-docker-images.sh ; else echo 'skipping docker images'; fi diff --git a/Makefile b/Makefile index 62af0edf571..022276518ca 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,7 @@ THRIFT_GEN_DIR=thrift-gen PASS=$(shell printf "\033[32mPASS\033[0m") FAIL=$(shell printf "\033[31mFAIL\033[0m") COLORIZE=sed ''/PASS/s//$(PASS)/'' | sed ''/FAIL/s//$(FAIL)/'' +DOCKER_NAMESPACE?=$(USER) .DEFAULT_GOAL := test-and-lint @@ -46,7 +47,7 @@ md-to-godoc-gen: .PHONY: clean clean: - rm -rf cover.out cover.html lint.log fmt.log + rm -rf cover.out cover.html lint.log fmt.log jaeger-ui-build .PHONY: test test: go-gen @@ -111,6 +112,21 @@ build-query-linux: build-collector-linux: CGO_ENABLED=0 GOOS=linux installsuffix=cgo go build -o ./cmd/collector/collector-linux ./cmd/collector/main.go +.PHONY: docker +docker: build_ui build-agent-linux build-collector-linux build-query-linux + cp -r jaeger-ui-build/build/ cmd/query/jaeger-ui-build + docker build -t $(DOCKER_NAMESPACE)/jaeger-cassandra-schema plugin/storage/cassandra/ ; \ + for component in agent collector query ; do \ + docker build -t $(DOCKER_NAMESPACE)/jaeger-$$component cmd/$$component ; \ + done + rm -rf cmd/query/jaeger-ui-build + +.PHONY: docker-push +docker-push: + for component in agent cassandra-schema collector query ; do \ + docker push $(DOCKER_NAMESPACE)/jaeger-$$component ; \ + done + .PHONY: build-crossdock-linux build-crossdock-linux: CGO_ENABLED=0 GOOS=linux installsuffix=cgo go build -o ./crossdock/crossdock ./crossdock/main.go diff --git a/cmd/agent/Dockerfile b/cmd/agent/Dockerfile new file mode 100644 index 00000000000..2e33ec7ee1e --- /dev/null +++ b/cmd/agent/Dockerfile @@ -0,0 +1,6 @@ +FROM centos:7 +EXPOSE 5775/udp 6831/udp 6832/udp 5778 + +COPY agent-linux /go/bin/ + +CMD ["/go/bin/agent-linux"] diff --git a/cmd/collector/Dockerfile b/cmd/collector/Dockerfile new file mode 100644 index 00000000000..d346373f8d2 --- /dev/null +++ b/cmd/collector/Dockerfile @@ -0,0 +1,6 @@ +FROM centos:7 +EXPOSE 14267 + +COPY collector-linux /go/bin/ + +CMD ["/go/bin/collector-linux"] diff --git a/cmd/query/Dockerfile b/cmd/query/Dockerfile new file mode 100644 index 00000000000..6677d2ed657 --- /dev/null +++ b/cmd/query/Dockerfile @@ -0,0 +1,7 @@ +FROM centos:7 +EXPOSE 16686 + +COPY query-linux /go/bin/ +ADD jaeger-ui-build /go/jaeger-ui/ + +CMD ["/go/bin/query-linux", "--query.static-files=/go/jaeger-ui/"] diff --git a/plugin/storage/cassandra/Dockerfile b/plugin/storage/cassandra/Dockerfile new file mode 100644 index 00000000000..fbb97dba1db --- /dev/null +++ b/plugin/storage/cassandra/Dockerfile @@ -0,0 +1,8 @@ +# TODO: replace this by the final Cassandra image +FROM jpkroehling/cassandra + +COPY cassandra3v001-schema.sh /cassandra-schema/ +COPY create-schema.sh /cassandra-schema/ + +ENV CQLSH_HOST=cassandra +CMD ["/cassandra-schema/create-schema.sh"] diff --git a/plugin/storage/cassandra/create-schema.sh b/plugin/storage/cassandra/create-schema.sh new file mode 100755 index 00000000000..662f53dc4dd --- /dev/null +++ b/plugin/storage/cassandra/create-schema.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +CQLSH_HOST=${CQLSH_HOST:-"cassandra"} +CASSANDRA_WAIT_TIMEOUT=${CASSANDRA_WAIT_TIMEOUT:-"60"} +DATACENTER=${DATACENTER:-"dc1"} +KEYSPACE=${KEYSPACE:-"jaeger_v1_${DATACENTER}"} + +total_wait=0 +while true +do + /opt/apache-cassandra-3.0.12/bin/cqlsh -e "describe keyspaces" > /dev/null 2>&1 + if (( $? == 0 )); then + break + else + if (( total_wait >= ${CASSANDRA_WAIT_TIMEOUT} )); then + echo "Timed out waiting for Cassandra." + exit 1 + fi + echo "Cassandra is still not up at ${CQLSH_HOST}. Waiting 1 second." + sleep 1s + ((total_wait++)) + fi +done + +echo "Generating the schema for the keyspace ${KEYSPACE} and datacenter ${DATACENTER}" +export KEYSPACE + +# the `test` parameter is to force the script to use a SimpleStrategy instead of +# NetworkTopologyStrategy . +/cassandra-schema/cassandra3v001-schema.sh test "${DATACENTER}" | \ + /opt/apache-cassandra-3.0.12/bin/cqlsh diff --git a/travis/build-docker-images.sh b/travis/build-docker-images.sh new file mode 100644 index 00000000000..da4f47e4014 --- /dev/null +++ b/travis/build-docker-images.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +set -e + +export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo $TRAVIS_PULL_REQUEST_BRANCH; fi) +# Only push the docker container to Docker Hub for master branch +if [[ "$BRANCH" == "master" && "$TRAVIS_SECURE_ENV_VARS" == "true" ]]; then echo 'upload to Docker Hub'; else echo 'skip docker upload for PR'; exit 0; fi + +source ~/.nvm/nvm.sh +nvm use 6 +DOCKER_NAMESPACE=jaegertracing make docker + +for component in agent cassandra-schema collector query +do + export REPO="jaegertracing/jaeger-${component}" + bash ./travis/upload-to-docker.sh +done