Skip to content

Commit 7e5994d

Browse files
authored
feat: build cni installer image with cni builds (#2324)
Signed-off-by: Evan Baker <[email protected]>
1 parent 2e1601a commit 7e5994d

File tree

4 files changed

+174
-24
lines changed

4 files changed

+174
-24
lines changed

.pipelines/pipeline.yaml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,20 @@ stages:
159159
name: "$(BUILD_POOL_NAME_LINUX_AMD64)"
160160
strategy:
161161
matrix:
162+
cni_linux_amd64:
163+
arch: amd64
164+
name: cni
165+
os: linux
166+
cni_windows2019_amd64:
167+
arch: amd64
168+
name: cni
169+
os: windows
170+
os_version: ltsc2019
171+
cni_windows2022_amd64:
172+
arch: amd64
173+
name: cni
174+
os: windows
175+
os_version: ltsc2022
162176
cni_dropgz_linux_amd64:
163177
arch: amd64
164178
name: cni-dropgz
@@ -225,6 +239,10 @@ stages:
225239
name: "$(BUILD_POOL_NAME_LINUX_ARM64)"
226240
strategy:
227241
matrix:
242+
cni_linux_arm64:
243+
arch: arm64
244+
name: cni
245+
os: linux
228246
cni_dropgz_linux_arm64:
229247
arch: arm64
230248
name: cni-dropgz
@@ -294,6 +312,10 @@ stages:
294312
name: "$(BUILD_POOL_NAME_DEFAULT)"
295313
strategy:
296314
matrix:
315+
cni:
316+
name: cni
317+
os_versions: ltsc2019 ltsc2022
318+
platforms: linux/amd64 linux/arm64 windows/amd64
297319
cni_dropgz:
298320
name: cni-dropgz
299321
os_versions: ltsc2019 ltsc2022

Makefile

Lines changed: 76 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@ EXE_EXT = .exe
3232
endif
3333

3434
# Interrogate the git repo and set some variables
35-
REPO_ROOT = $(shell git rev-parse --show-toplevel)
36-
REVISION ?= $(shell git rev-parse --short HEAD)
37-
ACN_VERSION ?= $(shell git describe --exclude "azure-ipam*" --exclude "dropgz*" --exclude "zapai*" --tags --always)
38-
AZURE_IPAM_VERSION ?= $(notdir $(shell git describe --match "azure-ipam*" --tags --always))
39-
CNI_VERSION ?= $(ACN_VERSION)
40-
CNI_DROPGZ_VERSION ?= $(notdir $(shell git describe --match "dropgz*" --tags --always))
41-
CNI_DROPGZ_TEST_VERSION ?= $(notdir $(shell git describe --match "dropgz-test*" --tags --always))
42-
CNS_VERSION ?= $(ACN_VERSION)
43-
NPM_VERSION ?= $(ACN_VERSION)
44-
ZAPAI_VERSION ?= $(notdir $(shell git describe --match "zapai*" --tags --always))
35+
REPO_ROOT = $(shell git rev-parse --show-toplevel)
36+
REVISION ?= $(shell git rev-parse --short HEAD)
37+
ACN_VERSION ?= $(shell git describe --exclude "azure-ipam*" --exclude "dropgz*" --exclude "zapai*" --tags --always)
38+
AZURE_IPAM_VERSION ?= $(notdir $(shell git describe --match "azure-ipam*" --tags --always))
39+
CNI_VERSION ?= $(ACN_VERSION)
40+
CNI_DROPGZ_VERSION ?= $(notdir $(shell git describe --match "dropgz*" --tags --always))
41+
CNI_DROPGZ_TEST_VERSION ?= $(notdir $(shell git describe --match "dropgz-test*" --tags --always))
42+
CNS_VERSION ?= $(ACN_VERSION)
43+
NPM_VERSION ?= $(ACN_VERSION)
44+
ZAPAI_VERSION ?= $(notdir $(shell git describe --match "zapai*" --tags --always))
4545

4646
# Build directories.
4747
AZURE_IPAM_DIR = $(REPO_ROOT)/azure-ipam
@@ -102,9 +102,10 @@ NPM_ARCHIVE_NAME = azure-npm-$(GOOS)-$(GOARCH)-$(NPM_VERSION).$(ARCHIVE_EXT)
102102
AZURE_IPAM_ARCHIVE_NAME = azure-ipam-$(GOOS)-$(GOARCH)-$(AZURE_IPAM_VERSION).$(ARCHIVE_EXT)
103103

104104
# Image info file names.
105-
CNI_DROPGZ_IMAGE_INFO_FILE = cni-dropgz-$(CNI_DROPGZ_VERSION).txt
106-
CNS_IMAGE_INFO_FILE = azure-cns-$(CNS_VERSION).txt
107-
NPM_IMAGE_INFO_FILE = azure-npm-$(NPM_VERSION).txt
105+
CNI_IMAGE_INFO_FILE = azure-cni-$(CNI_VERSION).txt
106+
CNI_DROPGZ_IMAGE_INFO_FILE = cni-dropgz-$(CNI_DROPGZ_VERSION).txt
107+
CNS_IMAGE_INFO_FILE = azure-cns-$(CNS_VERSION).txt
108+
NPM_IMAGE_INFO_FILE = azure-npm-$(NPM_VERSION).txt
108109

109110
# Docker libnetwork (CNM) plugin v2 image parameters.
110111
CNM_PLUGIN_IMAGE ?= microsoft/azure-vnet-plugin
@@ -246,19 +247,22 @@ CONTAINER_TRANSPORT = docker
246247
endif
247248

248249
## Image name definitions.
249-
ACNCLI_IMAGE = acncli
250-
CNI_DROPGZ_IMAGE = cni-dropgz
251-
CNI_DROPGZ_TEST_IMAGE = cni-dropgz-test
252-
CNS_IMAGE = azure-cns
253-
NPM_IMAGE = azure-npm
250+
ACNCLI_IMAGE = acncli
251+
CNI_IMAGE = azure-cni
252+
CNI_DROPGZ_IMAGE = cni-dropgz
253+
CNI_DROPGZ_TEST_IMAGE = cni-dropgz-test
254+
CNS_IMAGE = azure-cns
255+
NPM_IMAGE = azure-npm
254256

255257
## Image platform tags.
256-
ACNCLI_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(ACN_VERSION)
257-
CNI_DROPGZ_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(CNI_DROPGZ_VERSION)
258-
CNI_DROPGZ_TEST_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(CNI_DROPGZ_TEST_VERSION)
259-
CNS_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(CNS_VERSION)
260-
CNS_WINDOWS_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(CNS_VERSION)-$(OS_SKU_WIN)
261-
NPM_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(NPM_VERSION)
258+
ACNCLI_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(ACN_VERSION)
259+
CNI_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(CNI_VERSION)
260+
CNI_WINDOWS_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(CNI_VERSION)-$(OS_SKU_WIN)
261+
CNI_DROPGZ_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(CNI_DROPGZ_VERSION)
262+
CNI_DROPGZ_TEST_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(CNI_DROPGZ_TEST_VERSION)
263+
CNS_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(CNS_VERSION)
264+
CNS_WINDOWS_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(CNS_VERSION)-$(OS_SKU_WIN)
265+
NPM_PLATFORM_TAG ?= $(subst /,-,$(PLATFORM))$(if $(OS_VERSION),-$(OS_VERSION),)-$(NPM_VERSION)
262266

263267

264268
qemu-user-static: ## Set up the host to run qemu multiplatform container builds.
@@ -330,6 +334,37 @@ acncli-image-pull: ## pull cni-manager container image.
330334
IMAGE=$(ACNCLI_IMAGE) \
331335
TAG=$(ACNCLI_PLATFORM_TAG)
332336

337+
338+
# cni
339+
340+
cni-image-name: # util target to print the CNI image name.
341+
@echo $(CNI_IMAGE)
342+
343+
cni-image-name-and-tag: # util target to print the CNI image name and tag.
344+
@echo $(IMAGE_REGISTRY)/$(CNI_IMAGE):$(CNI_PLATFORM_TAG)
345+
346+
cni-image: ## build cni container image.
347+
$(MAKE) container \
348+
DOCKERFILE=cni/$(OS).Dockerfile \
349+
IMAGE=$(CNI_IMAGE) \
350+
EXTRA_BUILD_ARGS='--build-arg OS=$(OS) --build-arg ARCH=$(ARCH) --build-arg OS_VERSION=$(OS_VERSION)' \
351+
PLATFORM=$(PLATFORM) \
352+
TAG=$(CNI_PLATFORM_TAG) \
353+
OS=$(OS) \
354+
ARCH=$(ARCH) \
355+
OS_VERSION=$(OS_VERSION)
356+
357+
cni-image-push: ## push cni container image.
358+
$(MAKE) container-push \
359+
IMAGE=$(CNI_IMAGE) \
360+
TAG=$(CNI_PLATFORM_TAG)
361+
362+
cni-image-pull: ## pull cni container image.
363+
$(MAKE) container-pull \
364+
IMAGE=$(CNI_IMAGE) \
365+
TAG=$(CNI_PLATFORM_TAG)
366+
367+
333368
# cni-dropgz
334369

335370
cni-dropgz-image-name: # util target to print the CNI dropgz image name.
@@ -519,6 +554,23 @@ acncli-skopeo-archive: ## export tar archive of acncli multiplat container manif
519554
IMAGE=$(ACNCLI_IMAGE) \
520555
TAG=$(ACN_VERSION)
521556

557+
cni-manifest-build: ## build cni multiplat container manifest.
558+
$(MAKE) manifest-build \
559+
PLATFORMS="$(PLATFORMS)" \
560+
IMAGE=$(CNI_IMAGE) \
561+
TAG=$(CNI_VERSION) \
562+
OS_VERSIONS="$(OS_VERSIONS)"
563+
564+
cni-manifest-push: ## push cni multiplat container manifest
565+
$(MAKE) manifest-push \
566+
IMAGE=$(CNI_IMAGE) \
567+
TAG=$(CNI_VERSION)
568+
569+
cni-skopeo-archive: ## export tar archive of cni multiplat container manifest.
570+
$(MAKE) manifest-skopeo-archive \
571+
IMAGE=$(CNI_IMAGE) \
572+
TAG=$(CNI_VERSION)
573+
522574
cni-dropgz-manifest-build: ## build cni-dropgz multiplat container manifest.
523575
$(MAKE) manifest-build \
524576
PLATFORMS="$(PLATFORMS)" \

cni/linux.Dockerfile

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
ARG ARCH
2+
ARG DROPGZ_VERSION=v0.0.12
3+
ARG OS_VERSION
4+
ARG OS
5+
6+
FROM mcr.microsoft.com/oss/go/microsoft/golang:1.21 AS azure-vnet
7+
ARG OS
8+
ARG VERSION
9+
WORKDIR /azure-container-networking
10+
COPY . .
11+
RUN GOOS=$OS CGO_ENABLED=0 go build -a -o /go/bin/azure-vnet -trimpath -ldflags "-X main.version="$VERSION"" -gcflags="-dwarflocationlists=true" cni/network/plugin/main.go
12+
RUN GOOS=$OS CGO_ENABLED=0 go build -a -o /go/bin/azure-vnet-telemetry -trimpath -ldflags "-X main.version="$VERSION"" -gcflags="-dwarflocationlists=true" cni/telemetry/service/telemetrymain.go
13+
RUN GOOS=$OS CGO_ENABLED=0 go build -a -o /go/bin/azure-vnet-ipam -trimpath -ldflags "-X main.version="$VERSION"" -gcflags="-dwarflocationlists=true" cni/ipam/plugin/main.go
14+
15+
FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 AS compressor
16+
ARG OS
17+
WORKDIR /payload
18+
COPY --from=azure-vnet /go/bin/* /payload
19+
COPY --from=azure-vnet /azure-container-networking/cni/azure-$OS.conflist /payload/azure.conflist
20+
COPY --from=azure-vnet /azure-container-networking/cni/azure-$OS-swift.conflist /payload/azure-swift.conflist
21+
COPY --from=azure-vnet /azure-container-networking/cni/azure-$OS-swift-overlay.conflist /payload/azure-swift-overlay.conflist
22+
COPY --from=azure-vnet /azure-container-networking/cni/azure-$OS-swift-overlay-dualstack.conflist /payload/azure-swift-overlay-dualstack.conflist
23+
COPY --from=azure-vnet /azure-container-networking/telemetry/azure-vnet-telemetry.config /payload/azure-vnet-telemetry.config
24+
RUN cd /payload && sha256sum * > sum.txt
25+
RUN gzip --verbose --best --recursive /payload && for f in /payload/*.gz; do mv -- "$f" "${f%%.gz}"; done
26+
27+
FROM mcr.microsoft.com/oss/go/microsoft/golang:1.21 AS dropgz
28+
ARG DROPGZ_VERSION
29+
ARG OS
30+
ARG VERSION
31+
RUN go mod download github.com/azure/azure-container-networking/dropgz@$DROPGZ_VERSION
32+
WORKDIR /go/pkg/mod/github.com/azure/azure-container-networking/dropgz\@$DROPGZ_VERSION
33+
COPY --from=compressor /payload/* /pkg/embed/fs/
34+
RUN GOOS=$OS CGO_ENABLED=0 go build -a -o /go/bin/dropgz -trimpath -ldflags "-X github.com/Azure/azure-container-networking/dropgz/internal/buildinfo.Version="$VERSION"" -gcflags="-dwarflocationlists=true" main.go
35+
36+
FROM scratch
37+
COPY --from=dropgz /go/bin/dropgz dropgz
38+
ENTRYPOINT [ "dropgz" ]

cni/windows.Dockerfile

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
ARG ARCH
2+
ARG DROPGZ_VERSION=v0.0.12
3+
ARG OS
4+
ARG OS_VERSION
5+
6+
FROM --platform=linux/${ARCH} mcr.microsoft.com/oss/go/microsoft/golang:1.21 AS azure-vnet
7+
ARG OS
8+
ARG VERSION
9+
WORKDIR /azure-container-networking
10+
COPY . .
11+
RUN GOOS=$OS CGO_ENABLED=0 go build -a -o /go/bin/azure-vnet -trimpath -ldflags "-X main.version="$VERSION"" -gcflags="-dwarflocationlists=true" cni/network/plugin/main.go
12+
RUN GOOS=$OS CGO_ENABLED=0 go build -a -o /go/bin/azure-vnet-telemetry -trimpath -ldflags "-X main.version="$VERSION"" -gcflags="-dwarflocationlists=true" cni/telemetry/service/telemetrymain.go
13+
RUN GOOS=$OS CGO_ENABLED=0 go build -a -o /go/bin/azure-vnet-ipam -trimpath -ldflags "-X main.version="$VERSION"" -gcflags="-dwarflocationlists=true" cni/ipam/plugin/main.go
14+
15+
FROM --platform=linux/${ARCH} mcr.microsoft.com/cbl-mariner/base/core:2.0 AS compressor
16+
ARG OS
17+
WORKDIR /payload
18+
COPY --from=azure-vnet /go/bin/* /payload/
19+
COPY --from=azure-vnet /azure-container-networking/cni/azure-$OS.conflist /payload/azure.conflist
20+
COPY --from=azure-vnet /azure-container-networking/cni/azure-$OS-swift.conflist /payload/azure-swift.conflist
21+
COPY --from=azure-vnet /azure-container-networking/cni/azure-$OS-swift-overlay.conflist /payload/azure-swift-overlay.conflist
22+
COPY --from=azure-vnet /azure-container-networking/cni/azure-$OS-swift-overlay-dualstack.conflist /payload/azure-swift-overlay-dualstack.conflist
23+
COPY --from=azure-vnet /azure-container-networking/telemetry/azure-vnet-telemetry.config /payload/azure-vnet-telemetry.config
24+
RUN cd /payload && sha256sum * > sum.txt
25+
RUN gzip --verbose --best --recursive /payload && for f in /payload/*.gz; do mv -- "$f" "${f%%.gz}"; done
26+
27+
FROM --platform=linux/${ARCH} mcr.microsoft.com/oss/go/microsoft/golang:1.21 AS dropgz
28+
ARG DROPGZ_VERSION
29+
ARG OS
30+
ARG VERSION
31+
RUN go mod download github.com/azure/azure-container-networking/dropgz@$DROPGZ_VERSION
32+
WORKDIR /go/pkg/mod/github.com/azure/azure-container-networking/dropgz\@$DROPGZ_VERSION
33+
COPY --from=compressor /payload/* /pkg/embed/fs/
34+
RUN GOOS=$OS CGO_ENABLED=0 go build -a -o /go/bin/dropgz -trimpath -ldflags "-X github.com/Azure/azure-container-networking/dropgz/internal/buildinfo.Version="$VERSION"" -gcflags="-dwarflocationlists=true" main.go
35+
36+
FROM mcr.microsoft.com/windows/nanoserver:${OS_VERSION}
37+
COPY --from=dropgz /go/bin/dropgz dropgz
38+
ENTRYPOINT [ "dropgz" ]

0 commit comments

Comments
 (0)