Commit b05985e7 authored by Jaroslava Fiedlerova's avatar Jaroslava Fiedlerova

CI: Extend BuildRunTests() to accept configurable dockerfile and test options

- enable configurable dockerfile, runtime-opt, and ctest-opt parameters in
  the XML file for the Build_Run_Tests step
- pass runtime options to `docker run` to support ctest execution with CUDA
- allow additional ctest options for selective test execution and labeling
parent 84d9cd3c
...@@ -483,10 +483,10 @@ class Containerize(): ...@@ -483,10 +483,10 @@ class Containerize():
HTML.CreateHtmlTestRow('commit ' + tag, 'KO', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('commit ' + tag, 'KO', CONST.ALL_PROCESSES_OK)
return False return False
def BuildRunTests(self, ctx, node, HTML): def BuildRunTests(self, ctx, node, dockerfile, runtime_opt, ctest_opt, HTML):
lSourcePath = self.eNBSourceCodePath lSourcePath = self.eNBSourceCodePath
logging.debug('Building on server: ' + node) logging.debug('Building on server: ' + node)
cmd = cls_cmd.RemoteCmd(node) cmd = cls_cmd.getConnection(node)
cmd.cd(lSourcePath) cmd.cd(lSourcePath)
ret = cmd.run('hostnamectl') ret = cmd.run('hostnamectl')
...@@ -513,9 +513,9 @@ class Containerize(): ...@@ -513,9 +513,9 @@ class Containerize():
return False return False
# build ran-unittests image # build ran-unittests image
dockerfile = "ci-scripts/docker/Dockerfile.unittest.ubuntu"
logfile = f'{lSourcePath}/cmake_targets/log/unittest-build.log' logfile = f'{lSourcePath}/cmake_targets/log/unittest-build.log'
ret = cmd.run(f'docker build --progress=plain --tag ran-unittests:{baseTag} --file {dockerfile} . &> {logfile}') ret = cmd.run(f'docker build --progress=plain --tag ran-unittests:{baseTag} --file ci-scripts/{dockerfile} . &> {logfile}')
archiveArtifact(cmd, ctx, logfile) archiveArtifact(cmd, ctx, logfile)
if ret.returncode != 0: if ret.returncode != 0:
logging.error(f'Cannot build unit tests') logging.error(f'Cannot build unit tests')
...@@ -528,7 +528,7 @@ class Containerize(): ...@@ -528,7 +528,7 @@ class Containerize():
# I would like to run it with --rm and mount the ctest result directory to avoid 'docker cp' # I would like to run it with --rm and mount the ctest result directory to avoid 'docker cp'
# below, but then permissions are messed up and we can't remove the directory without sudo # below, but then permissions are messed up and we can't remove the directory without sudo
# making the next pipeline fail # making the next pipeline fail
ret = cmd.run(f'docker run -a STDOUT --workdir /oai-ran/build/ --env LD_LIBRARY_PATH=/oai-ran/build/ --name ran-unittests ran-unittests:{baseTag} ctest --no-label-summary -j$(nproc)') ret = cmd.run(f'docker run -a STDOUT {runtime_opt} --workdir /oai-ran/build/ --env LD_LIBRARY_PATH=/oai-ran/build/ --name ran-unittests ran-unittests:{baseTag} ctest --no-label-summary -j$(nproc) {ctest_opt}')
cmd.run('docker cp ran-unittests:/oai-ran/build/Testing/Temporary/LastTest.log .') cmd.run('docker cp ran-unittests:/oai-ran/build/Testing/Temporary/LastTest.log .')
archiveArtifact(cmd, ctx, f'{lSourcePath}/LastTest.log') archiveArtifact(cmd, ctx, f'{lSourcePath}/LastTest.log')
cmd.run('docker cp ran-unittests:/oai-ran/build/Testing/Temporary/LastTestsFailed.log .') cmd.run('docker cp ran-unittests:/oai-ran/build/Testing/Temporary/LastTestsFailed.log .')
......
...@@ -70,6 +70,9 @@ def ExecuteActionWithParam(action, ctx, node): ...@@ -70,6 +70,9 @@ def ExecuteActionWithParam(action, ctx, node):
RAN.Build_eNB_args=test.findtext('Build_eNB_args') RAN.Build_eNB_args=test.findtext('Build_eNB_args')
CONTAINERS.imageKind=test.findtext('kind') CONTAINERS.imageKind=test.findtext('kind')
proxy_commit = test.findtext('proxy_commit') proxy_commit = test.findtext('proxy_commit')
dockerfile = test.findtext('dockerfile') or ''
runtime_opt = test.findtext('runtime-opt') or ''
ctest_opt = test.findtext('ctest-opt') or ''
if proxy_commit is not None: if proxy_commit is not None:
CONTAINERS.proxyCommit = proxy_commit CONTAINERS.proxyCommit = proxy_commit
if action == 'Build_eNB': if action == 'Build_eNB':
...@@ -81,7 +84,7 @@ def ExecuteActionWithParam(action, ctx, node): ...@@ -81,7 +84,7 @@ def ExecuteActionWithParam(action, ctx, node):
elif action == 'Build_Cluster_Image': elif action == 'Build_Cluster_Image':
success = CLUSTER.BuildClusterImage(ctx, node, HTML) success = CLUSTER.BuildClusterImage(ctx, node, HTML)
elif action == 'Build_Run_Tests': elif action == 'Build_Run_Tests':
success = CONTAINERS.BuildRunTests(ctx, node, HTML) success = CONTAINERS.BuildRunTests(ctx, node, dockerfile, runtime_opt, ctest_opt, HTML)
elif action == 'Initialize_eNB': elif action == 'Initialize_eNB':
RAN.Initialize_eNB_args=test.findtext('Initialize_eNB_args') RAN.Initialize_eNB_args=test.findtext('Initialize_eNB_args')
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
<testCase> <testCase>
<class>Build_Run_Tests</class> <class>Build_Run_Tests</class>
<desc>Build and Run UnitTests</desc> <desc>Build and Run UnitTests</desc>
<dockerfile>docker/Dockerfile.unittest.ubuntu</dockerfile>
<node>obelix</node> <node>obelix</node>
</testCase> </testCase>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment