Skip to content
This repository was archived by the owner on Oct 14, 2024. It is now read-only.

feat: add docker bake #1111

Merged
merged 2 commits into from
Feb 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 49 additions & 55 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,6 @@ HELM_CHART_DIR := $(INSTALLATION_DIR)/kubernetes/helm
HELM_OCI_REPOSITORY := ghcr.io/openclarity/charts
DIST_DIR ?= $(ROOT_DIR)/dist

VMCLARITY_APISERVER_IMAGE = $(DOCKER_REGISTRY)/vmclarity-apiserver:$(DOCKER_TAG)
VMCLARITY_ORCHESTRATOR_IMAGE = $(DOCKER_REGISTRY)/vmclarity-orchestrator:$(DOCKER_TAG)
VMCLARITY_UI_IMAGE = $(DOCKER_REGISTRY)/vmclarity-ui:$(DOCKER_TAG)
VMCLARITY_UIBACKEND_IMAGE = $(DOCKER_REGISTRY)/vmclarity-ui-backend:$(DOCKER_TAG)
VMCLARITY_SCANNER_IMAGE = $(DOCKER_REGISTRY)/vmclarity-cli:$(DOCKER_TAG)
VMCLARITY_CR_DISCOVERY_SERVER_IMAGE = $(DOCKER_REGISTRY)/vmclarity-cr-discovery-server:$(DOCKER_TAG)

####
## Load additional makefiles
####
Expand Down Expand Up @@ -146,13 +139,13 @@ $(FIXGOMODULES):
fix: bin/golangci-lint $(FIXGOMODULES) ## Fix linter errors in Go source code

.PHONY: e2e
e2e: docker-apiserver docker-cli docker-orchestrator docker-ui docker-ui-backend docker-cr-discovery-server ## Run end-to-end test suite
export VMCLARITY_E2E_APISERVER_IMAGE=$(VMCLARITY_APISERVER_IMAGE) \
VMCLARITY_E2E_ORCHESTRATOR_IMAGE=$(VMCLARITY_ORCHESTRATOR_IMAGE) \
VMCLARITY_E2E_UI_IMAGE=$(VMCLARITY_UI_IMAGE) \
VMCLARITY_E2E_UIBACKEND_IMAGE=$(VMCLARITY_UIBACKEND_IMAGE) \
VMCLARITY_E2E_SCANNER_IMAGE=$(VMCLARITY_SCANNER_IMAGE) \
VMCLARITY_E2E_CR_DISCOVERY_SERVER_IMAGE=$(VMCLARITY_CR_DISCOVERY_SERVER_IMAGE) && \
e2e: docker ## Run end-to-end test suite
export VMCLARITY_E2E_APISERVER_IMAGE=$(DOCKER_REGISTRY)/vmclarity-apiserver:$(DOCKER_TAG) \
VMCLARITY_E2E_ORCHESTRATOR_IMAGE=$(DOCKER_REGISTRY)/vmclarity-orchestrator:$(DOCKER_TAG) \
VMCLARITY_E2E_UI_IMAGE=$(DOCKER_REGISTRY)/vmclarity-ui:$(DOCKER_TAG) \
VMCLARITY_E2E_UIBACKEND_IMAGE=$(DOCKER_REGISTRY)/vmclarity-ui-backend:$(DOCKER_TAG) \
VMCLARITY_E2E_SCANNER_IMAGE=$(DOCKER_REGISTRY)/vmclarity-cli:$(DOCKER_TAG) \
VMCLARITY_E2E_CR_DISCOVERY_SERVER_IMAGE=$(DOCKER_REGISTRY)/vmclarity-cr-discovery-server:$(DOCKER_TAG) && \
cd e2e && \
go test -v -failfast -test.v -test.paniconexit0 -timeout 2h -ginkgo.v .

Expand Down Expand Up @@ -205,92 +198,93 @@ test: $(TESTGOMODULES) ## Run Go unit tests

##@ Docker

# Export params required in Docker Bake
BAKE_OPTS =
BAKE_OPTS += --set *.args.DOCKER_REGISTRY=$(DOCKER_REGISTRY)
BAKE_OPTS += --set *.args.DOCKER_TAG=$(DOCKER_TAG)
BAKE_OPTS += --set *.args.VERSION=$(VERSION)
BAKE_OPTS += --set *.args.BUILD_TIMESTAMP=$(BUILD_TIMESTAMP)
BAKE_OPTS += --set *.args.COMMIT_HASH=$(COMMIT_HASH)
ifneq ($(strip $(VMCLARITY_TOOLS_BASE)),)
BAKE_OPTS += --set vmclarity-cli.args.VMCLARITY_TOOLS_BASE=$(VMCLARITY_TOOLS_BASE)
endif

.PHONY: docker
docker: docker-apiserver docker-cli docker-orchestrator docker-ui docker-ui-backend docker-cr-discovery-server ## Build All Docker images
docker: ## Build All Docker images
$(info Building all docker images ...)
docker buildx bake $(BAKE_OPTS)

.PHONY: docker-apiserver
docker-apiserver: ## Build API Server container image
$(info Building apiserver docker image ...)
docker build --file ./Dockerfile.apiserver --build-arg VERSION=$(VERSION) \
--build-arg BUILD_TIMESTAMP=$(BUILD_TIMESTAMP) \
--build-arg COMMIT_HASH=$(COMMIT_HASH) \
-t $(VMCLARITY_APISERVER_IMAGE) .

ifneq ($(strip $(VMCLARITY_TOOLS_BASE)),)
VMCLARITY_TOOLS_CLI_DOCKER_ARG=--build-arg VMCLARITY_TOOLS_BASE=${VMCLARITY_TOOLS_BASE}
endif
docker buildx bake $(BAKE_OPTS) vmclarity-apiserver

.PHONY: docker-cli
docker-cli: ## Build CLI container image
$(info Building cli docker image ...)
docker build --file ./Dockerfile.cli --build-arg VERSION=$(VERSION) \
--build-arg BUILD_TIMESTAMP=$(BUILD_TIMESTAMP) \
--build-arg COMMIT_HASH=$(COMMIT_HASH) \
${VMCLARITY_TOOLS_CLI_DOCKER_ARG} \
-t $(VMCLARITY_SCANNER_IMAGE) .
docker buildx bake $(BAKE_OPTS) vmclarity-cli

.PHONY: docker-orchestrator
docker-orchestrator: ## Build Orchestrator container image
$(info Building orchestrator docker image ...)
docker build --file ./Dockerfile.orchestrator --build-arg VERSION=$(VERSION) \
--build-arg BUILD_TIMESTAMP=$(BUILD_TIMESTAMP) \
--build-arg COMMIT_HASH=$(COMMIT_HASH) \
-t $(VMCLARITY_ORCHESTRATOR_IMAGE) .
docker buildx bake $(BAKE_OPTS) vmclarity-orchestrator

.PHONY: docker-ui
docker-ui: ## Build UI container image
$(info Building ui docker image ...)
docker build --file ./Dockerfile.ui \
-t $(VMCLARITY_UI_IMAGE) .
docker buildx bake $(BAKE_OPTS) vmclarity-ui

.PHONY: docker-ui-backend
docker-ui-backend: ## Build UI Backend container image
$(info Building ui-backend docker image ...)
docker build --file ./Dockerfile.uibackend --build-arg VERSION=$(VERSION) \
--build-arg BUILD_TIMESTAMP=$(BUILD_TIMESTAMP) \
--build-arg COMMIT_HASH=$(COMMIT_HASH) \
-t $(VMCLARITY_UIBACKEND_IMAGE) .
docker buildx bake $(BAKE_OPTS) vmclarity-ui-backend

.PHONY: docker-cr-discovery-server
docker-cr-discovery-server: ## Build K8S Image Resolver Docker image
$(info Building cr-discovery-server docker image ...)
docker build --file ./Dockerfile.cr-discovery-server --build-arg VERSION=$(VERSION) \
--build-arg BUILD_TIMESTAMP=$(BUILD_TIMESTAMP) \
--build-arg COMMIT_HASH=$(COMMIT_HASH) \
-t $(VMCLARITY_CR_DISCOVERY_SERVER_IMAGE) .
docker buildx bake $(BAKE_OPTS) vmclarity-cr-discovery-server

.PHONY: push-docker
push-docker: push-docker-apiserver push-docker-cli push-docker-orchestrator push-docker-ui push-docker-ui-backend push-docker-cr-discovery-server ## Build and Push All Docker images
push-docker: BAKE_OPTS += --set *.output=type=registry
push-docker: ## Build and Push All Docker images
$(info Publishing all docker images ...)
docker buildx bake $(BAKE_OPTS)

.PHONY: push-docker-apiserver
push-docker-apiserver: docker-apiserver ## Build and push API Server container image
push-docker-apiserver: BAKE_OPTS += --set *.output=type=registry
push-docker-apiserver: ## Build and push API Server container image
$(info Publishing apiserver docker image ...)
docker push $(DOCKER_IMAGE)-apiserver:$(DOCKER_TAG)
docker buildx bake $(BAKE_OPTS) vmclarity-apiserver

.PHONY: push-docker-cli
push-docker-cli: docker-cli ## Build and push CLI Docker image
push-docker-cli: BAKE_OPTS += --set *.output=type=registry
push-docker-cli: ## Build and push CLI Docker image
$(info Publishing cli docker image ...)
docker push $(DOCKER_IMAGE)-cli:$(DOCKER_TAG)
docker buildx bake $(BAKE_OPTS) vmclarity-cli

.PHONY: push-docker-orchestrator
push-docker-orchestrator: docker-orchestrator ## Build and push Orchestrator container image
push-docker-orchestrator: BAKE_OPTS += --set *.output=type=registry
push-docker-orchestrator: ## Build and push Orchestrator container image
$(info Publishing orchestrator docker image ...)
docker push $(DOCKER_IMAGE)-orchestrator:$(DOCKER_TAG)
docker buildx bake $(BAKE_OPTS) vmclarity-orchestrator

.PHONY: push-docker-ui
push-docker-ui: docker-ui ## Build and Push UI container image
push-docker-ui: BAKE_OPTS += --set *.output=type=registry
push-docker-ui: ## Build and Push UI container image
$(info Publishing ui docker image ...)
docker push $(DOCKER_IMAGE)-ui:$(DOCKER_TAG)
docker buildx bake $(BAKE_OPTS) vmclarity-ui

.PHONY: push-docker-ui-backend
push-docker-ui-backend: docker-ui-backend ## Build and push UI Backend container image
push-docker-ui-backend: BAKE_OPTS += --set *.output=type=registry
push-docker-ui-backend: ## Build and push UI Backend container image
$(info Publishing ui-backend docker image ...)
docker push $(DOCKER_IMAGE)-ui-backend:$(DOCKER_TAG)
docker buildx bake $(BAKE_OPTS) vmclarity-ui-backend

.PHONY: push-docker-cr-discovery-server
push-docker-cr-discovery-server: docker-cr-discovery-server ## Build and Push K8S Image Resolver Docker image
push-docker-cr-discovery-server: BAKE_OPTS += --set *.output=type=registry
push-docker-cr-discovery-server: ## Build and Push K8S Image Resolver Docker image
@echo "Publishing cr-discovery-server docker image ..."
docker push $(DOCKER_IMAGE)-cr-discovery-server:$(DOCKER_TAG)
docker buildx bake $(BAKE_OPTS) vmclarity-cr-discovery-server

##@ Code generation

Expand Down
113 changes: 113 additions & 0 deletions docker-bake.hcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Documentation available at: https://docs.docker.com/build/bake/

# Docker build args
variable "DOCKER_REGISTRY" {default = "ghcr.io/openclarity"}
variable "DOCKER_TAG" {default = "latest"}
variable "SUFFIX" {default = ""}

# Golang build args
variable "VERSION" {default = null}
variable "BUILD_TIMESTAMP" {default = null}
variable "COMMIT_HASH" {default = null}
variable "VMCLARITY_TOOLS_BASE" {default = null}

function "get_tag" {
params = [name]
result = ["${DOCKER_REGISTRY}/${name}${SUFFIX}:${DOCKER_TAG}"]
}

group "default" {
targets = [
"vmclarity-apiserver",
"vmclarity-cli",
"vmclarity-cr-discovery-server",
"vmclarity-orchestrator",
"vmclarity-ui",
"vmclarity-ui-backend"
]
}

target "_common" {
labels = {
"org.opencontainers.image.url" = "https://github.com/openclarity/vmclarity"
"org.opencontainers.image.licenses" = "Apache-2.0"
}
output = ["type=image"]
}

target "_common_args_for_go" {
args = {
VERSION = "${VERSION}"
BUILD_TIMESTAMP = "${BUILD_TIMESTAMP}"
COMMIT_HASH = "${COMMIT_HASH}"
}
}

target "vmclarity-apiserver" {
context = "."
dockerfile = "Dockerfile.apiserver"
tags = get_tag("${target.vmclarity-apiserver.name}")
inherits = ["_common", "_common_args_for_go"]
labels = {
"org.opencontainers.image.title" = "VMClarity API Server"
"org.opencontainers.image.description" = "The VMClarity API for managing all objects in the VMClarity system."
}
}

target "vmclarity-cli" {
context = "."
dockerfile = "Dockerfile.cli"
tags = get_tag("${target.vmclarity-cli.name}")
inherits = ["_common", "_common_args_for_go"]
args = {
VMCLARITY_TOOLS_BASE = "${VMCLARITY_TOOLS_BASE}"
}
labels = {
"org.opencontainers.image.title" = "VMClarity CLI"
"org.opencontainers.image.description" = "The VMClarity CLI for managing all objects in the VMClarity system."
}
}

target "vmclarity-cr-discovery-server" {
context = "."
dockerfile = "Dockerfile.cr-discovery-server"
tags = get_tag("${target.vmclarity-cr-discovery-server.name}")
inherits = ["_common", "_common_args_for_go"]
labels = {
"org.opencontainers.image.title" = "Container Runtime Discovery Server"
"org.opencontainers.image.description" = "Container Runtime Discovery Server for VMClarity."
}
}

target "vmclarity-orchestrator" {
context = "."
dockerfile = "Dockerfile.orchestrator"
tags = get_tag("${target.vmclarity-orchestrator.name}")
inherits = ["_common", "_common_args_for_go"]
labels = {
"org.opencontainers.image.title" = "VMClarity Orchestrator"
"org.opencontainers.image.description" = "Orchestrates and manages the life cycle of VMClarity scan configs, scans and asset scans."
}
}

target "vmclarity-ui" {
context = "."
dockerfile = "Dockerfile.ui"
tags = get_tag("${target.vmclarity-ui.name}")
inherits = ["_common"]
labels = {
"org.opencontainers.image.title" = "VMClarity UI"
"org.opencontainers.image.description" = "A server serving the UI static files."
}
}

target "vmclarity-ui-backend" {
context = "."
dockerfile = "Dockerfile.uibackend"
tags = get_tag("${target.vmclarity-ui-backend.name}")
inherits = ["_common", "_common_args_for_go"]
labels = {
"org.opencontainers.image.title" = "VMClarity UI Backend"
"org.opencontainers.image.description" = "A separate backend API which offloads some processing from the browser to the infrastructure to process and filter data closer to the source."
}
}
Loading