From bf02ba16eed4ba7db96a97b48ce6168a88af486e Mon Sep 17 00:00:00 2001 From: Shilong Liu Date: Thu, 22 Apr 2021 10:11:11 +0800 Subject: [PATCH] [CI] Add azure pipeline file for official build Signed-off-by: Shilong Liu --- .../azure-pipelines-UpgrateVersion.yml | 24 +++- .azure-pipelines/azure-pipelines-build.yml | 131 +++++++++++------- .../azure-pipelines-image-template.yml | 56 ++++++++ .../azure-pipelines-job-groups.yml | 8 +- .azure-pipelines/build-template.yml | 9 ++ .azure-pipelines/cleanup.yml | 5 +- .azure-pipelines/official-build.yml | 50 ++----- .azure-pipelines/run-test-template.yml | 2 + 8 files changed, 183 insertions(+), 102 deletions(-) create mode 100644 .azure-pipelines/azure-pipelines-image-template.yml diff --git a/.azure-pipelines/azure-pipelines-UpgrateVersion.yml b/.azure-pipelines/azure-pipelines-UpgrateVersion.yml index 3cec0871ed..b0b84cf3b1 100644 --- a/.azure-pipelines/azure-pipelines-UpgrateVersion.yml +++ b/.azure-pipelines/azure-pipelines-UpgrateVersion.yml @@ -18,10 +18,25 @@ pool: sonicbld stages: - stage: Build + variables: + CACHE_MODE: none + VERSION_CONTROL_OPTIONS: 'SONIC_VERSION_CONTROL_COMPONENTS=' jobs: - template: azure-pipelines-build.yml parameters: - buildSlave: y + buildOptions: '${{ variables.VERSION_CONTROL_OPTIONS }} SONIC_BUILD_JOBS=$(nproc) ENABLE_IMAGE_SIGNATURE=y' + preSteps: + - script: | + containers=$(docker container ls | grep "sonic-slave" | awk '{ print $1 }') + if [ ! -z "$containers" ]; then + docker container kill $containers || true + sleep 5 + fi + images=$(docker images 'sonic-slave-*' -a -q) + if [ ! -z "$images" ]; then + docker rmi -f $images + fi + displayName: 'Cleanup sonic slave' - stage: UpgradeVersions jobs: - job: UpgradeVersions @@ -48,11 +63,14 @@ stages: cp -r $(Pipeline.Workspace)/sonic-buildimage.${default_platform}/versions target/ make freeze FREEZE_VERSION_OPTIONS=-r find files/build/versions - for artifact in $artifacts + ordered_artifacts=$(echo "$artifacts" | grep -v -E "arm64|armhf" && echo "$artifacts" | grep -E "arm64|armhf") + for artifact in $ordered_artifacts do rm -rf target/versions cp -r $artifact/versions target/ - make freeze FREEZE_VERSION_OPTIONS="-a -d" + OPTIONS="-a -d" + [[ "$artifact" == *arm64* || "$artifact" == *armhf* ]] && OPTIONS="-d" + make freeze FREEZE_VERSION_OPTIONS="$OPTIONS" done git diff files/build/versions displayName: 'Freeze Versions' diff --git a/.azure-pipelines/azure-pipelines-build.yml b/.azure-pipelines/azure-pipelines-build.yml index 550e2ccd97..278778df2a 100644 --- a/.azure-pipelines/azure-pipelines-build.yml +++ b/.azure-pipelines/azure-pipelines-build.yml @@ -1,3 +1,5 @@ +# The azure pipeline template for Official build, and upgrade version build + parameters: - name: 'jobFilters' type: object @@ -5,68 +7,95 @@ parameters: - name: 'buildOptions' type: string default: 'SONIC_CONFIG_BUILD_JOBS=1' -- name: 'buildSlave' - type: string - default: 'n' +- name: 'preSteps' + type: stepList + default: [] - name: 'postSteps' type: stepList default: [] jobs: -- template: azure-pipelines-job-groups.yml +- template: azure-pipelines-image-template.yml parameters: jobFilters: ${{ parameters.jobFilters }} - preSteps: - - script: | - containers=$(docker container ls | grep "sonic-slave" | awk '{ print $1 }') - if [ ! -z "$containers" ]; then - docker container kill $containers || true - sleep 5 - fi - if [ "${{ parameters.buildSlave }}" == "y" ]; then - images=$(docker images 'sonic-slave-*' -a -q) - [ ! -z "$images" ] && docker rmi -f $images - fi - sudo rm -rf $(ls -A1) - displayName: 'Init' - - checkout: self - submodules: recursive - displayName: 'Checkout code' - - script: | - make ${{ parameters.buildOptions }} PLATFORM=$GROUP_NAME configure - displayName: 'Make configure' - postSteps: - - ${{ parameters.postSteps }} - - publish: $(System.DefaultWorkingDirectory)/target - artifact: 'sonic-buildimage.$(GROUP_NAME)$(GROUP_EXTNAME)' - displayName: "Archive sonic image" + preSteps: ${{ parameters.preSteps }} + postSteps: ${{ parameters.postSteps }} + jobVariables: + PLATFORM_AZP: $(GROUP_NAME) + PLATFORM_ARCH: amd64 + BUILD_OPTIONS: ${{ parameters.buildOptions }} + DOCKER_DATA_ROOT_FOR_MULTIARCH: /data/march/docker + dbg_image: false + swi_image: false + raw_image: false + sync_rpc_image: false + platform_rpc: false jobGroups: - name: vs - script: | - sudo bash -c "echo 1 > /proc/sys/vm/compact_memory" - make ${{ parameters.buildOptions }} target/sonic-vs.img.gz - - name: broadcom - script: | - make ${{ parameters.buildOptions }} target/sonic-broadcom.bin target/sonic-aboot-broadcom.swi + variables: + dbg_image: true - name: barefoot - script: | - make ${{ parameters.buildOptions }} target/sonic-barefoot.bin target/sonic-aboot-barefoot.swi + variables: + swi_image: true + - name: broadcom + variables: + dbg_image: true + swi_image: true + raw_image: true + sync_rpc_image: true + platform_rpc: brcm - name: centec - script: | - make ${{ parameters.buildOptions }} INSTALL_DEBUG_TOOLS=y target/sonic-centec.bin - mv target/sonic-centec.bin target/sonic-centec-dbg.bin - make ${{ parameters.buildOptions }} target/sonic-centec.bin - make ${{ parameters.buildOptions }} ENABLE_SYNCD_RPC=y target/docker-syncd-centec-rpc.gz + variables: + dbg_image: true + sync_rpc_image: true + platform_rpc: centec + - name: centec-arm64 + pool: sonicbld_8c + timeoutInMinutes: 1800 + variables: + PLATFORM_ARCH: arm64 + - name: generic + variables: + dbg_image: true - name: innovium - script: | - make ${{ parameters.buildOptions }} SONIC_CONFIG_BUILD_JOBS=1 target/sonic-innovium.bin + variables: + swi_image: true + - name: marvell-armhf + pool: sonicbld_8c + timeoutInMinutes: 1800 + variables: + PLATFORM_ARCH: armhf - name: mellanox - script: | - make ${{ parameters.buildOptions }} target/sonic-mellanox.bin - - name: mellanox - extName: _rpc - script: | - make ${{ parameters.buildOptions }} ENABLE_SYNCD_RPC=y all + variables: + dbg_image: true + sync_rpc_image: true + platform_rpc: mlnx - name: nephos - script: | - make ${{ parameters.buildOptions }} target/sonic-nephos.bin + variables: + dbg_image: true + sync_rpc_image: true + platform_rpc: nephos + buildSteps: + - bash: | + if [ $(GROUP_NAME) == vs ]; then + if [ $(dbg_image) == true ]; then + make $BUILD_OPTIONS INSTALL_DEBUG_TOOLS=y target/sonic-vs.img.gz && mv target/sonic-vs.img.gz target/sonic-vs-dbg.img.gz + fi + make $BUILD_OPTIONS target/docker-sonic-vs.gz target/sonic-vs.img.gz target/docker-ptf.gz + else + if [ $(dbg_image) == true ]; then + make $BUILD_OPTIONS INSTALL_DEBUG_TOOLS=y target/sonic-$(GROUP_NAME).bin && \ + mv target/sonic-$(GROUP_NAME).bin target/sonic-$(GROUP_NAME)-dbg.bin + fi + if [ $(swi_image) == true ]; then + make $BUILD_OPTIONS ENABLE_IMAGE_SIGNATURE=y target/sonic-aboot-$(GROUP_NAME).swi + fi + if [ $(raw_image) == true ]; then + make $BUILD_OPTIONS target/sonic-$(GROUP_NAME).raw + fi + if [ $(sync_rpc_image) == true ]; then + make $BUILD_OPTIONS ENABLE_SYNCD_RPC=y target/docker-syncd-$(platform_rpc)-rpc.gz + fi + make $BUILD_OPTIONS target/sonic-$(GROUP_NAME).bin + fi + displayName: "Build sonic image" diff --git a/.azure-pipelines/azure-pipelines-image-template.yml b/.azure-pipelines/azure-pipelines-image-template.yml new file mode 100644 index 0000000000..c43836f1e3 --- /dev/null +++ b/.azure-pipelines/azure-pipelines-image-template.yml @@ -0,0 +1,56 @@ +# The azure pipeline template for PR build, Official build, and upgrade version build + +parameters: +- name: 'jobFilters' + type: object + default: '' +- name: 'preSteps' + type: stepList + default: [] +- name: 'buildSteps' + type: stepList + default: [] +- name: 'postSteps' + type: stepList + default: [] +- name: jobGroups + type: object + default: [] +- name: jobVariables + type: object + default: [] +jobs: +- template: azure-pipelines-job-groups.yml + parameters: + jobFilters: ${{ parameters.jobFilters }} + jobVariables: ${{ parameters.jobVariables }} + preSteps: + - template: cleanup.yml + - ${{ parameters. preSteps }} + - script: | + if [ -n "$(CACHE_MODE)" ] && echo $(PLATFORM_AZP) | grep -E -q "^(vs|broadcom|mellanox)$"; then + CACHE_OPTIONS="SONIC_DPKG_CACHE_METHOD=$(CACHE_MODE) SONIC_DPKG_CACHE_SOURCE=/nfs/dpkg_cache/$(PLATFORM_AZP)" + BUILD_OPTIONS="$(BUILD_OPTIONS) $CACHE_OPTIONS" + echo "##vso[task.setvariable variable=BUILD_OPTIONS]$BUILD_OPTIONS" + fi + displayName: "Set cache options" + - checkout: self + submodules: recursive + displayName: 'Checkout code' + - script: | + git checkout -b $(Build.SourceBranchName) + sudo modprobe overlay + sudo apt-get install -y acl + sudo bash -c "echo 1 > /proc/sys/vm/compact_memory" + ENABLE_DOCKER_BASE_PULL=y make PLATFORM=$(PLATFORM_AZP) PLATFORM_ARCH=$(PLATFORM_ARCH) configure + displayName: 'Make configure' + postSteps: + - script: cp target -r $(Build.ArtifactStagingDirectory)/ + displayName: Copy Artifacts + - publish: $(Build.ArtifactStagingDirectory) + artifact: 'sonic-buildimage.$(GROUP_NAME)$(GROUP_EXTNAME)' + displayName: "Archive sonic image" + - ${{ parameters.postSteps }} + - template: cleanup.yml + jobGroups: ${{ parameters.jobGroups }} + buildSteps: ${{ parameters.buildSteps }} diff --git a/.azure-pipelines/azure-pipelines-job-groups.yml b/.azure-pipelines/azure-pipelines-job-groups.yml index 1ca5c932b0..d5be80dcde 100644 --- a/.azure-pipelines/azure-pipelines-job-groups.yml +++ b/.azure-pipelines/azure-pipelines-job-groups.yml @@ -2,6 +2,9 @@ parameters: - name: 'preSteps' type: stepList default: [] +- name: 'buildSteps' + type: stepList + default: [] - name: "postSteps" type: stepList default: [] @@ -16,14 +19,14 @@ parameters: default: '' - name: 'timeoutInMinutes' type: 'number' - default: 1440 + default: 600 - name: 'jobFilters' type: object default: '' jobs: - ${{ each jobGroup in parameters.jobGroups }}: - - ${{ if or(eq(parameters.jobFilters, ''), containsValue(parameters.jobFilters, jobGroup.name)) }}: + - ${{ if or(eq(parameters.jobFilters, ''), containsValue(parameters.jobFilters, jobGroup.name), endswith(variables['Build.DefinitionName'], format('.{0}{1}', jobGroup.name, jobGroup.extName))) }}: - job: ${{ replace(format('{0}{1}', jobGroup.name, jobGroup.extName), '-', '_') }} ${{ each pair in jobGroup }}: ${{ if not(in(pair.key, 'job', 'name', 'extName', 'variables', 'steps', 'script', 'scriptEnv')) }}: @@ -50,4 +53,5 @@ jobs: displayName: 'JobScript' - ${{ if ne(jobGroup.steps, '') }}: - ${{ jobGroup.steps }} + - ${{ parameters.buildSteps }} - ${{ parameters.postSteps }} diff --git a/.azure-pipelines/build-template.yml b/.azure-pipelines/build-template.yml index c1cc04836a..2665f46452 100644 --- a/.azure-pipelines/build-template.yml +++ b/.azure-pipelines/build-template.yml @@ -114,3 +114,12 @@ jobs: - publish: $(System.DefaultWorkingDirectory)/ artifact: sonic-buildimage.${{ parameters.platform }} displayName: "Archive sonic image" + - script: | + set -x + find target -name "*.log" | xargs -I{} cp {} $(Build.ArtifactStagingDirectory)/ + condition: failed() + displayName: "Copy build logs" + - publish: $(Build.ArtifactStagingDirectory)/ + artifact: sonic-buildimage.${{ parameters.platform}}.logs@$(System.JobAttempt) + displayName: "Archive build logs" + condition: failed() diff --git a/.azure-pipelines/cleanup.yml b/.azure-pipelines/cleanup.yml index ffbcf298b6..6569c8ed0b 100644 --- a/.azure-pipelines/cleanup.yml +++ b/.azure-pipelines/cleanup.yml @@ -10,8 +10,5 @@ steps: if sudo [ -f dockerfs/var/run/docker.pid ] ; then pid=`sudo cat dockerfs/var/run/docker.pid` ; sudo kill $pid fi - sudo rm -rf dockerfs - sudo rm -rf fsroot - username=$(id -un) - sudo chown -R ${username}.${username} . + sudo rm -rf $(ls -A1) displayName: "Clean Workspace" diff --git a/.azure-pipelines/official-build.yml b/.azure-pipelines/official-build.yml index b09a3bca7f..fa79be9697 100644 --- a/.azure-pipelines/official-build.yml +++ b/.azure-pipelines/official-build.yml @@ -17,47 +17,13 @@ pr: none stages: - stage: Build - + pool: sonicbld + variables: + CACHE_MODE: wcache + ${{ if eq(variables['Build.SourceBranchName'], '202012') }}: + VERSION_CONTROL_OPTIONS: 'SONIC_VERSION_CONTROL_COMPONENTS=deb,py2,py3,web' jobs: - - template: build-template.yml + - template: azure-pipelines-build.yml parameters: - platform: broadcom - platform_short: brcm - cache_mode: wcache - dbg_image: true - swi_image: true - raw_image: true - sync_rpc_image: true - - - template: build-template.yml - parameters: - platform: mellanox - platform_short: mlnx - cache_mode: wcache - dbg_image: true - sync_rpc_image: true - - - template: build-template.yml - parameters: - platform: vs - platform_short: vs - dbg_image: true - cache_mode: wcache - - - template: build-template.yml - parameters: - timeout: 3600 - platform: marvell-armhf - platform_arch: armhf - platform_short: marvell-armhf - cache_mode: wcache - pool: sonicbld_8c - - - template: build-template.yml - parameters: - timeout: 3600 - platform: centec-arm64 - platform_arch: arm64 - platform_short: centec-arm64 - cache_mode: wcache - pool: sonicbld_8c + buildOptions: 'USERNAME=admin SONIC_BUILD_JOBS=$(nproc) ${{ variables.VERSION_CONTROL_OPTIONS }}' + jobFilters: none diff --git a/.azure-pipelines/run-test-template.yml b/.azure-pipelines/run-test-template.yml index afe5eadec3..071286d0fb 100644 --- a/.azure-pipelines/run-test-template.yml +++ b/.azure-pipelines/run-test-template.yml @@ -49,6 +49,8 @@ steps: virsh -c qemu:///system dumpxml ${{ parameters.dut }} > $(Build.ArtifactStagingDirectory)/kvmdump/${{ parameters.dut }}.xml img=$(virsh -c qemu:///system domblklist ${{ parameters.dut }} | grep vda | awk '{print $2}') cp $img $(Build.ArtifactStagingDirectory)/kvmdump/${{ parameters.dut }}.img + gzip $(Build.ArtifactStagingDirectory)/kvmdump/${{ parameters.dut }}.img + sudo gzip $(Build.ArtifactStagingDirectory)/kvmdump/${{ parameters.dut }}.memdmp virsh -c qemu:///system undefine ${{ parameters.dut }} fi