Skip to content

Commit

Permalink
Add base images override support
Browse files Browse the repository at this point in the history
Go builder and base images override support for downstream
deployment customizations for both airshipctl and plugins.
If required, adjust the following Zuul job variables:
 - docker.base_go_image
 - docker.base_release_image
 - docker.base_plugins_build_image
 - docker.base_plugins_release_image

Closes: #515
Change-Id: Iaf4b54a353207b06c9ed6bdcae876537e73f6e44
  • Loading branch information
gorshunovr committed Apr 12, 2021
1 parent 7ed5908 commit 7998615
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 41 deletions.
20 changes: 17 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ LINTER_CONFIG := .golangci.yaml

# docker
DOCKER_MAKE_TARGET := build
DOCKER_CMD_FLAGS :=

# docker image options
DOCKER_REGISTRY ?= quay.io
Expand All @@ -32,6 +33,13 @@ DOCKER_IMAGE_TAG ?= latest
DOCKER_IMAGE ?= $(DOCKER_REGISTRY)/$(DOCKER_IMAGE_PREFIX)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)
DOCKER_TARGET_STAGE ?= release
PUBLISH ?= false
# use this variables to override base images in internal build process
ifneq ($(strip $(DOCKER_BASE_GO_IMAGE)),)
DOCKER_CMD_FLAGS += --build-arg GO_IMAGE=$(strip $(DOCKER_BASE_GO_IMAGE))
endif
ifneq ($(strip $(DOCKER_BASE_RELEASE_IMAGE)),)
DOCKER_CMD_FLAGS += --build-arg RELEASE_IMAGE=$(strip $(DOCKER_BASE_RELEASE_IMAGE))
endif
# use this variable for image labels added in internal build process
LABEL ?= org.airshipit.build=community
COMMIT ?= $(shell git rev-parse HEAD)
Expand All @@ -50,7 +58,7 @@ NO_PROXY ?= localhost,127.0.0.1,.svc.cluster.local
USE_PROXY ?= false

# docker build flags
DOCKER_CMD_FLAGS := --network=host
DOCKER_CMD_FLAGS += --network=host
DOCKER_CMD_FLAGS += --force-rm=$(DOCKER_FORCE_CLEAN)

DOCKER_PROXY_FLAGS := --build-arg http_proxy=$(PROXY)
Expand Down Expand Up @@ -80,7 +88,14 @@ export KUBECTL_URL ?= https://storage.googleapis.com/kubernetes-release/release
PLUGINS_DIR := krm-functions
PLUGINS := $(subst $(PLUGINS_DIR)/,,$(wildcard $(PLUGINS_DIR)/*))
PLUGINS_IMAGE_TGT := $(foreach tgt,$(PLUGINS),docker-image-$(tgt))
PLUGINS_BASE_IMAGE ?= alpine:3.12.0
# use this variables to override base images in internal build process
ifneq ($(strip $(DOCKER_BASE_PLUGINS_BUILD_IMAGE)),)
DOCKER_CMD_FLAGS += --build-arg PLUGINS_BUILD_IMAGE=$(strip $(DOCKER_BASE_PLUGINS_BUILD_IMAGE))
endif
ifneq ($(strip $(DOCKER_BASE_PLUGINS_RELEASE_IMAGE)),)
DOCKER_CMD_FLAGS += --build-arg PLUGINS_RELEASE_IMAGE=$(strip $(DOCKER_BASE_PLUGINS_RELEASE_IMAGE))
endif


$(PLUGINS):
@CGO_ENABLED=0 go build -o $(BINDIR)/$@ $(GO_FLAGS) ./$(PLUGINS_DIR)/$@/
Expand Down Expand Up @@ -168,7 +183,6 @@ $(PLUGINS_IMAGE_TGT):
--target $(DOCKER_TARGET_STAGE) \
--build-arg MAKE_TARGET=$(plugin_name) \
--build-arg BINARY=$(plugin_name) \
--build-arg RELEASE_IMAGE=$(PLUGINS_BASE_IMAGE) \
--tag $(DOCKER_REGISTRY)/$(DOCKER_IMAGE_PREFIX)/$(plugin_name):$(DOCKER_IMAGE_TAG)
ifeq ($(PUBLISH), true)
@docker push $(DOCKER_REGISTRY)/$(DOCKER_IMAGE_PREFIX)/$(plugin_name):$(DOCKER_IMAGE_TAG)
Expand Down
33 changes: 10 additions & 23 deletions krm-functions/toolbox/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
ARG RELEASE_IMAGE=scratch
FROM ${RELEASE_IMAGE} as kctl
ARG GO_IMAGE=gcr.io/gcp-runtimes/go1-builder:1.15
ARG PLUGINS_BUILD_IMAGE=alpine:3.12.0
ARG PLUGINS_RELEASE_IMAGE=alpine:3.12.0
FROM ${PLUGINS_BUILD_IMAGE} as ctls

RUN apk update && apk add curl

# Inject custom root certificate authorities if needed
# Docker does not have a good conditional copy statement and requires that a source file exists
# to complete the copy function without error. Therefore the README.md file will be copied to
Expand All @@ -12,33 +13,19 @@ RUN update-ca-certificates

RUN curl -L "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" \
-o /kubectl
RUN chmod +x /kubectl
RUN curl -L "https://github.com/projectcalico/calicoctl/releases/download/v3.18.1/calicoctl" \
-o /calicoctl
RUN chmod +x /kubectl /calicoctl

FROM gcr.io/gcp-runtimes/go1-builder:1.15 as builder
FROM ${GO_IMAGE} as builder
ENV CGO_ENABLED=0
WORKDIR /go/src/
COPY krm-functions/toolbox/image/go.mod .
RUN /usr/local/go/bin/go mod download
COPY krm-functions/toolbox/main.go .
RUN /usr/local/go/bin/go build -v -o /usr/local/bin/config-function ./

FROM ${RELEASE_IMAGE} as calicoctl

RUN apk update && apk add curl

# Inject custom root certificate authorities if needed
# Docker does not have a good conditional copy statement and requires that a source file exists
# to complete the copy function without error. Therefore the README.md file will be copied to
# the image every time even if there are no .crt files.
COPY ./certs/* /usr/local/share/ca-certificates/
RUN update-ca-certificates

RUN curl -L "https://github.com/projectcalico/calicoctl/releases/download/v3.18.1/calicoctl" \
-o /calicoctl
RUN chmod +x /calicoctl

FROM ${RELEASE_IMAGE} as release
COPY --from=kctl /kubectl /usr/local/bin/kubectl
COPY --from=calicoctl /calicoctl /usr/local/bin/calicoctl
FROM ${PLUGINS_RELEASE_IMAGE} as release
COPY --from=ctls /kubectl /calicoctl /usr/local/bin/
COPY --from=builder /usr/local/bin/config-function /usr/local/bin/config-function
CMD ["/usr/local/bin/config-function"]
4 changes: 4 additions & 0 deletions roles/airshipctl-build-images/tasks/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
PROXY: "{{ proxy.http }}"
NO_PROXY: "{{ proxy.noproxy }}"
USE_PROXY: "{{ proxy.enabled | lower }}"
DOCKER_BASE_GO_IMAGE: "{{ docker.base_go_image | default(omit) }}"
DOCKER_BASE_RELEASE_IMAGE: "{{ docker.base_release_image | default(omit) }}"
DOCKER_BASE_PLUGINS_BUILD_IMAGE: "{{ docker.base_plugins_build_image | default(omit) }}"
DOCKER_BASE_PLUGINS_RELEASE_IMAGE: "{{ docker.base_plugins_release_image | default(omit) }}"

- name: Verify Image Exists
shell: docker image inspect "$(make print-docker-image-tag)"
Expand Down
24 changes: 9 additions & 15 deletions roles/airshipctl-publish-images/tasks/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,28 +28,22 @@
password: "{{ airshipctl_image_repo_credentials.password }}"
registry_url: "{{ image_repo }}"

- name: Push Image with Latest Tag
- name: Push Image with Tags
make:
chdir: "{{ zuul.project.src_dir }}"
params:
DOCKER_IMAGE_TAG: latest
PUBLISH: "true"
PROXY: "{{ proxy.http }}"
NO_PROXY: "{{ proxy.noproxy }}"
USE_PROXY: "{{ proxy.enabled | lower }}"
DOCKER_REGISTRY: "{{ image_repo }}"
DOCKER_IMAGE_PREFIX: "{{ image_prefix | default('airshipit') }}"
target: images

- name: Push Image with Commit Tag
make:
chdir: "{{ zuul.project.src_dir }}"
params:
DOCKER_IMAGE_TAG: "{{ zuul.newrev }}"
DOCKER_IMAGE_TAG: "{{ item }}"
PUBLISH: "true"
PROXY: "{{ proxy.http }}"
NO_PROXY: "{{ proxy.noproxy }}"
USE_PROXY: "{{ proxy.enabled | lower }}"
DOCKER_REGISTRY: "{{ image_repo }}"
DOCKER_IMAGE_PREFIX: "{{ image_prefix | default('airshipit') }}"
DOCKER_BASE_GO_IMAGE: "{{ docker.base_go_image | default(omit) }}"
DOCKER_BASE_RELEASE_IMAGE: "{{ docker.base_release_image | default(omit) }}"
DOCKER_BASE_PLUGINS_BUILD_IMAGE: "{{ docker.base_plugins_build_image | default(omit) }}"
DOCKER_BASE_PLUGINS_RELEASE_IMAGE: "{{ docker.base_plugins_release_image | default(omit) }}"
target: images
loop:
- "latest"
- "{{ zuul.newrev }}"
6 changes: 6 additions & 0 deletions zuul.d/projects.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@
https: ""
noproxy: ""
image_repo: quay.io
docker:
base_go_image: ""
base_release_image: ""
base_plugins_build_image: ""
base_plugins_release_image: ""

check:
jobs:
- openstack-tox-docs: &docs
Expand Down

0 comments on commit 7998615

Please sign in to comment.