Skip to content

Commit ed2e9d5

Browse files
authored
ci: validate docker-sonic-mgmt image with PR tests before publishing (sonic-net#24866)
* ci: validate docker-sonic-mgmt image with PR tests before publishing Previously, the newly built docker-sonic-mgmt image was not tested before publishing, creating a gap in catching regressions. This change introduces a Test stage that validates the built image using sonic-mgmt PR tests before pushing to registry. - Push lastbuild tag after Build stage - Add Test stage using newly built docker-sonic-mgmt:lastbuild image - Add Publish stage to push latest tag only after tests pass - Fix cp command syntax in artifact staging This change depends on the merge of sonic-net/sonic-mgmt#21636 Signed-off-by: Xin Wang <xiwang5@microsoft.com> * Override REPO_NAME to avoid downloading KVM image from current build Signed-off-by: Xin Wang <xiwang5@microsoft.com> --------- Signed-off-by: Xin Wang <xiwang5@microsoft.com>
1 parent a1d785b commit ed2e9d5

File tree

1 file changed

+45
-30
lines changed

1 file changed

+45
-30
lines changed

.azure-pipelines/docker-sonic-mgmt.yml

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,7 @@ stages:
5757
5858
make NOBUSTER=1 NOBULLSEYE=1 SONIC_BUILD_JOBS=$(nproc) DEFAULT_CONTAINER_REGISTRY=publicmirror.azurecr.io ENABLE_DOCKER_BASE_PULL=y configure PLATFORM=generic DOCKER_BUILDKIT=0
5959
make -f Makefile.work BLDENV=bookworm SONIC_BUILD_JOBS=$(nproc) DEFAULT_CONTAINER_REGISTRY=publicmirror.azurecr.io ENABLE_DOCKER_BASE_PULL=y target/docker-sonic-mgmt.gz
60-
cp target -r $(Build.ArtifactStagingDirectory)/target
61-
docker load -i target/docker-sonic-mgmt.gz
62-
docker tag docker-sonic-mgmt $REGISTRY_SERVER/docker-sonic-mgmt:latest
60+
cp -r target $(Build.ArtifactStagingDirectory)/target
6361
env:
6462
REGISTRY_SERVER: ${{ parameters.registry_url }}
6563
displayName: Build docker-sonic-mgmt.gz
@@ -68,45 +66,62 @@ stages:
6866
artifact: 'docker-sonic-mgmt'
6967
displayName: "Archive docker image sonic-mgmt"
7068

71-
- job: validate_docker_image_and_upload
69+
- bash: |
70+
set -ex
71+
docker load -i $(Build.ArtifactStagingDirectory)/target/docker-sonic-mgmt.gz
72+
docker tag docker-sonic-mgmt:latest $REGISTRY_SERVER/docker-sonic-mgmt:lastbuild
73+
docker images
74+
env:
75+
REGISTRY_SERVER: ${{ parameters.registry_url }}
76+
displayName: 'Load and tag docker-sonic-mgmt as lastbuild'
77+
78+
- task: Docker@2
79+
displayName: 'Push docker-sonic-mgmt:lastbuild to registry'
80+
condition: succeeded()
81+
inputs:
82+
containerRegistry: ${{ parameters.registry_conn }}
83+
repository: docker-sonic-mgmt
84+
command: push
85+
tags: lastbuild
86+
87+
- stage: Test
88+
dependsOn: Build
89+
condition: and(succeeded(), in(dependencies.Build.result, 'Succeeded'))
90+
variables:
91+
- group: SONiC-Elastictest
92+
- name: BUILD_BRANCH
93+
value: $(Build.SourceBranchName)
94+
jobs:
95+
- template: .azure-pipelines/pr_test_template.yml@sonic-mgmt
96+
parameters:
97+
CHECKOUT_SONIC_MGMT: true
98+
OVERRIDE_PARAMS:
99+
REPO_NAME: "sonic-mgmt"
100+
SETUP_CONTAINER_PARAMS: "-i ${{ parameters.registry_url }}/docker-sonic-mgmt:lastbuild"
101+
102+
- stage: Publish
103+
dependsOn: Test
104+
condition: and(succeeded(), in(dependencies.Test.result, 'Succeeded'))
105+
jobs:
106+
- job: PublishAsLatest
72107
pool: sonicso1ES-amd64
73-
timeoutInMinutes: 360
74-
dependsOn: Build
108+
timeoutInMinutes: 60
75109
steps:
76-
- checkout: sonic-mgmt
77-
clean: true
78-
fetchDepth: 0
79-
displayName: 'Checkout sonic-mgmt'
80-
81110
- download: current
82111
artifact: 'docker-sonic-mgmt'
83-
displayName: "Download docker image sonic-mgmt"
84-
85-
- script: |
86-
set -ex
87-
88-
docker load -i $(Pipeline.Workspace)/docker-sonic-mgmt/target/docker-sonic-mgmt.gz
89-
90-
cd ansible
91-
sudo ./setup-management-network.sh -d
92-
cd ../
93-
docker rm -f sonic-mgmt
94-
95-
./setup-container.sh -n sonic-mgmt -d /data -i docker-sonic-mgmt -v
96-
97-
docker exec sonic-mgmt bash -c "echo 'Container is running' && ps aux"
98-
displayName: 'Setup sonic-mgmt docker container and verify'
112+
displayName: "Download docker-sonic-mgmt image"
99113

100114
- bash: |
101115
set -ex
102-
116+
docker load -i $(Pipeline.Workspace)/docker-sonic-mgmt/target/docker-sonic-mgmt.gz
103117
docker tag docker-sonic-mgmt:latest $REGISTRY_SERVER/docker-sonic-mgmt:latest
118+
docker images
104119
env:
105120
REGISTRY_SERVER: ${{ parameters.registry_url }}
106-
displayName: 'Tag docker-sonic-mgmt'
121+
displayName: 'Load and tag docker-sonic-mgmt as latest'
107122
108123
- task: Docker@2
109-
displayName: Upload image
124+
displayName: 'Push docker-sonic-mgmt:latest to registry'
110125
condition: succeeded()
111126
inputs:
112127
containerRegistry: ${{ parameters.registry_conn }}

0 commit comments

Comments
 (0)