From 4740bfb93606df842775309e2f2771a6bb2c9cbf Mon Sep 17 00:00:00 2001 From: Matt Butcher Date: Thu, 3 Mar 2016 17:39:46 -0700 Subject: [PATCH] fix(rootfs): improve Makefiles for docker builds This introduces a docker.mk file that now has shared logic between the different builds. This will also create docker images that are stored in non-public registries, which is great for cases where internet is spotty or down. Some of the changes are just to normalize the Makefiles, using more make and less arbitrary shell. This partially addresses #292. Closes #293. --- .gitignore | 2 ++ Makefile | 14 +++++++++++--- rootfs/docker.mk | 34 ++++++++++++++++++++++++++++++++++ rootfs/expandybird/Makefile | 6 +++--- rootfs/manager/Makefile | 9 +++------ rootfs/resourcifier/Makefile | 12 ++++-------- 6 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 rootfs/docker.mk diff --git a/.gitignore b/.gitignore index 875c22e57..f025fd719 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,9 @@ /vendor/* /rootfs/manager/bin/manager /rootfs/manager/bin/kubectl +/rootfs/manager/bin/v1* /rootfs/resourcifier/bin/resourcifier /rootfs/resourcifier/bin/kubectl +/rootfs/resourcifier/bin/v1* /rootfs/expandybird/bin/expandybird /rootfs/expandybird/opt/expansion diff --git a/Makefile b/Makefile index 126856f78..11c7bdf38 100644 --- a/Makefile +++ b/Makefile @@ -77,6 +77,7 @@ HAS_GLIDE := $(shell command -v glide) HAS_GOLINT := $(shell command -v golint) HAS_GOVET := $(shell command -v go tool vet) HAS_GOX := $(shell command -v gox) +HAS_DOCKER := $(shell command -v docker) .PHONY: bootstrap bootstrap: @@ -94,12 +95,19 @@ ifndef HAS_GOX go get -u github.com/mitchellh/gox endif glide install +ifndef HAS_DOCKER + $(warning You must install Docker manually) +endif .PHONY: .project .project: - @if [[ -z "${PROJECT}" ]]; then echo "PROJECT variable must be set"; exit 1; fi + $(info Docker registry: $(PREFIX)) +ifeq ($(PREFIX),gcr.io) + $(error "You must set at least one of the following environment variables: DOCKER_PROJECT, DOCKER_REGISTRY") +endif .PHONY: .docker .docker: - @if [[ -z `which docker` ]] || ! docker version &> /dev/null; then echo "docker is not installed correctly"; exit 1; fi - +ifndef HAS_DOCKER + $(error You must install docker) +endif diff --git a/rootfs/docker.mk b/rootfs/docker.mk new file mode 100644 index 000000000..77c085247 --- /dev/null +++ b/rootfs/docker.mk @@ -0,0 +1,34 @@ +# Copyright 2016 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +DOCKER_REGISTRY ?= gcr.io + +# Legacy support for $PROJECT +DOCKER_PROJECT ?= $(PROJECT) + +# Support both local and remote repos, and support no project. +ifdef $(DOCKER_PROJECT) +PREFIX := $(DOCKER_REGISTRY)/$(DOCKER_PROJECT) +else +PREFIX := $(DOCKER_REGISTRY) +endif + +TAG ?= git-$(shell git rev-parse --short HEAD) + +ROOT_DIR := $(abspath ./..) +kubectl: +ifeq ("$(wildcard bin/$(KUBE_VERSION))", "") + touch bin/$(KUBE_VERSION) + curl -fsSL -o bin/kubectl https://storage.googleapis.com/kubernetes-release/release/${KUBE_VERSION}/bin/linux/amd64/kubectl + chmod +x bin/kubectl +endif diff --git a/rootfs/expandybird/Makefile b/rootfs/expandybird/Makefile index a7baecf58..2630c6224 100644 --- a/rootfs/expandybird/Makefile +++ b/rootfs/expandybird/Makefile @@ -11,8 +11,8 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -DOCKER_REGISTRY := gcr.io -PREFIX := $(DOCKER_REGISTRY)/$(PROJECT) +include ../docker.mk + IMAGE ?= expandybird TAG ?= git-$(shell git rev-parse --short HEAD) FULL_IMAGE := $(PREFIX)/$(IMAGE) @@ -20,7 +20,7 @@ FULL_IMAGE := $(PREFIX)/$(IMAGE) .PHONY: container container: binary expansion docker build -t $(FULL_IMAGE):latest -f Dockerfile . - docker tag $(FULL_IMAGE):latest $(FULL_IMAGE):$(TAG) + docker tag -f $(FULL_IMAGE):latest $(FULL_IMAGE):$(TAG) .PHONY: push push: container diff --git a/rootfs/manager/Makefile b/rootfs/manager/Makefile index e116a491f..9583dfb3d 100644 --- a/rootfs/manager/Makefile +++ b/rootfs/manager/Makefile @@ -11,8 +11,8 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -DOCKER_REGISTRY := gcr.io -PREFIX := $(DOCKER_REGISTRY)/$(PROJECT) +include ../docker.mk + IMAGE ?= manager TAG ?= git-$(shell git rev-parse --short HEAD) FULL_IMAGE := $(PREFIX)/$(IMAGE) @@ -22,7 +22,7 @@ KUBE_VERSION ?= v1.1.7 .PHONY: container container: binary kubectl docker build -t $(FULL_IMAGE):latest -f Dockerfile . - docker tag $(FULL_IMAGE):latest $(FULL_IMAGE):$(TAG) + docker tag -f $(FULL_IMAGE):latest $(FULL_IMAGE):$(TAG) .PHONY: push push: container @@ -35,6 +35,3 @@ endif binary: cp ../../bin/linux-amd64/manager ./bin -kubectl: - curl -fsSL -o bin/kubectl https://storage.googleapis.com/kubernetes-release/release/${KUBE_VERSION}/bin/linux/amd64/kubectl - chmod +x bin/kubectl diff --git a/rootfs/resourcifier/Makefile b/rootfs/resourcifier/Makefile index 26a42b2e4..7d377c800 100644 --- a/rootfs/resourcifier/Makefile +++ b/rootfs/resourcifier/Makefile @@ -11,8 +11,8 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -DOCKER_REGISTRY := gcr.io -PREFIX := $(DOCKER_REGISTRY)/$(PROJECT) +include ../docker.mk + IMAGE ?= resourcifier TAG ?= git-$(shell git rev-parse --short HEAD) FULL_IMAGE := $(PREFIX)/$(IMAGE) @@ -21,8 +21,8 @@ KUBE_VERSION ?= v1.1.7 .PHONY: container container: binary kubectl - docker build -t $(FULL_IMAGE):latest -f Dockerfile . - docker tag $(FULL_IMAGE):latest $(FULL_IMAGE):$(TAG) + docker build -t $(FULL_IMAGE):$(TAG) -f Dockerfile . + docker tag -f $(FULL_IMAGE):$(TAG) $(FULL_IMAGE):latest .PHONY: push push: container @@ -34,7 +34,3 @@ endif binary: cp ../../bin/linux-amd64/resourcifier ./bin - -kubectl: - curl -fsSL -o bin/kubectl https://storage.googleapis.com/kubernetes-release/release/${KUBE_VERSION}/bin/linux/amd64/kubectl - chmod +x bin/kubectl