Skip to content

Commit aa2577f

Browse files
authored
ci: build ipv6-hp-bpf in pipeline (#2769)
* build ipv6-hp-bpf img in pipeline * test binary build * use sudo * build separate binaries * test archives * combine dockerfiles and build cmds * setup binary builds * fix makefile * parameterize arch for dockerfile cp and library installation
1 parent de225e4 commit aa2577f

File tree

7 files changed

+531
-20
lines changed

7 files changed

+531
-20
lines changed

.pipelines/pipeline.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ stages:
155155
name: "$(BUILD_POOL_NAME_DEFAULT)"
156156
steps:
157157
- script: |
158+
make ipv6-hp-bpf-lib
158159
make all-binaries-platforms
159160
name: "BuildAllPlatformBinaries"
160161
displayName: "Build all platform binaries"
@@ -249,6 +250,10 @@ stages:
249250
name: cns
250251
os: windows
251252
os_version: ltsc2022
253+
ipv6_hp_bpf_linux_amd64:
254+
arch: amd64
255+
name: ipv6-hp-bpf
256+
os: linux
252257
npm_linux_amd64:
253258
arch: amd64
254259
name: npm
@@ -289,6 +294,10 @@ stages:
289294
arch: arm64
290295
name: cns
291296
os: linux
297+
ipv6_hp_bpf_linux_arm64:
298+
arch: arm64
299+
name: ipv6-hp-bpf
300+
os: linux
292301
npm_linux_arm64:
293302
arch: arm64
294303
name: npm
@@ -362,6 +371,9 @@ stages:
362371
name: cns
363372
os_versions: ltsc2019 ltsc2022
364373
platforms: linux/amd64 linux/arm64 windows/amd64
374+
ipv6_hp_bpf:
375+
name: ipv6-hp-bpf
376+
platforms: linux/amd64 linux/arm64
365377
npm:
366378
name: npm
367379
os_versions: ltsc2022

.pipelines/singletenancy/cilium-dualstack-overlay/cilium-dualstackoverlay-e2e-step-template.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@ steps:
4242
kubectl apply -f test/integration/manifests/cilium/v${DIR}/cilium-operator/files
4343
4444
export CILIUM_VERSION_TAG=${CILIUM_DUALSTACK_VERSION}
45+
export IPV6_HP_BPF_VERSION=$(make ipv6-hp-bpf-version)
4546
echo "install Cilium ${CILIUM_DUALSTACK_VERSION} onto Overlay Cluster"
46-
envsubst '${CILIUM_VERSION_TAG},${CILIUM_IMAGE_REGISTRY}' < test/integration/manifests/cilium/v${DIR}/cilium-agent/templates/daemonset.yaml | kubectl apply -f -
47+
envsubst '${CILIUM_VERSION_TAG},${CILIUM_IMAGE_REGISTRY},${IPV6_HP_BPF_VERSION}' < test/integration/manifests/cilium/v${DIR}/cilium-agent/templates/daemonset-dualstack.yaml | kubectl apply -f -
4748
envsubst '${CILIUM_VERSION_TAG},${CILIUM_IMAGE_REGISTRY}' < test/integration/manifests/cilium/v${DIR}/cilium-operator/templates/deployment.yaml | kubectl apply -f -
4849
kubectl get po -owide -A
4950
name: "installCilium"

Makefile

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ CNM_ARCHIVE_NAME = azure-vnet-cnm-$(GOOS)-$(GOARCH)-$(ACN_VERSION).$(ARCHIVE_EXT
106106
CNS_ARCHIVE_NAME = azure-cns-$(GOOS)-$(GOARCH)-$(CNS_VERSION).$(ARCHIVE_EXT)
107107
NPM_ARCHIVE_NAME = azure-npm-$(GOOS)-$(GOARCH)-$(NPM_VERSION).$(ARCHIVE_EXT)
108108
AZURE_IPAM_ARCHIVE_NAME = azure-ipam-$(GOOS)-$(GOARCH)-$(AZURE_IPAM_VERSION).$(ARCHIVE_EXT)
109+
IPV6_HP_BPF_ARCHIVE_NAME = ipv6-hp-bpf-$(GOOS)-$(GOARCH)-$(IPV6_HP_BPF_VERSION).$(ARCHIVE_EXT)
109110

110111
# Image info file names.
111112
CNI_IMAGE_INFO_FILE = azure-cni-$(CNI_VERSION).txt
@@ -127,8 +128,8 @@ all-binaries-platforms: ## Make all platform binaries
127128

128129
# OS specific binaries/images
129130
ifeq ($(GOOS),linux)
130-
all-binaries: acncli azure-cni-plugin azure-cns azure-npm azure-ipam
131-
all-images: npm-image cns-image cni-manager-image
131+
all-binaries: acncli azure-cni-plugin azure-cns azure-npm azure-ipam ipv6-hp-bpf
132+
all-images: npm-image cns-image cni-manager-image ipv6-hp-bpf-image
132133
else
133134
all-binaries: azure-cni-plugin azure-cns azure-npm
134135
all-images:
@@ -185,7 +186,17 @@ azure-ipam-binary:
185186
# Build the ipv6-hp-bpf binary.
186187
ipv6-hp-bpf-binary:
187188
cd $(IPV6_HP_BPF_DIR) && CGO_ENABLED=0 go generate ./...
188-
cd $(IPV6_HP_BPF_DIR)/cmd/ipv6-hp-bpf && CGO_ENABLED=0 go build -v -o $(IPV6_HP_BPF_BUILD_DIR)$(EXE_EXT) -ldflags "-X main.version=$(IPV6_HP_BPF_VERSION)" -gcflags="-dwarflocationlists=true"
189+
cd $(IPV6_HP_BPF_DIR)/cmd/ipv6-hp-bpf && CGO_ENABLED=0 go build -v -o $(IPV6_HP_BPF_BUILD_DIR)/ipv6-hp-bpf$(EXE_EXT) -ldflags "-X main.version=$(IPV6_HP_BPF_VERSION)" -gcflags="-dwarflocationlists=true"
190+
191+
# Libraries for ipv6-hp-bpf
192+
ipv6-hp-bpf-lib:
193+
ifeq ($(GOARCH),amd64)
194+
sudo apt-get update && sudo apt-get install -y llvm clang linux-libc-dev linux-headers-generic libbpf-dev libc6-dev nftables iproute2 gcc-multilib
195+
for dir in /usr/include/x86_64-linux-gnu/*; do sudo ln -sfn "$$dir" /usr/include/$$(basename "$$dir"); done
196+
else ifeq ($(GOARCH),arm64)
197+
sudo apt-get update && sudo apt-get install -y llvm clang linux-libc-dev linux-headers-generic libbpf-dev libc6-dev nftables iproute2 gcc-aarch64-linux-gnu
198+
for dir in /usr/include/aarch64-linux-gnu/*; do sudo ln -sfn "$$dir" /usr/include/$$(basename "$$dir"); done
199+
endif
189200

190201
# Build the Azure CNM binary.
191202
cnm-binary:
@@ -623,6 +634,23 @@ azure-ipam-skopeo-archive: ## export tar archive of azure-ipam multiplat contain
623634
IMAGE=$(AZURE_IPAM_IMAGE) \
624635
TAG=$(AZURE_IPAM_VERSION)
625636

637+
ipv6-hp-bpf-manifest-build: ## build ipv6-hp-bpf multiplat container manifest.
638+
$(MAKE) manifest-build \
639+
PLATFORMS="$(PLATFORMS)" \
640+
IMAGE=$(IPV6_HP_BPF_IMAGE) \
641+
TAG=$(IPV6_HP_BPF_VERSION) \
642+
OS_VERSIONS="$(OS_VERSIONS)"
643+
644+
ipv6-hp-bpf-manifest-push: ## push ipv6-hp-bpf multiplat container manifest
645+
$(MAKE) manifest-push \
646+
IMAGE=$(IPV6_HP_BPF_IMAGE) \
647+
TAG=$(IPV6_HP_BPF_VERSION)
648+
649+
ipv6-hp-bpf-skopeo-archive: ## export tar archive of ipv6-hp-bpf multiplat container manifest.
650+
$(MAKE) manifest-skopeo-archive \
651+
IMAGE=$(IPV6_HP_BPF_IMAGE) \
652+
TAG=$(IPV6_HP_BPF_VERSION)
653+
626654
cni-manifest-build: ## build cni multiplat container manifest.
627655
$(MAKE) manifest-build \
628656
PLATFORMS="$(PLATFORMS)" \
File renamed without changes.

bpf-prog/ipv6-hp-bpf/linux.Dockerfile

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,44 @@ FROM mcr.microsoft.com/oss/go/microsoft/golang:1.21 AS builder
22
ARG VERSION
33
ARG DEBUG
44
ARG OS
5+
ARG ARCH
56
WORKDIR /bpf-prog/ipv6-hp-bpf
67
COPY ./bpf-prog/ipv6-hp-bpf .
78
COPY ./bpf-prog/ipv6-hp-bpf/cmd/ipv6-hp-bpf/*.go /bpf-prog/ipv6-hp-bpf/
89
COPY ./bpf-prog/ipv6-hp-bpf/include/helper.h /bpf-prog/ipv6-hp-bpf/include/helper.h
9-
RUN apt-get update && apt-get install -y llvm clang linux-libc-dev linux-headers-generic libbpf-dev libc6-dev gcc-multilib nftables iproute2
10-
RUN for dir in /usr/include/x86_64-linux-gnu/*; do ln -s "$dir" /usr/include/$(basename "$dir"); done
10+
RUN apt-get update && apt-get install -y llvm clang linux-libc-dev linux-headers-generic libbpf-dev libc6-dev nftables iproute2
11+
RUN mkdir -p /tmp/lib
12+
RUN if [ "$ARCH" = "arm64" ]; then \
13+
apt-get install -y gcc-aarch64-linux-gnu && \
14+
ARCH=aarch64-linux-gnu && \
15+
cp /lib/"$ARCH"/ld-linux-aarch64.so.1 /tmp/lib/ && \
16+
for dir in /usr/include/"$ARCH"/*; do ln -s "$dir" /usr/include/$(basename "$dir"); done; \
17+
elif [ "$ARCH" = "amd64" ]; then \
18+
apt-get install -y gcc-multilib && \
19+
ARCH=x86_64-linux-gnu && \
20+
cp /lib/"$ARCH"/ld-linux-x86-64.so.2 /tmp/lib/ && \
21+
for dir in /usr/include/"$ARCH"/*; do ln -s "$dir" /usr/include/$(basename "$dir"); done; \
22+
fi && \
23+
ln -sfn /usr/include/"$ARCH"/asm /usr/include/asm && \
24+
cp /lib/"$ARCH"/libnftables.so.1 /tmp/lib/ && \
25+
cp /lib/"$ARCH"/libedit.so.2 /tmp/lib/ && \
26+
cp /lib/"$ARCH"/libc.so.6 /tmp/lib/ && \
27+
cp /lib/"$ARCH"/libmnl.so.0 /tmp/lib/ && \
28+
cp /lib/"$ARCH"/libnftnl.so.11 /tmp/lib/ && \
29+
cp /lib/"$ARCH"/libxtables.so.12 /tmp/lib/ && \
30+
cp /lib/"$ARCH"/libjansson.so.4 /tmp/lib/ && \
31+
cp /lib/"$ARCH"/libgmp.so.10 /tmp/lib/ && \
32+
cp /lib/"$ARCH"/libtinfo.so.6 /tmp/lib/ && \
33+
cp /lib/"$ARCH"/libbsd.so.0 /tmp/lib/ && \
34+
cp /lib/"$ARCH"/libmd.so.0 /tmp/lib/
1135
ENV C_INCLUDE_PATH=/usr/include/bpf
1236
RUN if [ "$DEBUG" = "true" ]; then echo "\n#define DEBUG" >> /bpf-prog/ipv6-hp-bpf/include/helper.h; fi
1337
RUN GOOS=$OS CGO_ENABLED=0 go generate ./...
1438
RUN GOOS=$OS CGO_ENABLED=0 go build -a -o /go/bin/ipv6-hp-bpf -trimpath -ldflags "-X main.version="$VERSION"" -gcflags="-dwarflocationlists=true" .
1539

16-
FROM mcr.microsoft.com/cbl-mariner/distroless/minimal:2.0
40+
FROM mcr.microsoft.com/cbl-mariner/distroless/minimal:2.0 AS final
1741
COPY --from=builder /go/bin/ipv6-hp-bpf /ipv6-hp-bpf
1842
COPY --from=builder /usr/sbin/nft /usr/sbin/nft
1943
COPY --from=builder /sbin/ip /sbin/ip
20-
COPY --from=builder /lib/x86_64-linux-gnu/libnftables.so.1 /lib/x86_64-linux-gnu/
21-
COPY --from=builder /lib/x86_64-linux-gnu/libedit.so.2 /lib/x86_64-linux-gnu/
22-
COPY --from=builder /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/
23-
COPY --from=builder /lib/x86_64-linux-gnu/libmnl.so.0 /lib/x86_64-linux-gnu/
24-
COPY --from=builder /lib/x86_64-linux-gnu/libnftnl.so.11 /lib/x86_64-linux-gnu/
25-
COPY --from=builder /lib/x86_64-linux-gnu/libxtables.so.12 /lib/x86_64-linux-gnu/
26-
COPY --from=builder /lib/x86_64-linux-gnu/libjansson.so.4 /lib/x86_64-linux-gnu/
27-
COPY --from=builder /lib/x86_64-linux-gnu/libgmp.so.10 /lib/x86_64-linux-gnu/
28-
COPY --from=builder /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/
29-
COPY --from=builder /lib/x86_64-linux-gnu/libbsd.so.0 /lib/x86_64-linux-gnu/
30-
COPY --from=builder /lib64/ld-linux-x86-64.so.2 /lib64/
31-
COPY --from=builder /lib/x86_64-linux-gnu/libmd.so.0 /lib/x86_64-linux-gnu/
32-
CMD ["/ipv6-hp-bpf"]
44+
COPY --from=builder /tmp/lib/* /lib
45+
CMD ["/ipv6-hp-bpf"]

0 commit comments

Comments
 (0)