diff --git a/.pipelines/build/binaries.jobs.yaml b/.pipelines/build/binaries.jobs.yaml index 78baa7b981..1311f243d3 100644 --- a/.pipelines/build/binaries.jobs.yaml +++ b/.pipelines/build/binaries.jobs.yaml @@ -43,3 +43,37 @@ jobs: target: $(name) os: $(OS) arch: $(ARCH) + + + - ${{ elseif and(eq(job_data.templateContext.action, 'sign'), job_data.templateContext.isOfficial) }}: + - job: sign_${{ job_data.job }} + displayName: "Sign Binary - ${{ job_data.displayName }} -" + strategy: ${{ job_data.strategy }} + pool: + ${{ if eq(job_data.job, 'windows_amd64') }}: + type: windows + ${{ else }}: + type: linux + variables: + ob_outputDirectory: $(Build.SourcesDirectory) + ob_artifactSuffix: _$(artifact) + ob_git_checkout: false + steps: + - task: DownloadPipelineArtifact@2 + inputs: + targetPath: $(Build.SourcesDirectory) + artifact: '${{ job_data.templateContext.repositoryArtifact }}' + + - task: ExtractFiles@1 + inputs: + archiveFilePatterns: '**/*.?(tgz|tgz.gz|zip)' + destinationFolder: $(Build.SourcesDirectory) + cleanDestinationFolder: false + overwriteExistingFiles: true + + - task: onebranch.pipeline.signing@1 + inputs: + command: 'sign' + signing_profile: 'external_distribution' + files_to_sign: '**/*' + search_root: $(Build.SourcesDirectory) diff --git a/.pipelines/build/dockerfiles/azure-ipam.Dockerfile b/.pipelines/build/dockerfiles/azure-ipam.Dockerfile new file mode 100644 index 0000000000..dd4d32a4f2 --- /dev/null +++ b/.pipelines/build/dockerfiles/azure-ipam.Dockerfile @@ -0,0 +1,16 @@ +ARG ARCH + + +# skopeo inspect docker://mcr.microsoft.com/oss/kubernetes/windows-host-process-containers-base-image:v1.0.0 --format "{{.Name}}@{{.Digest}}" +FROM --platform=windows/${ARCH} mcr.microsoft.com/oss/kubernetes/windows-host-process-containers-base-image@sha256:b4c9637e032f667c52d1eccfa31ad8c63f1b035e8639f3f48a510536bf34032b as windows +ARG ARTIFACT_DIR . + +COPY ${ARTIFACT_DIR}/bin/dropgz.exe /dropgz.exe +ENTRYPOINT [ "/dropgz.exe" ] + + +FROM scratch AS linux +ARG ARTIFACT_DIR . + +COPY ${ARTIFACT_DIR}/bin/dropgz /dropgz +ENTRYPOINT [ "/dropgz" ] diff --git a/.pipelines/build/dockerfiles/cni.Dockerfile b/.pipelines/build/dockerfiles/cni.Dockerfile new file mode 100644 index 0000000000..dd4d32a4f2 --- /dev/null +++ b/.pipelines/build/dockerfiles/cni.Dockerfile @@ -0,0 +1,16 @@ +ARG ARCH + + +# skopeo inspect docker://mcr.microsoft.com/oss/kubernetes/windows-host-process-containers-base-image:v1.0.0 --format "{{.Name}}@{{.Digest}}" +FROM --platform=windows/${ARCH} mcr.microsoft.com/oss/kubernetes/windows-host-process-containers-base-image@sha256:b4c9637e032f667c52d1eccfa31ad8c63f1b035e8639f3f48a510536bf34032b as windows +ARG ARTIFACT_DIR . + +COPY ${ARTIFACT_DIR}/bin/dropgz.exe /dropgz.exe +ENTRYPOINT [ "/dropgz.exe" ] + + +FROM scratch AS linux +ARG ARTIFACT_DIR . + +COPY ${ARTIFACT_DIR}/bin/dropgz /dropgz +ENTRYPOINT [ "/dropgz" ] diff --git a/.pipelines/build/dockerfiles/cns.Dockerfile b/.pipelines/build/dockerfiles/cns.Dockerfile new file mode 100644 index 0000000000..97e3f36477 --- /dev/null +++ b/.pipelines/build/dockerfiles/cns.Dockerfile @@ -0,0 +1,28 @@ +ARG ARCH + + +# mcr.microsoft.com/oss/kubernetes/windows-host-process-containers-base-image:v1.0.0 +FROM --platform=windows/${ARCH} mcr.microsoft.com/oss/kubernetes/windows-host-process-containers-base-image@sha256:b4c9637e032f667c52d1eccfa31ad8c63f1b035e8639f3f48a510536bf34032b AS windows +ARG ARTIFACT_DIR . + +COPY ${ARTIFACT_DIR}/files/kubeconfigtemplate.yaml kubeconfigtemplate.yaml +COPY ${ARTIFACT_DIR}/scripts/setkubeconfigpath.ps1 setkubeconfigpath.ps1 +COPY ${ARTIFACT_DIR}/bin/azure-cns.exe /azure-cns.exe +ENTRYPOINT ["azure-cns.exe"] +EXPOSE 10090 + + +# mcr.microsoft.com/cbl-mariner/base/core:2.0 +# skopeo inspect docker://mcr.microsoft.com/cbl-mariner/base/core:2.0 --format "{{.Name}}@{{.Digest}}" +FROM --platform=linux/${ARCH} mcr.microsoft.com/cbl-mariner/base/core@sha256:961bfedbbbdc0da51bc664f51d959da292eced1ad46c3bf674aba43b9be8c703 AS build-helper +RUN tdnf install -y iptables + +# mcr.microsoft.com/cbl-mariner/distroless/minimal:2.0 +FROM --platform=linux/${ARCH} mcr.microsoft.com/cbl-mariner/distroless/minimal@sha256:7778a86d86947d5f64c1280a7ee0cf36c6c6d76b5749dd782fbcc14f113961bf AS linux +ARG ARTIFACT_DIR . + +COPY --from=build-helper /usr/sbin/*tables* /usr/sbin/ +COPY --from=build-helper /usr/lib /usr/lib +COPY ${ARTIFACT_DIR}/bin/azure-cns /usr/local/bin/azure-cns +ENTRYPOINT [ "/usr/local/bin/azure-cns" ] +EXPOSE 10090 diff --git a/.pipelines/build/dockerfiles/ipv6-hp-bpf.Dockerfile b/.pipelines/build/dockerfiles/ipv6-hp-bpf.Dockerfile new file mode 100644 index 0000000000..045244f870 --- /dev/null +++ b/.pipelines/build/dockerfiles/ipv6-hp-bpf.Dockerfile @@ -0,0 +1,10 @@ +ARG ARCH + + +FROM --platform=linux/${ARCH} mcr.microsoft.com/azurelinux/distroless/minimal:3.0 AS linux +ARG ARTIFACT_DIR +COPY ${ARTIFACT_DIR}/lib/* /lib +COPY ${ARTIFACT_DIR}/bin/ipv6-hp-bpf /ipv6-hp-bpf +COPY ${ARTIFACT_DIR}/bin/nft /usr/sbin/nft +COPY ${ARTIFACT_DIR}/bin/ip /sbin/ip +CMD ["/ipv6-hp-bpf"] diff --git a/.pipelines/build/dockerfiles/npm.Dockerfile b/.pipelines/build/dockerfiles/npm.Dockerfile new file mode 100644 index 0000000000..381d8862cb --- /dev/null +++ b/.pipelines/build/dockerfiles/npm.Dockerfile @@ -0,0 +1,29 @@ +ARG ARCH + + +# intermediate for win-ltsc2022 +FROM --platform=windows/${ARCH} mcr.microsoft.com/windows/servercore@sha256:45952938708fbde6ec0b5b94de68bcdec3f8c838be018536b1e9e5bd95e6b943 as windows +ARG ARTIFACT_DIR + +COPY ${ARTIFACT_DIR}/files/kubeconfigtemplate.yaml kubeconfigtemplate.yaml +COPY ${ARTIFACT_DIR}/scripts/setkubeconfigpath.ps1 setkubeconfigpath.ps1 +COPY ${ARTIFACT_DIR}/scripts/setkubeconfigpath-capz.ps1 setkubeconfigpath-capz.ps1 +COPY ${ARTIFACT_DIR}/bin/azure-npm.exe npm.exe + +CMD ["npm.exe", "start" "--kubeconfig=.\\kubeconfig"] + + +FROM --platform=linux/${ARCH} mcr.microsoft.com/mirror/docker/library/ubuntu:24.04 as linux +ARG ARTIFACT_DIR + +RUN apt-get update && apt-get install -y iptables ipset ca-certificates && apt-get autoremove -y && apt-get clean +#RUN apt-get update && \ +# apt-get install -y \ +# linux-libc-dev \ +# libc6-dev \ +# libtasn1-6 \ +# gnutls30 iptables ipset ca-certificates +#RUN apt-get autoremove -y && apt-get clean + +COPY ${ARTIFACT_DIR}/bin/azure-npm /usr/bin/azure-npm +ENTRYPOINT ["/usr/bin/azure-npm", "start"] diff --git a/.pipelines/build/generate-manifest.steps.yaml b/.pipelines/build/generate-manifest.steps.yaml index 0d6a10395e..5077e99a73 100644 --- a/.pipelines/build/generate-manifest.steps.yaml +++ b/.pipelines/build/generate-manifest.steps.yaml @@ -10,7 +10,7 @@ steps: MANIFEST_DATA=$(echo "$IMAGE_PLATFORM_DATA" | \ jq -r '.[] | .args = [ (.platform | split("/")[0]), (.platform | split("/")[1]) ] | - .args = [ ("--os " + .args[0] ), ("--arch " + .args[1] ) ] | + .args = [ ("--os " + .args[0] ), ("--arch " + .args[1] ) ] | if .osVersion then .args += ["--os-version " + .osVersion] else . end | { image: .imageReference, annotate: .args }' | \ jq -rcs) diff --git a/.pipelines/build/image.steps.yaml b/.pipelines/build/image.steps.yaml index 989050f70e..28ec223990 100644 --- a/.pipelines/build/image.steps.yaml +++ b/.pipelines/build/image.steps.yaml @@ -15,10 +15,6 @@ parameters: type: string default: "" -- name: dockerfile_path - type: string - default: "" - - name: archive_file type: string default: '$(name)-$(os)-$(platform)-$(Tag)' @@ -50,8 +46,8 @@ parameters: steps: - task: DownloadPipelineArtifact@2 inputs: - targetPath: $(Build.SourcesDirectory)/dst/${{ parameters.source }} - artifact: '${{ parameters.source }}' + targetPath: $(Build.SourcesDirectory)/dst/artifacts + artifact: ${{ parameters.source }} - task: onebranch.pipeline.containercontrol@1 displayName: "Login to ACR" @@ -70,14 +66,13 @@ steps: repositoryName: $(os)-$(arch)/${{ parameters.name }} os: '${{ parameters.os }}' buildkit: 1 - dockerFileRelPath: ${{ parameters.dockerfile_path }}/Dockerfile - dockerFileContextPath: ${{ parameters.source }} + dockerFileRelPath: artifacts/Dockerfile enable_network: true enable_pull: true build_tag: ${{ parameters.build_tag }} enable_acr_push: true - saveImageToPath: images/$(os)-$(arch)/${{ parameters.archive_file }}.tar.gz + enabled_cache: false #compress: true #saveMetadataToPath: images/$(os)-$(arch)/metadata/${{ parameters.archive_file }}-metadata.json #enable_isolated_acr_push: true diff --git a/.pipelines/build/images.jobs.yaml b/.pipelines/build/images.jobs.yaml new file mode 100644 index 0000000000..7589f20e9e --- /dev/null +++ b/.pipelines/build/images.jobs.yaml @@ -0,0 +1,149 @@ +parameters: +- name: images + type: jobList + + +jobs: +- ${{ each job_data in parameters.images }}: + - job: pkg_${{ job_data.job }} + displayName: "Prepare Image Package - ${{ job_data.displayName }} -" + ${{ if job_data.strategy }}: + strategy: ${{ job_data.strategy }} + ${{ if job_data.dependsOn }}: + dependsOn: ${{ job_data.dependsOn }} + pool: + type: linux + ${{ if eq(job_data.job, 'linux_arm64') }}: + hostArchitecture: arm64 + + variables: + ob_artifactSuffix: _$(name) + ob_git_checkout: false + # keep these variables concerned with instrumentation. + GEN_DIR: $(Build.SourcesDirectory)/temp + REPO_ROOT: $(Build.SourcesDirectory)/${{ job_data.templateContext.repositoryArtifact }} + OUT_DIR: $(Build.ArtifactStagingDirectory) + DROPGZ_VERSION: v0.0.12 + DEBUG: $[ coalesce(variables['System.Debug'], 'False') ] + ob_outputDirectory: $(Build.ArtifactStagingDirectory) + ${{ if eq(job_data.job, 'linux_amd64') }}: + DEBIAN_FRONTEND: noninteractive + LinuxContainerImage: 'onebranch.azurecr.io/linux/ubuntu-2404:latest' + #mcr.microsoft.com/mirror/docker/library/ubuntu:24.04' + #LinuxContainerImage: 'mcr.microsoft.com/onebranch/azurelinux/build:3.0' + OS: linux + ARCH: amd64 + ${{ elseif eq(job_data.job, 'windows_amd64') }}: + LinuxContainerImage: 'mcr.microsoft.com/onebranch/azurelinux/build:3.0' + ob_enable_qemu: true + OS: windows + ARCH: amd64 + ${{ elseif eq(job_data.job, 'linux_arm64') }}: + LinuxContainerImage: 'mcr.microsoft.com/onebranch/azurelinux/build:3.0' + OS: linux + ARCH: arm64 + GOARCH: arm64 + steps: + - task: DownloadPipelineArtifact@2 + inputs: + targetPath: $(REPO_ROOT) + artifact: '${{ job_data.templateContext.repositoryArtifact }}' + + - task: GoTool@0 + inputs: + version: '$(GOVERSION)' + + - task: ShellScript@2 + inputs: + scriptPath: $(REPO_ROOT)/${{ job_data.templateContext.buildScript }} + + - script: | + ls -la "$SOURCE" + cp "$SOURCE" "$DEST" + ls -la "$DEST" + env: + SOURCE: $(REPO_ROOT)/${{ job_data.templateContext.obDockerfile }} + DEST: $(OUT_DIR)/Dockerfile + + - task: onebranch.pipeline.signing@1 + inputs: + command: 'sign' + signing_profile: 'external_distribution' + files_to_sign: '**/*' + search_root: $(OUT_DIR) + + + - task: ShellScript@2 + displayName: "Package with DropGZ" + condition: and( + succeeded(), + eq(variables.packageWithDropGZ, 'True')) + inputs: + scriptPath: $(REPO_ROOT)/.pipelines/build/scripts/dropgz.sh + + - ${{ if not(contains(job_data.job, 'linux')) }}: + - task: onebranch.pipeline.signing@1 + condition: and( + succeeded(), + eq(variables.packageWithDropGZ, 'True')) + inputs: + command: 'sign' + signing_profile: 'external_distribution' + files_to_sign: '**/dropgz*' + search_root: $(OUT_DIR) + + # OneBranch artifacts are stored on a Windows machine which obliterates + # Linux file permissions. + # This task is added (along with ob_extract_root_artifact in jobs that + # download the artifact) to protect those file permissions from changing + # during image build time. + # + # See: https://eng.ms/docs/products/onebranch/build/containerbasedworkflow/dockerimagesandacr/preservefilepermissionsfordockerbuild + - script: | + tar cvf "$OUT_DIR"/root_artifact.tar --exclude=root_artifact.tar "$OUT_DIR" + displayName: "Zip to Preserve Linux File Permissions" + + + - job: images_${{ job_data.job }} + displayName: "Build Images - ${{ job_data.displayName }} -" + dependsOn: + - pkg_${{ job_data.job }} + strategy: ${{ job_data.strategy }} + pool: + os: linux + type: docker +# ${{ if eq(job_data.job, 'linux_arm64') }}: +# hostArchitecture: arm64 +# ${{ else }}: +# LinuxHostVersion: 'AzLinux3.0AMD64' + variables: + ob_outputDirectory: $(Build.ArtifactStagingDirectory) + ob_artifactSuffix: _$(name) + ob_git_checkout: false + ob_extract_root_artifact: true + ${{ if eq(job_data.job, 'linux_amd64') }}: + LinuxContainerImage: 'mcr.microsoft.com/onebranch/azurelinux/build:3.0' + ARCH: amd64 + OS: linux + ${{ elseif eq(job_data.job, 'windows_amd64') }}: + LinuxContainerImage: 'mcr.microsoft.com/onebranch/azurelinux/build:3.0' + ob_enable_qemu: true + ARCH: amd64 + OS: windows + ${{ elseif eq(job_data.job, 'linux_arm64') }}: + LinuxContainerImage: 'mcr.microsoft.com/onebranch/azurelinux/build:3.0' + ob_enable_qemu: true + ARCH: arm64 + OS: linux + GOARCH: arm64 + + steps: + - template: image.steps.yaml + parameters: + arch: $(ARCH) + os: $(OS) + name: $(name) + build_tag: $(imageTag) + extra_args: $(extraArgs) --build-arg ARTIFACT_DIR="/__w/1/a" + archive_file: $(archiveName)-$(OS)-$(ARCH)-$(archiveVersion) + source: drop_build_pkg_${{ job_data.job }}_$(name) diff --git a/.pipelines/build/ob-prepare.steps.yaml b/.pipelines/build/ob-prepare.steps.yaml index 4726bd7c08..bfd6f004b5 100644 --- a/.pipelines/build/ob-prepare.steps.yaml +++ b/.pipelines/build/ob-prepare.steps.yaml @@ -8,26 +8,26 @@ steps: target_path: bpf-prog/ipv6-hp-bpf source_dockerfile: linux.Dockerfile -- template: utils/rename-dockerfile-references.steps.yaml - parameters: - topic: "Windows - npm" - replace_references: true - working_directory: $(ACN_DIR) - source_path: npm - target_path: npm-windows - source_dockerfile: windows.Dockerfile +# - template: utils/rename-dockerfile-references.steps.yaml +# parameters: +# topic: "Windows - npm" +# replace_references: true +# working_directory: $(ACN_DIR) +# source_path: npm +# target_path: npm-windows +# source_dockerfile: windows.Dockerfile -- template: utils/rename-dockerfile-references.steps.yaml - parameters: - topic: "Linux - npm" - replace_references: true - working_directory: $(ACN_DIR) - source_path: npm - target_path: npm - source_dockerfile: linux.Dockerfile +# - template: utils/rename-dockerfile-references.steps.yaml +# parameters: +# topic: "Linux - npm" +# replace_references: true +# working_directory: $(ACN_DIR) +# source_path: npm +# target_path: npm +# source_dockerfile: linux.Dockerfile - bash: | - rm -rf .pipelines .hooks .github + rm -rf .hooks .github displayName: "Remove Unnecessary Dirs from Source" workingDirectory: $(Build.SourcesDirectory)/azure-container-networking @@ -41,7 +41,7 @@ steps: STORAGE_ID=$(echo "${BUILD_BUILDNUMBER//./-}") echo "##vso[task.setvariable variable=StorageID;isOutput=true]$STORAGE_ID" echo "StorageID: $STORAGE_ID" - + COMMITID=$(git rev-parse --short HEAD) COMMITID="$COMMITID"-"$(date "+%d%H%M")" echo "##vso[task.setvariable variable=commitID;isOutput=true]$COMMITID" @@ -51,7 +51,7 @@ steps: echo "##vso[task.setvariable variable=Tag;isOutput=true]$TAG" echo "Tag: $TAG" - IMAGEREPOPATH="artifact/dd590928-4e04-48cb-9d3d-ee06c5f0e17f/buddy" + IMAGEREPOPATH="artifact/dd590928-4e04-48cb-9d3d-ee06c5f0e17f/$BUILD_TYPE" echo "##vso[task.setvariable variable=imageRepositoryPath;isOutput=true]$IMAGEREPOPATH" echo "imageRepositoryPath: $IMAGEREPOPATH" diff --git a/.pipelines/build/scripts/azure-ipam.sh b/.pipelines/build/scripts/azure-ipam.sh new file mode 100644 index 0000000000..6bf2dfd96d --- /dev/null +++ b/.pipelines/build/scripts/azure-ipam.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -eux + +[[ $OS =~ windows ]] && FILE_EXT='.exe' || FILE_EXT='' + +export CGO_ENABLED=0 + +mkdir -p "$OUT_DIR"/bin +mkdir -p "$OUT_DIR"/files + +pushd "$REPO_ROOT"/azure-ipam + GOOS="$OS" go build -v -a -trimpath \ + -o "$OUT_DIR"/bin/azure-ipam"$FILE_EXT" \ + -ldflags "-X github.com/Azure/azure-container-networking/azure-ipam/internal/buildinfo.Version="$AZURE_IPAM_VERSION" -X main.version="$AZURE_IPAM_VERSION"" \ + -gcflags="-dwarflocationlists=true" \ + . + + cp *.conflist "$OUT_DIR"/files/ +popd diff --git a/.pipelines/build/scripts/cni.sh b/.pipelines/build/scripts/cni.sh new file mode 100644 index 0000000000..8d9c210e46 --- /dev/null +++ b/.pipelines/build/scripts/cni.sh @@ -0,0 +1,65 @@ +#!/bin/bash +set -eux + +[[ $OS =~ windows ]] && FILE_EXT='.exe' || FILE_EXT='' + +mkdir -p "$OUT_DIR"/files +mkdir -p "$OUT_DIR"/bin + +export CGO_ENABLED=0 + + +CNI_NET_DIR="$REPO_ROOT"/cni/network/plugin +pushd "$CNI_NET_DIR" + GOOS="$OS" go build -v -a -trimpath \ + -o "$OUT_DIR"/bin/azure-vnet"$FILE_EXT" \ + -ldflags "-X main.version="$CNI_VERSION"" \ + -gcflags="-dwarflocationlists=true" \ + ./main.go +popd + +STATELESS_CNI_BUILD_DIR="$REPO_ROOT"/cni/network/stateless +pushd "$STATELESS_CNI_BUILD_DIR" + GOOS="$OS" go build -v -a -trimpath \ + -o "$OUT_DIR"/bin/azure-vnet-stateless"$FILE_EXT" \ + -ldflags "-X main.version="$CNI_VERSION"" \ + -gcflags="-dwarflocationlists=true" \ + ./main.go +popd + +CNI_IPAM_DIR="$REPO_ROOT"/cni/ipam/plugin +pushd "$CNI_IPAM_DIR" + GOOS="$OS" go build -v -a -trimpath \ + -o "$OUT_DIR"/bin/azure-vnet-ipam"$FILE_EXT" \ + -ldflags "-X main.version="$CNI_VERSION"" \ + -gcflags="-dwarflocationlists=true" \ + ./main.go +popd + +CNI_IPAMV6_DIR="$REPO_ROOT"/cni/ipam/pluginv6 +pushd "$CNI_IPAMV6_DIR" + GOOS="$OS" go build -v -a -trimpath \ + -o "$OUT_DIR"/bin/azure-vnet-ipamv6"$FILE_EXT" \ + -ldflags "-X main.version="$CNI_VERSION"" \ + -gcflags="-dwarflocationlists=true" \ + ./main.go +popd + +CNI_TELEMETRY_DIR="$REPO_ROOT"/cni/telemetry/service +pushd "$CNI_TELEMETRY_DIR" + GOOS="$OS" go build -v -a -trimpath \ + -o "$OUT_DIR"/bin/azure-vnet-telemetry"$FILE_EXT" \ + -ldflags "-X main.version="$CNI_VERSION" -X "$CNI_AI_PATH"="$CNI_AI_ID"" \ + -gcflags="-dwarflocationlists=true" \ + ./telemetrymain.go +popd + +pushd "$REPO_ROOT"/cni + cp azure-$OS.conflist "$OUT_DIR"/files/azure.conflist + cp azure-$OS-swift.conflist "$OUT_DIR"/files/azure-swift.conflist + cp azure-linux-multitenancy-transparent-vlan.conflist "$OUT_DIR"/files/azure-multitenancy-transparent-vlan.conflist + cp azure-$OS-swift-overlay.conflist "$OUT_DIR"/files/azure-swift-overlay.conflist + cp azure-$OS-swift-overlay-dualstack.conflist "$OUT_DIR"/files/azure-swift-overlay-dualstack.conflist + cp azure-$OS-multitenancy.conflist "$OUT_DIR"/files/multitenancy.conflist + cp "$REPO_ROOT"/telemetry/azure-vnet-telemetry.config "$OUT_DIR"/files/azure-vnet-telemetry.config +popd diff --git a/.pipelines/build/scripts/cns.sh b/.pipelines/build/scripts/cns.sh new file mode 100644 index 0000000000..fbb4c4a221 --- /dev/null +++ b/.pipelines/build/scripts/cns.sh @@ -0,0 +1,21 @@ +#!/bin/bash +set -eux + +[[ $OS =~ windows ]] && FILE_EXT='.exe' || FILE_EXT='' + +export CGO_ENABLED=0 + +mkdir -p "$OUT_DIR"/files +mkdir -p "$OUT_DIR"/bin +mkdir -p "$OUT_DIR"/scripts + +pushd "$REPO_ROOT"/cns + GOOS="$OS" go build -v -a \ + -o "$OUT_DIR"/bin/azure-cns"$FILE_EXT" \ + -ldflags "-X main.version="$CNS_VERSION" -X "$CNS_AI_PATH"="$CNS_AI_ID"" \ + -gcflags="-dwarflocationlists=true" \ + service/*.go + cp kubeconfigtemplate.yaml "$OUT_DIR"/files/kubeconfigtemplate.yaml + cp configuration/cns_config.json "$OUT_DIR"/files/cns_config.json + cp ../npm/examples/windows/setkubeconfigpath.ps1 "$OUT_DIR"/scripts/setkubeconfigpath.ps1 +popd diff --git a/.pipelines/build/scripts/dropgz.sh b/.pipelines/build/scripts/dropgz.sh new file mode 100644 index 0000000000..711a0bbfc0 --- /dev/null +++ b/.pipelines/build/scripts/dropgz.sh @@ -0,0 +1,64 @@ +#!/bin/bash +set -eux + +function _remove_exe_extension() { + local file_path + file_path="${1}" + file_dir=$(dirname "$file_path") + file_dir=$(realpath "$file_dir") + file_basename=$(basename "$file_path" '.exe') + mv "$file_path" "$file_dir"/"$file_basename" +} +function files::remove_exe_extensions() { + local target_dir + target_dir="${1}" + + for file in $(find "$target_dir" -type f -name '*.exe'); do + _remove_exe_extension "$file" + done +} + +[[ $OS =~ windows ]] && FILE_EXT='.exe' || FILE_EXT='' + +export CGO_ENABLED=0 + +mkdir -p "$GEN_DIR" +mkdir -p "$OUT_DIR"/bin + +DROPGZ_BUILD_DIR=$(mktemp -d -p "$GEN_DIR") +PAYLOAD_DIR=$(mktemp -d -p "$GEN_DIR") +DROPGZ_VERSION="${DROPGZ_VERSION:-v0.0.12}" +DROPGZ_MOD_DOWNLOAD_PATH=""$ACN_PACKAGE_PATH"/dropgz@"$DROPGZ_VERSION"" +DROPGZ_MOD_DOWNLOAD_PATH=$(echo "$DROPGZ_MOD_DOWNLOAD_PATH" | tr '[:upper:]' '[:lower:]') + +mkdir -p "$DROPGZ_BUILD_DIR" + +echo >&2 "##[section]Construct DropGZ Embedded Payload" +pushd "$PAYLOAD_DIR" + [[ -d "$OUT_DIR"/files ]] && cp "$OUT_DIR"/files/* . || true + [[ -d "$OUT_DIR"/scripts ]] && cp "$OUT_DIR"/scripts/* . || true + [[ -d "$OUT_DIR"/bin ]] && cp "$OUT_DIR"/bin/* . || true + + [[ $OS =~ windows ]] && files::remove_exe_extensions . + + sha256sum * > sum.txt + gzip --verbose --best --recursive . + + for file in $(find . -name '*.gz'); do + mv "$file" "${file%%.gz}" + done +popd + +echo >&2 "##[section]Download DropGZ ($DROPGZ_VERSION)" +GOPATH="$DROPGZ_BUILD_DIR" \ + go mod download "$DROPGZ_MOD_DOWNLOAD_PATH" + +echo >&2 "##[section]Build DropGZ with Embedded Payload" +pushd "$DROPGZ_BUILD_DIR"/pkg/mod/"$DROPGZ_MOD_DOWNLOAD_PATH" + mv "$PAYLOAD_DIR"/* pkg/embed/fs/ + GOOS="$OS" go build -v -trimpath -a \ + -o "$OUT_DIR"/bin/dropgz"$FILE_EXT" \ + -ldflags "-X github.com/Azure/azure-container-networking/dropgz/internal/buildinfo.Version="$DROPGZ_VERSION"" \ + -gcflags="-dwarflocationlists=true" \ + main.go +popd diff --git a/.pipelines/build/scripts/ipv6-hp-bpf.sh b/.pipelines/build/scripts/ipv6-hp-bpf.sh new file mode 100644 index 0000000000..121ad88399 --- /dev/null +++ b/.pipelines/build/scripts/ipv6-hp-bpf.sh @@ -0,0 +1,164 @@ +#!/bin/bash +set -eux + +function findcp::shared_library() { + local filename + filename="${1}" + local copy_to + copy_to="${2}" + local search_dirs + search_dirs="${@:3}" + + for dir in $search_dirs; do + if [[ -d "$dir" ]]; then + if [[ "$filename" =~ ^.*\.so.*$ ]]; then + found=$(find "$dir" -name "$filename") + else + found=$(find "$dir" -name ""$filename".so*") + fi + + if [[ -n $found ]]; then + break; + fi + else + echo >&2 "##[debug]Not a directory. Skipping..." + echo >&2 "##[debug]Dir: "$dir"" + fi + done + + echo -e >&2 "##[debug]Found: \n$found" + select=$(echo "$found" | head -n1) + + echo -e >&2 "##[debug]Selected: \n$select" + echo >&2 "##[debug]cp "$select" "$copy_to"" + cp "$select" "$copy_to" +} + + +[[ $OS =~ windows ]] && FILE_EXT='.exe' || FILE_EXT='' + +export CGO_ENABLED=0 +export C_INCLUDE_PATH=/usr/include/bpf + +mkdir -p "$OUT_DIR"/bin +mkdir -p "$OUT_DIR"/lib + +# Package up Needed C Files +if [[ -f /etc/debian_version ]];then + apt-get update -y + apt-get install -y --no-install-recommends llvm clang linux-libc-dev linux-headers-generic libbpf-dev libc6-dev nftables iproute2 + if [[ $ARCH =~ amd64 ]]; then + apt-get install -y --no-install-recommends gcc-multilib + + ARCH=x86_64-linux-gnu + cp /usr/lib/"$ARCH"/ld-linux-x86-64.so.2 "$OUT_DIR"/lib/ + + elif [[ $ARCH =~ arm64 ]]; then + apt-get install -y --no-install-recommends gcc-aarch64-linux-gnu + + ARCH=aarch64-linux-gnu + cp /usr/lib/"$ARCH"/ld-linux-aarch64.so.1 "$OUT_DIR"/lib/ + fi + + for dir in /usr/include/"$ARCH"/*; do + ln -sfn "$dir" /usr/include/$(basename "$dir") + done + + echo >&2 "##[group]lib $ARCH directory list" + ls -la /lib/"$ARCH" || true + echo >&2 "##[endgroup]" + echo >&2 "##[group]usr lib directory list" + ls -la /usr/lib || true + echo >&2 "##[endgroup]" + echo >&2 "##[group]usr lib $ARCH directory list" + ls -la /usr/lib/"$ARCH" || true + echo >&2 "##[endgroup]" + + # Copy Shared Library Files + ln -sfn /usr/include/"$ARCH"/asm /usr/include/asm + cp /lib/"$ARCH"/libnftables.so.1 "$OUT_DIR"/lib/ + cp /lib/"$ARCH"/libedit.so.2 "$OUT_DIR"/lib/ + cp /lib/"$ARCH"/libc.so.6 "$OUT_DIR"/lib/ + cp /lib/"$ARCH"/libmnl.so.0 "$OUT_DIR"/lib/ + cp /lib/"$ARCH"/libnftnl.so.11 "$OUT_DIR"/lib/ + cp /lib/"$ARCH"/libxtables.so.12 "$OUT_DIR"/lib/ + cp /lib/"$ARCH"/libjansson.so.4 "$OUT_DIR"/lib/ + cp /lib/"$ARCH"/libgmp.so.10 "$OUT_DIR"/lib/ + cp /lib/"$ARCH"/libtinfo.so.6 "$OUT_DIR"/lib/ + cp /lib/"$ARCH"/libbsd.so.0 "$OUT_DIR"/lib/ + cp /lib/"$ARCH"/libmd.so.0 "$OUT_DIR"/lib/ + + +# Mariner +else + tdnf install -y llvm clang libbpf-devel nftables gcc binutils iproute glibc + if [[ $ARCH =~ amd64 ]]; then + ARCH=x86_64-linux-gnu + if [[ -f '/usr/lib/ld-linux-x86-64.so.2' ]]; then + cp /usr/lib/ld-linux-x86-64.so.2 "$OUT_DIR"/lib/ + fi + elif [[ $ARCH =~ arm64 ]]; then + ARCH=aarch64-linux-gnu + #tdnf install -y glibc-devel.i386 + if [[ -f '/usr/lib/ld-linux-aarch64.so.1' ]]; then + cp /usr/lib/ld-linux-aarch64.so.1 "$OUT_DIR"/lib/ + fi + fi + for dir in /usr/include/"$ARCH"/*; do + if [[ -d $dir ]]; then + ln -sfn "$dir" /usr/include/$(basename "$dir") + elif [[ -f "$dir" ]]; then + ln -Tsfn "$dir" /usr/include/$(basename "$dir") + fi + done + + echo >&2 "##[group]usr include $ARCH directory list" + ls -la /usr/include/"$ARCH" || true + echo >&2 "##[endgroup]" + + echo >&2 "##[group]usr lib directory list" + ls -la /usr/lib || true + echo >&2 "##[endgroup]" + + echo >&2 "##[group]usr lib ldscripts directory list" + ls -la /usr/lib/ldscripts || true + echo >&2 "##[endgroup]" + + # Copy Shared Library Files + ln -sfn /usr/include/"$ARCH"/asm /usr/include/asm + cp /usr/lib/libnftables.so.1 "$OUT_DIR"/lib/ + cp /usr/lib/libedit.so.0 "$OUT_DIR"/lib/ + cp /usr/lib/libc.so.6 "$OUT_DIR"/lib/ + cp /usr/lib/libmnl.so.0 "$OUT_DIR"/lib/ + cp /usr/lib/libnftnl.so.11 "$OUT_DIR"/lib/ + cp /usr/lib/libxtables.so.12 "$OUT_DIR"/lib/ + cp /usr/lib/libjansson.so.4 "$OUT_DIR"/lib/ + cp /usr/lib/libgmp.so.10 "$OUT_DIR"/lib/ + cp /usr/lib/libtinfo.so.6 "$OUT_DIR"/lib/ + + cp /usr/lib/libbsd.so.0 "$OUT_DIR"/lib/ || tdnf install -y libbsd-devel + findcp::shared_library libbsd.so "$OUT_DIR"/lib/ /usr/lib /lib /lib32 /lib64 + cp /usr/lib/libmd.so.0 "$OUT_DIR"/lib/ || tdnf install -y libmd-devel + findcp::shared_library libmd.so "$OUT_DIR"/lib/ /usr/lib /lib /lib32 /lib64 +fi + + +# Add Needed Binararies +cp /usr/sbin/nft "$OUT_DIR"/bin/nft"$FILE_EXT" +cp /sbin/ip "$OUT_DIR"/bin/ip"$FILE_EXT" + + +# Build IPv6 HP BPF +pushd "$REPO_ROOT"/bpf-prog/ipv6-hp-bpf + cp ./cmd/ipv6-hp-bpf/*.go . + + if [[ "$DEBUG" =~ ^[T|t]rue$ ]]; then + echo -e "\n#define DEBUG" >> ./include/helper.h + fi + + go generate ./... + GOOS="$OS" go build -v -a -trimpath \ + -o "$OUT_DIR"/bin/ipv6-hp-bpf"$FILE_EXT" \ + -ldflags "-X main.version="$IPV6_HP_BPF_VERSION"" \ + -gcflags="-dwarflocationlists=true" . +popd diff --git a/.pipelines/build/scripts/npm.sh b/.pipelines/build/scripts/npm.sh new file mode 100644 index 0000000000..29e274b9f2 --- /dev/null +++ b/.pipelines/build/scripts/npm.sh @@ -0,0 +1,22 @@ +#!/bin/bash +set -eux + +[[ $OS =~ windows ]] && FILE_EXT='.exe' || FILE_EXT='' + +export CGO_ENABLED=0 + +mkdir -p "$OUT_DIR"/files +mkdir -p "$OUT_DIR"/bin +mkdir -p "$OUT_DIR"/scripts + +pushd "$REPO_ROOT"/npm + GOOS="$OS" go build -a -v -trimpath \ + -o "$OUT_DIR"/bin/azure-npm"$FILE_EXT" \ + -ldflags "-X main.version="$NPM_VERSION" -X "$NPM_AI_PATH"="$NPM_AI_ID"" \ + -gcflags="-dwarflocationlists=true" \ + ./cmd/*.go + + cp ./examples/windows/kubeconfigtemplate.yaml "$OUT_DIR"/files/kubeconfigtemplate.yaml + cp ./examples/windows/setkubeconfigpath.ps1 "$OUT_DIR"/scripts/setkubeconfigpath.ps1 + cp ./examples/windows/setkubeconfigpath-capz.ps1 "$OUT_DIR"/scripts/setkubeconfigpath-capz.ps1 +popd diff --git a/.pipelines/run-pipeline.yaml b/.pipelines/run-pipeline.yaml index eac5f2a62c..851bf9289f 100644 --- a/.pipelines/run-pipeline.yaml +++ b/.pipelines/run-pipeline.yaml @@ -13,6 +13,7 @@ stages: ob_artifactSuffix: _source ACR_DIR: $(Build.SourcesDirectory)/azure-container-networking + BUILD_TYPE: $(IMAGE_ACR_TYPE) steps: - checkout: azure-container-networking - template: build/ob-prepare.steps.yaml @@ -43,259 +44,128 @@ stages: IPV6_HP_BPF_VERSION: $[ stageDependencies.setup.env.outputs['EnvironmentalVariables.ipv6HpBpfVersion'] ] NPM_VERSION: $[ stageDependencies.setup.env.outputs['EnvironmentalVariables.npmVersion'] ] jobs: - - template: build/binaries.jobs.yaml + - template: /.pipelines/build/images.jobs.yaml parameters: - binaries: + images: - job: linux_amd64 displayName: "Linux/AMD64" templateContext: - action: build repositoryArtifact: drop_setup_env_source + buildScript: .pipelines/build/scripts/$(name).sh + obDockerfile: .pipelines/build/dockerfiles/$(name).Dockerfile strategy: maxParallel: 5 matrix: azure_ipam: - name: azure-ipam-archive - artifact: azure-ipam + name: azure-ipam + extraArgs: '' + archiveName: azure-ipam + archiveVersion: $(AZURE_IPAM_VERSION) + imageTag: $(Build.BuildNumber) + packageWithDropGZ: True cni: - name: cni-archive - artifact: cni + name: cni + extraArgs: '--build-arg CNI_AI_PATH=$(CNI_AI_PATH) --build-arg CNI_AI_ID=$(CNI_AI_ID)' + archiveName: azure-cni + archiveVersion: $(CNI_VERSION) + imageTag: $(Build.BuildNumber) + packageWithDropGZ: True cns: - name: cns-archive - artifact: cns + name: cns + extraArgs: '--build-arg CNS_AI_PATH=$(CNS_AI_PATH) --build-arg CNS_AI_ID=$(CNS_AI_ID)' + archiveName: azure-cns + archiveVersion: $(CNS_VERSION) + imageTag: $(Build.BuildNumber) ipv6_hp_bpf: - name: ipv6-hp-bpf-archive - artifact: ipv6-hp-bpf - npm: - name: npm-archive - artifact: npm + name: ipv6-hp-bpf + extraArgs: "--build-arg DEBUG=$(System.Debug)" + archiveName: ipv6-hp-bpf + archiveVersion: $(IPV6_HP_BPF_VERSION) + imageTag: $(Build.BuildNumber) + # npm: + # name: npm + # extraArgs: '--build-arg NPM_AI_PATH=$(NPM_AI_PATH) --build-arg NPM_AI_ID=$(NPM_AI_ID)' + # archiveName: azure-npm + # archiveVersion: $(NPM_VERSION) + # imageTag: $(Build.BuildNumber) + - job: windows_amd64 - displayName: "Windows/AMD64" + displayName: "Windows" templateContext: - action: build repositoryArtifact: drop_setup_env_source + buildScript: .pipelines/build/scripts/$(name).sh + obDockerfile: .pipelines/build/dockerfiles/$(name).Dockerfile strategy: maxParallel: 5 matrix: + azure_ipam: + name: azure-ipam + extraArgs: '' + archiveName: azure-ipam + archiveVersion: $(AZURE_IPAM_VERSION) + imageTag: $(Build.BuildNumber) + packageWithDropGZ: True cni: - name: cni-archive - artifact: cni + name: cni + extraArgs: '--build-arg CNI_AI_PATH=$(CNI_AI_PATH) --build-arg CNI_AI_ID=$(CNI_AI_ID)' + archiveName: azure-cni + archiveVersion: $(CNI_VERSION) + imageTag: $(Build.BuildNumber) + packageWithDropGZ: True cns: - name: cns-archive - artifact: cns - npm: - name: npm-archive - artifact: npm + name: cns + extraArgs: '--build-arg CNS_AI_PATH=$(CNS_AI_PATH) --build-arg CNS_AI_ID=$(CNS_AI_ID)' + archiveName: azure-cns + archiveVersion: $(CNS_VERSION) + imageTag: $(Build.BuildNumber) + # npm: + # name: npm + # extraArgs: '--build-arg NPM_AI_PATH=$(NPM_AI_PATH) --build-arg NPM_AI_ID=$(NPM_AI_ID)' + # archiveName: azure-npm + # archiveVersion: $(NPM_VERSION) + # imageTag: $(Build.BuildNumber) + - job: linux_arm64 displayName: "Linux/ARM64" templateContext: - action: build repositoryArtifact: drop_setup_env_source + buildScript: .pipelines/build/scripts/$(name).sh + obDockerfile: .pipelines/build/dockerfiles/$(name).Dockerfile strategy: - maxParallel: 5 + maxParallel: 3 matrix: azure_ipam: - name: azure-ipam-archive - artifact: azure-ipam + name: azure-ipam + archiveName: azure-ipam + archiveVersion: $(AZURE_IPAM_VERSION) + extraArgs: '' + imageTag: $(Build.BuildNumber) + packageWithDropGZ: True cni: - name: cni-archive - artifact: cni + name: cni + extraArgs: '--build-arg CNI_AI_PATH=$(CNI_AI_PATH) --build-arg CNI_AI_ID=$(CNI_AI_ID)' + archiveName: azure-cni + archiveVersion: $(CNI_VERSION) + imageTag: $(Build.BuildNumber) + packageWithDropGZ: True cns: - name: cns-archive - artifact: cns + name: cns + extraArgs: '--build-arg CNS_AI_PATH=$(CNS_AI_PATH) --build-arg CNS_AI_ID=$(CNS_AI_ID)' + archiveName: azure-cns + archiveVersion: $(CNS_VERSION) + imageTag: $(Build.BuildNumber) ipv6_hp_bpf: - name: ipv6-hp-bpf-archive - artifact: ipv6-hp-bpf - npm: - name: npm-archive - artifact: npm - - - - job: images_linux_amd64 - displayName: "Build Linux/AMD64 Images" - pool: - os: linux - type: docker - variables: - LinuxContainerImage: 'onebranch.azurecr.io/linux/ubuntu-2204:latest' - ob_outputDirectory: $(Build.SourcesDirectory)/out/images/$(os)_$(arch) - ob_artifactSuffix: _$(name) - - ARCH: amd64 - OS: linux - strategy: - maxParallel: 5 - matrix: - azure_ipam: - name: azure-ipam - dockerfilePath: $(ACN_DIR)/azure-ipam - extraArgs: '' - archiveName: azure-ipam - archiveVersion: $(AZURE_IPAM_VERSION) - imageTag: $(Build.BuildNumber) - cni: - name: cni - dockerfilePath: $(ACN_DIR)/cni - extraArgs: '--build-arg CNI_AI_PATH=$(CNI_AI_PATH) --build-arg CNI_AI_ID=$(CNI_AI_ID)' - archiveName: azure-cni - archiveVersion: $(CNI_VERSION) - imageTag: $(Build.BuildNumber) - cns: - name: cns - dockerfilePath: $(ACN_DIR)/cns - extraArgs: '--build-arg CNS_AI_PATH=$(CNS_AI_PATH) --build-arg CNS_AI_ID=$(CNS_AI_ID)' - archiveName: azure-cns - archiveVersion: $(CNS_VERSION) - imageTag: $(Build.BuildNumber) - ipv6_hp_bpf: - name: ipv6-hp-bpf - dockerfilePath: $(ACN_DIR)/bpf-prog/ipv6-hp-bpf - extraArgs: "--build-arg DEBUG=$(System.Debug)" - archiveName: ipv6-hp-bpf - archiveVersion: $(IPV6_HP_BPF_VERSION) - imageTag: $(Build.BuildNumber) - npm: - name: npm - dockerfilePath: $(ACN_DIR)/npm - extraArgs: '--build-arg NPM_AI_PATH=$(NPM_AI_PATH) --build-arg NPM_AI_ID=$(NPM_AI_ID)' - archiveName: azure-npm - archiveVersion: $(NPM_VERSION) - imageTag: $(Build.BuildNumber) - steps: - - template: build/image.steps.yaml - parameters: - arch: $(ARCH) - os: $(OS) - name: $(name) - dockerfile_path: $(dockerfilePath) - build_tag: $(imageTag) - extra_args: $(extraArgs) - archive_file: $(archiveName)-$(OS)-$(ARCH)-$(archiveVersion) - - - job: images_windows_amd64 - displayName: "Build Windows Images" - pool: - os: linux - type: docker - variables: - LinuxContainerImage: 'onebranch.azurecr.io/linux/ubuntu-2204:latest' - ob_outputDirectory: $(Build.SourcesDirectory)/out/images/$(os)_$(arch) - ob_artifactSuffix: _$(name) - ob_enable_qemu: true - - ARCH: amd64 - OS: windows - strategy: - maxParallel: 5 - matrix: - azure_ipam: - name: azure-ipam - dockerfilePath: $(ACN_DIR)/azure-ipam - extraArgs: '' - archiveName: azure-ipam - archiveVersion: $(OS)-$(ARCH)-$(AZURE_IPAM_VERSION) - imageTag: $(Build.BuildNumber) - cni: - name: cni - dockerfilePath: $(ACN_DIR)/cni - extraArgs: '--build-arg CNI_AI_PATH=$(CNI_AI_PATH) --build-arg CNI_AI_ID=$(CNI_AI_ID)' - archiveName: azure-cni - archiveVersion: $(CNI_VERSION) - imageTag: $(Build.BuildNumber) - cns: - name: cns - dockerfilePath: $(ACN_DIR)/cns - extraArgs: '--build-arg CNS_AI_PATH=$(CNS_AI_PATH) --build-arg CNS_AI_ID=$(CNS_AI_ID)' - archiveName: azure-cns - archiveVersion: $(CNS_VERSION) - imageTag: $(Build.BuildNumber) - npm: - name: npm - dockerfilePath: $(ACN_DIR)/npm-windows - extraArgs: '--build-arg NPM_AI_PATH=$(NPM_AI_PATH) --build-arg NPM_AI_ID=$(NPM_AI_ID)' - archiveName: azure-npm - archiveVersion: $(NPM_VERSION) - imageTag: $(Build.BuildNumber) - steps: - - template: build/image.steps.yaml - parameters: - arch: $(ARCH) - os: $(OS) - name: $(name) - dockerfile_path: $(dockerfilePath) - build_tag: $(imageTag) - extra_args: $(extraArgs) - archive_file: $(archiveName)-$(OS)-$(ARCH)-$(archiveVersion) - - - job: images_linux_arm64 - displayName: "Build Linux/ARM64 Images" - pool: - os: linux - type: docker - hostArchitecture: arm64 - LinuxHostVersion: - distribution: mariner - architecture: arm64 - variables: - ob_outputDirectory: $(Build.SourcesDirectory)/out/images/$(os)_$(arch) - ob_artifactSuffix: _$(name) - ob_build_container: true - - ARCH: arm64 - OS: linux - strategy: - maxParallel: 3 - matrix: - azure_ipam: - name: azure-ipam - os: linux - dockerfilePath: $(ACN_DIR)/azure-ipam - archiveName: azure-ipam - archiveVersion: $(AZURE_IPAM_VERSION) - extraArgs: '' - imageTag: $(Build.BuildNumber) - cni: - name: cni - os: linux - dockerfilePath: $(ACN_DIR)/cni - extraArgs: '--build-arg CNI_AI_PATH=$(CNI_AI_PATH) --build-arg CNI_AI_ID=$(CNI_AI_ID)' - archiveName: azure-cni - archiveVersion: $(CNI_VERSION) - imageTag: $(Build.BuildNumber) - cns: - name: cns - os: linux - dockerfilePath: $(ACN_DIR)/cns - extraArgs: '--build-arg CNS_AI_PATH=$(CNS_AI_PATH) --build-arg CNS_AI_ID=$(CNS_AI_ID)' - archiveName: azure-cns - archiveVersion: $(CNS_VERSION) - imageTag: $(Build.BuildNumber) - ipv6_hp_bpf: - name: ipv6-hp-bpf - os: linux - dockerfilePath: $(ACN_DIR)/bpf-prog/ipv6-hp-bpf - extraArgs: "--build-arg DEBUG=$(System.Debug)" - archiveName: ipv6-hp-bpf - archiveVersion: $(IPV6_HP_BPF_VERSION) - imageTag: $(Build.BuildNumber) - npm: - name: npm - os: linux - dockerfilePath: $(ACN_DIR)/npm - extraArgs: '--build-arg NPM_AI_PATH=$(NPM_AI_PATH) --build-arg NPM_AI_ID=$(NPM_AI_ID)' - archiveName: azure-npm - archiveVersion: $(NPM_VERSION) - imageTag: $(Build.BuildNumber) - steps: - - template: build/image.steps.yaml - parameters: - arch: $(ARCH) - os: $(OS) - name: $(name) - dockerfile_path: $(dockerfilePath) - build_tag: $(imageTag) - extra_args: $(extraArgs) - archive_file: $(archiveName)-$(OS)-$(ARCH)-$(archiveVersion) + name: ipv6-hp-bpf + extraArgs: "--build-arg DEBUG=$(System.Debug)" + archiveName: ipv6-hp-bpf + archiveVersion: $(IPV6_HP_BPF_VERSION) + imageTag: $(Build.BuildNumber) + # npm: + # name: npm + # extraArgs: '--build-arg NPM_AI_PATH=$(NPM_AI_PATH) --build-arg NPM_AI_ID=$(NPM_AI_ID)' + # archiveName: azure-npm + # archiveVersion: $(NPM_VERSION) + # imageTag: $(Build.BuildNumber) - stage: manifests @@ -331,6 +201,7 @@ stages: NPM_LINUX_ARM64_REF: $(IMAGE_REPO_PATH)/linux-arm64/npm:$(Build.BuildNumber) NPM_WINDOWS_AMD64_REF: $(IMAGE_REPO_PATH)/windows-amd64/npm:$(Build.BuildNumber) jobs: + - template: build/manifests.jobs.yaml parameters: generate: @@ -376,17 +247,17 @@ stages: imageReference: $(IPV6_LINUX_AMD64_REF) - platform: linux/arm64 imageReference: $(IPV6_LINUX_ARM64_REF) - - job: npm - templateContext: - name: npm - image_tag: $(NPM_VERSION) - platforms: - - platform: linux/amd64 - imageReference: $(NPM_LINUX_AMD64_REF) - - platform: linux/arm64 - imageReference: $(NPM_LINUX_ARM64_REF) - - platform: windows/amd64 - imageReference: $(NPM_WINDOWS_AMD64_REF) + # - job: npm + # templateContext: + # name: npm + # image_tag: $(NPM_VERSION) + # platforms: + # - platform: linux/amd64 + # imageReference: $(NPM_LINUX_AMD64_REF) + # - platform: linux/arm64 + # imageReference: $(NPM_LINUX_ARM64_REF) + # - platform: windows/amd64 + # imageReference: $(NPM_WINDOWS_AMD64_REF) # Cilium Podsubnet E2E tests