From a8bb8084b34d26bd84aa14af2cb959156dc1942a Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Mon, 30 Oct 2017 15:46:47 +0000 Subject: [PATCH] Build Go code in Docker --- .dockerignore | 3 --- Dockerfile-server | 20 ++++++++++++++++++-- Makefile | 23 ++++------------------- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/.dockerignore b/.dockerignore index 8a5bdc2..8a11d62 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,3 @@ charts -cmd downloads -pkg test -vendor diff --git a/Dockerfile-server b/Dockerfile-server index 43fccd9..d21e5a0 100644 --- a/Dockerfile-server +++ b/Dockerfile-server @@ -12,6 +12,22 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Build stage to build Go code +FROM golang:1.9 as builder +WORKDIR /go/src/github.com/ibm-messaging/mq-container/ +COPY cmd/ ./cmd +COPY pkg/ ./pkg +COPY vendor/ ./vendor +RUN GOOS=linux go build ./cmd/runmqserver/ +RUN GOOS=linux go build ./cmd/chkmqready/ +RUN GOOS=linux go build ./cmd/chkmqhealthy/ + +# Build stage to run Go unit tests +FROM golang:1.9 as tester +COPY pkg/ ./pkg +RUN cd pkg/name && GOOS=linux go test + +# Main build stage, to build MQ image FROM ubuntu:16.04 # The URL to download the MQ installer from in tar.gz format @@ -28,8 +44,8 @@ RUN chmod u+x /usr/local/bin/install-mq.sh \ && sleep 1 \ && install-mq.sh -COPY build/runmqserver /usr/local/bin/ -COPY build/chkmq* /usr/local/bin/ +COPY --from=builder /go/src/github.com/ibm-messaging/mq-container/runmqserver /usr/local/bin/ +COPY --from=builder /go/src/github.com/ibm-messaging/mq-container/chkmq* /usr/local/bin/ COPY NOTICES.txt /opt/mqm/licenses/notices-container.txt RUN chmod +x /usr/local/bin/runmqserver \ diff --git a/Makefile b/Makefile index 8111f47..abd4551 100644 --- a/Makefile +++ b/Makefile @@ -63,43 +63,28 @@ deps: cd test/docker && dep ensure -vendor-only cd test/kubernetes && dep ensure -vendor-only -build/runmqserver: - mkdir -p build - cd build; GOOS=linux go build ../cmd/runmqserver/ - -build/chkmqready: - mkdir -p build - cd build; GOOS=linux go build ../cmd/chkmqready/ - -build/chkmqhealthy: - mkdir -p build - cd build; GOOS=linux go build ../cmd/chkmqhealthy/ - -.PHONY: build -build: build/runmqserver build/chkmqready build/chkmqhealthy - .PHONY: build-cov build-cov: mkdir -p build cd build; go test -c -covermode=count ../cmd/runmqserver .PHONY: test-advancedserver -test-advancedserver: build +test-advancedserver: cd pkg/name && go test cd test/docker && TEST_IMAGE=$(DOCKER_FULL_ADVANCEDSERVER) go test $(TEST_OPTS_DOCKER) .PHONY: test-devserver -test-devserver: build +test-devserver: $(info $(SPACER)$(shell printf $(TITLE)"Test $(DOCKER_FULL_DEVSERVER)"$(END))) cd pkg/name && go test cd test/docker && TEST_IMAGE=$(DOCKER_FULL_DEVSERVER) go test .PHONY: test-kubernetes-devserver -test-kubernetes-devserver: build +test-kubernetes-devserver: $(call test-kubernetes,$(DOCKER_REPO_DEVSERVER),$(DOCKER_TAG),"../../charts/ibm-mqadvanced-server-dev") .PHONY: test-kubernetes-advancedserver -test-kubernetes-advancedserver: build +test-kubernetes-advancedserver: $(call test-kubernetes,$(DOCKER_REPO_ADVANCEDSERVER),$(DOCKER_TAG),"../../charts/ibm-mqadvanced-server-prod") define test-kubernetes