Skip to content

Commit 9e69799

Browse files
committed
[CI] migrate CI test steps to containers
Today we use benni09 static agent to run test/gtest/valgrind steps which is unscaleable since it can only run one pipeline at a time, causing delays in builds that can be stuck waiting for hours The idea is to move these steps to containers, allowing running them in parallel as well as running multiple pipelines at the same time (depending on the capacity of the k8s cluster) Issue: HPCINFRA-3249 Signed-off-by: NirWolfer <[email protected]>
1 parent 198bd09 commit 9e69799

File tree

8 files changed

+151
-144
lines changed

8 files changed

+151
-144
lines changed

.ci/dockerfiles/Dockerfile.ubuntu22.04

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,35 @@
1-
FROM harbor.mellanox.com/hpcx/x86_64/ubuntu22.04/base AS style
1+
ARG ARCH=x86_64
2+
FROM harbor.mellanox.com/hpcx/x86_64/ubuntu22.04/base AS build
3+
FROM build AS tests
4+
RUN apt-get update && \
5+
apt-get install -y \
6+
net-tools unzip iproute2 wget \
7+
&& apt-get clean && rm -rf /var/lib/apt/lists/*
8+
FROM tests AS vg
9+
RUN apt-get update && \
10+
apt-get install -y \
11+
valgrind \
12+
&& apt-get clean && rm -rf /var/lib/apt/lists/*
13+
FROM tests AS test
14+
RUN apt-get update && \
15+
apt-get install -y \
16+
openssh-server psmisc \
17+
&& apt-get clean && rm -rf /var/lib/apt/lists/*
18+
# setup ssh server and passwordless login for root for tests flows (verifyer.pl)
19+
RUN mkdir -p /var/run/sshd ~/.ssh && \
20+
rm -rf ~/.ssh/id_rsa* && ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa && \
21+
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys && \
22+
sed -i 's|#PermitRootLogin.*|PermitRootLogin without-password|g' /etc/ssh/sshd_config && \
23+
sed -i 's|#PasswordAuthentication.*|PasswordAuthentication no|g' /etc/ssh/sshd_config && \
24+
echo "Host *" >> ~/.ssh/config && \
25+
echo " StrictHostKeyChecking no" >> ~/.ssh/config && \
26+
echo " UserKnownHostsFile /dev/null" >> ~/.ssh/config && \
27+
echo " LogLevel ERROR" >> ~/.ssh/config
28+
FROM tests AS gtest
29+
FROM build AS style
230
RUN apt-get update \
331
&& apt-get install -y clang-15 clang-format-15 \
432
&& update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-15 100 \
533
&& update-alternatives --install /usr/bin/clang clang /usr/bin/clang-15 100 \
634
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-15 \
735
&& apt-get clean && rm -rf /var/lib/apt/lists/*
8-

.ci/matrix_job.yaml

Lines changed: 63 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ kubernetes:
1212
cloud: il-ipp-blossom-prod
1313
nodeSelector: 'beta.kubernetes.io/os=linux'
1414
namespace: swx-media
15-
limits: '{memory: 8Gi, cpu: 7000m}'
16-
requests: '{memory: 8Gi, cpu: 7000m}'
15+
limits: '{memory: 10Gi, cpu: 10000m}'
16+
requests: '{memory: 10Gi, cpu: 10000m}'
1717

1818
credentials:
1919
- {credentialsId: 'media_coverity_credentials', usernameVariable: 'XLIO_COV_USER', passwordVariable: 'XLIO_COV_PASSWORD'}
@@ -67,14 +67,14 @@ runs_on_dockers:
6767
tag: '20241001',
6868
build_args: '--build-arg ARCH=aarch64 --no-cache',
6969
category: 'base'
70-
}
70+
}
7171
# tool
7272
- {
7373
file: '.ci/dockerfiles/Dockerfile.ubuntu22.04',
7474
arch: 'x86_64',
7575
name: 'style',
7676
uri: 'xlio/$arch/ubuntu22.04/$name',
77-
tag: '20240812',
77+
tag: '20250219',
7878
build_args: '--no-cache --target style',
7979
category: 'tool'
8080
}
@@ -98,9 +98,58 @@ runs_on_dockers:
9898
build_args: '--no-cache',
9999
category: 'tool'
100100
}
101-
102-
runs_on_agents:
103-
- {nodeLabel: 'beni09', category: 'base'}
101+
# tests
102+
- {
103+
file: '.ci/dockerfiles/Dockerfile.ubuntu22.04',
104+
arch: 'x86_64',
105+
name: 'test',
106+
uri: 'xlio/$arch/ubuntu22.04/$name',
107+
tag: '20250219',
108+
build_args: '--no-cache --target test',
109+
category: 'tests',
110+
annotations: [{ key: 'k8s.v1.cni.cncf.io/networks', value: 'sriov-cx6dx-p1' }],
111+
limits: '{memory: 10Gi, cpu: 10000m, hugepages-2Mi: 10Gi, mellanox.com/sriov_cx6dx_p1: 1}',
112+
requests: '{memory: 10Gi, cpu: 10000m, hugepages-2Mi: 10Gi, mellanox.com/sriov_cx6dx_p1: 1}',
113+
caps_add: '[ IPC_LOCK, SYS_RESOURCE ]',
114+
runAsUser: '0',
115+
runAsGroup: '0',
116+
cloud: swx-k8s-spray,
117+
namespace: xlio-ci
118+
}
119+
- {
120+
file: '.ci/dockerfiles/Dockerfile.ubuntu22.04',
121+
arch: 'x86_64',
122+
name: 'vg',
123+
uri: 'xlio/$arch/ubuntu22.04/$name',
124+
tag: '20250219',
125+
build_args: '--no-cache --target vg',
126+
category: 'tool',
127+
annotations: [{ key: 'k8s.v1.cni.cncf.io/networks', value: 'sriov-cx6dx-p2' }],
128+
limits: '{memory: 10Gi, cpu: 10000m, hugepages-2Mi: 10Gi, mellanox.com/sriov_cx6dx_p2: 1}',
129+
requests: '{memory: 10Gi, cpu: 10000m, hugepages-2Mi: 10Gi, mellanox.com/sriov_cx6dx_p2: 1}',
130+
caps_add: '[ IPC_LOCK, SYS_RESOURCE ]',
131+
runAsUser: '0',
132+
runAsGroup: '0',
133+
cloud: swx-k8s-spray,
134+
namespace: xlio-ci
135+
}
136+
- {
137+
file: '.ci/dockerfiles/Dockerfile.ubuntu22.04',
138+
arch: 'x86_64',
139+
name: 'gtest',
140+
uri: 'xlio/$arch/ubuntu22.04/$name',
141+
tag: '20250219',
142+
build_args: '--no-cache --target gtest',
143+
category: 'tests',
144+
annotations: [{ key: 'k8s.v1.cni.cncf.io/networks', value: 'sriov-cx6dx-p1@net1,sriov-cx6dx-p2@net2' }],
145+
limits: '{memory: 10Gi, cpu: 10000m, hugepages-2Mi: 8Gi, mellanox.com/sriov_cx6dx_p1: 1, mellanox.com/sriov_cx6dx_p2: 1}',
146+
requests: '{memory: 10Gi, cpu: 10000m, hugepages-2Mi: 8Gi, mellanox.com/sriov_cx6dx_p1: 1, mellanox.com/sriov_cx6dx_p2: 1}',
147+
caps_add: '[ IPC_LOCK, SYS_RESOURCE ]',
148+
runAsUser: '0',
149+
runAsGroup: '0',
150+
cloud: swx-k8s-spray,
151+
namespace: xlio-ci
152+
}
104153

105154
matrix:
106155
axes:
@@ -133,8 +182,9 @@ steps:
133182
- name: Install Doca-host
134183
containerSelector:
135184
- "{category: 'base'}"
136-
agentSelector:
137-
- "{nodeLabel: 'skip-agent'}"
185+
- "{name: 'test'}"
186+
- "{name: 'gtest'}"
187+
- "{name: 'vg'}"
138188
run: |
139189
echo "Installing DOCA: ${DOCA_VERSION} ..."
140190
.ci/scripts/doca_install.sh
@@ -145,17 +195,13 @@ steps:
145195
.ci/scripts/doca_install.sh
146196
containerSelector:
147197
- "{name: 'style', category: 'tool', variant: 1}"
148-
agentSelector:
149-
- "{nodeLabel: 'skip-agent'}"
150198

151199
- name: Copyrights
152200
enable: ${do_copyrights}
153201
credentialsId: 'mellanox_github_credentials'
154202
run: env WORKSPACE=$PWD GITHUB_TOKEN=$MELLANOX_GH_TOKEN ./contrib/jenkins_tests/copyrights.sh
155203
containerSelector:
156204
- "{name: 'header-check', category: 'tool', variant: 1}"
157-
agentSelector:
158-
- "{nodeLabel: 'skip-agent'}"
159205
archiveArtifacts: '*.log,*.tar.gz'
160206
parallel: false
161207

@@ -167,9 +213,6 @@ steps:
167213
- name: Build
168214
enable: ${do_build}
169215
containerSelector:
170-
- "{category: 'base'}"
171-
agentSelector:
172-
- "{category: 'base'}"
173216
run: |
174217
[ "x${do_build}" == "xtrue" ] && action=yes || action=no
175218
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_build=${action} ./contrib/test_jenkins.sh
@@ -183,8 +226,6 @@ steps:
183226
enable: ${do_service}
184227
containerSelector:
185228
- "{category: 'base', variant:1}"
186-
agentSelector:
187-
- "{category: 'base', variant:1}"
188229
run: |
189230
[ "x${do_service}" == "xtrue" ] && action=yes || action=no
190231
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_tool=${action} ./contrib/test_jenkins.sh
@@ -198,8 +239,6 @@ steps:
198239
enable: ${do_package}
199240
containerSelector:
200241
- "{category: 'base'}"
201-
agentSelector:
202-
- "{nodeLabel: 'skip-agent'}"
203242
run: |
204243
[ "x${do_package}" == "xtrue" ] && action=yes || action=no
205244
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_rpm=${action} ./contrib/test_jenkins.sh
@@ -213,8 +252,6 @@ steps:
213252
enable: ${do_antivirus}
214253
containerSelector:
215254
- "{name: 'rhel8.3-mofed-x86_64', category: 'base', variant: 1}"
216-
agentSelector:
217-
- "{nodeLabel: 'skip-agent'}"
218255
run: |
219256
env WORKSPACE=$PWD .ci/antivirus.sh ${release_folder}
220257
archiveArtifacts: 'logs/'
@@ -223,8 +260,6 @@ steps:
223260
enable: ${do_style}
224261
containerSelector:
225262
- "{name: 'style', category: 'tool'}"
226-
agentSelector:
227-
- "{nodeLabel: 'skip-agent'}"
228263
run: |
229264
[ "x${do_style}" == "xtrue" ] && action=yes || action=no
230265
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_style=${action} ./contrib/test_jenkins.sh
@@ -238,8 +273,6 @@ steps:
238273
enable: ${do_compiler}
239274
containerSelector:
240275
- "{name: 'toolbox', category: 'tool'}"
241-
agentSelector:
242-
- "{nodeLabel: 'skip-agent'}"
243276
run: |
244277
[ "x${do_compiler}" == "xtrue" ] && action=yes || action=no
245278
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_compiler=${action} ./contrib/test_jenkins.sh
@@ -254,8 +287,6 @@ steps:
254287
credentialsId: 'media_coverity_credentials'
255288
containerSelector:
256289
- "{name: 'toolbox', category: 'tool'}"
257-
agentSelector:
258-
- "{nodeLabel: 'skip-agent'}"
259290
run: |
260291
[ "x${do_coverity}" == "xtrue" ] && action=yes || action=no
261292
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_cov=${action} ./contrib/test_jenkins.sh
@@ -270,8 +301,6 @@ steps:
270301
enable: ${do_cppcheck}
271302
containerSelector:
272303
- "{name: 'xlio_static.cppcheck', category: 'tool', variant: 1}"
273-
agentSelector:
274-
- "{nodeLabel: 'skip-agent'}"
275304
run: |
276305
[ "x${do_cppcheck}" == "xtrue" ] && action=yes || action=no
277306
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_cppcheck=${action} ./contrib/test_jenkins.sh
@@ -285,8 +314,6 @@ steps:
285314
enable: ${do_csbuild}
286315
containerSelector:
287316
- "{name: 'xlio_static.csbuild', category: 'tool', variant: 1}"
288-
agentSelector:
289-
- "{nodeLabel: 'skip-agent'}"
290317
run: |
291318
[ "x${do_csbuild}" == "xtrue" ] && action=yes || action=no
292319
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_csbuild=${action} ./contrib/test_jenkins.sh
@@ -299,9 +326,7 @@ steps:
299326
- name: Test
300327
enable: ${do_test}
301328
containerSelector:
302-
- "{name: 'skip-container'}"
303-
agentSelector:
304-
- "{nodeLabel: 'beni09'}"
329+
- "{name: 'test'}"
305330
run: |
306331
[ "x${do_test}" == "xtrue" ] && action=yes || action=no
307332
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_run=${action} ./contrib/test_jenkins.sh
@@ -314,9 +339,7 @@ steps:
314339
- name: Gtest
315340
enable: ${do_gtest}
316341
containerSelector:
317-
- "{name: 'skip-container'}"
318-
agentSelector:
319-
- "{nodeLabel: 'beni09'}"
342+
- "{name: 'gtest'}"
320343
run: |
321344
[ "x${do_gtest}" == "xtrue" ] && action=yes || action=no
322345
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_gtest=${action} ./contrib/test_jenkins.sh
@@ -331,9 +354,7 @@ steps:
331354
- name: Valgrind
332355
enable: ${do_valgrind}
333356
containerSelector:
334-
- "{name: 'skip-container'}"
335-
agentSelector:
336-
- "{nodeLabel: 'beni09'}"
357+
- "{name: 'vg'}"
337358
run: |
338359
[ "x${do_valgrind}" == "xtrue" ] && action=yes || action=no
339360
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_vg=${action} ./contrib/test_jenkins.sh
@@ -348,8 +369,6 @@ steps:
348369
enable: ${do_commit}
349370
containerSelector:
350371
- "{name: 'toolbox', category: 'tool', variant:1}"
351-
agentSelector:
352-
- "{nodeLabel: 'skip-agent'}"
353372
run: |
354373
[ "x${do_commit}" == "xtrue" ] && action=yes || action=no
355374
env WORKSPACE=$PWD TARGET=${flags} jenkins_test_commit=${action} ./contrib/test_jenkins.sh
@@ -373,8 +392,6 @@ steps:
373392
enable: ${do_blackduck}
374393
containerSelector:
375394
- "{name: 'blackduck', category:'tool', variant:1}"
376-
agentSelector:
377-
- "{nodeLabel: 'skip-agent'}"
378395
shell: action
379396
module: ngci
380397
run: NGCIBlackDuckScan
@@ -401,4 +418,4 @@ pipeline_stop:
401418
402419
failFast: false
403420

404-
taskName: '${flags}/${name}/${axis_index}'
421+
taskName: '${flags}/${arch}/${name}/${axis_index}'

contrib/jenkins_tests/globals.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,17 @@ function do_archive()
8282
# Otherwise, return error code.
8383
# $1 - module name
8484
#
85+
86+
function do_hugepages()
87+
{
88+
if [[ -f /.dockerenv && ! $(grep -q hugetlbfs /proc/mounts) ]]; then
89+
mkdir -p /mnt/huge
90+
mount -t hugetlbfs nodev /mnt/huge
91+
grep hugetlbfs /proc/mounts
92+
echo $?
93+
fi
94+
}
95+
8596
function do_module()
8697
{
8798
[ -z "$1" ] && return

contrib/jenkins_tests/gtest.sh

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
source $(dirname $0)/globals.sh
44

5+
# Fix hugepages for docker environments
6+
do_hugepages
7+
58
echo "Checking for gtest ..."
69

710
if [[ -z "${MANUAL_RUN}" ]]; then
@@ -11,11 +14,6 @@ if [[ -z "${MANUAL_RUN}" ]]; then
1114
exit 1
1215
fi
1316

14-
if [ $(command -v ibdev2netdev >/dev/null 2>&1 || echo $?) ]; then
15-
echo "[SKIP] ibdev2netdev tool does not exist"
16-
exit 1
17-
fi
18-
1917
cd $WORKSPACE
2018

2119
rm -rf $gtest_dir
@@ -36,9 +34,6 @@ else
3634
opt2=${MANUAL_RUN_ADAPTER:-'ConnectX-7'}
3735
fi
3836

39-
# Retrieve server/client addresses for the test.
40-
# $1 - [ib|eth|inet6] to select link type or empty to select the first found
41-
#
4237
function do_get_addrs()
4338
{
4439
gtest_ip_list="$(do_get_ip $1 $2)"
@@ -58,8 +53,13 @@ function do_get_addrs()
5853
echo $gtest_ip_list
5954
}
6055

61-
gtest_opt="--addr=$(do_get_addrs 'eth' ${opt2})"
62-
gtest_opt_ipv6="--addr=$(do_get_addrs 'inet6' ${opt2}) -r fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" # Remote - Dummy Address
56+
if [[ -f /.dockerenv ]] || [[ -f /run/.containerenv ]] || [[ -n "${KUBERNETES_SERVICE_HOST}" ]]; then
57+
gtest_opt="--addr=$(ip -f inet addr show net1 | awk '/inet / {print $2}' | cut -d/ -f1),$(ip -f inet addr show net2 | awk '/inet / {print $2}' | cut -d/ -f1)"
58+
gtest_opt_ipv6="--addr=$(ip -f inet6 addr show net1 | grep global | awk '/inet6 / {print $2}' | cut -d/ -f1),$(ip -f inet6 addr show net2 | grep global | awk '/inet6 / {print $2}' | cut -d/ -f1) -r fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" # Remote - Dummy Address
59+
else
60+
gtest_opt="--addr=$(do_get_addrs 'eth' ${opt2})"
61+
gtest_opt_ipv6="--addr=$(do_get_addrs 'inet6' ${opt2}) -r fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" # Remote - Dummy Address
62+
fi
6363

6464
set +eE
6565

0 commit comments

Comments
 (0)