From 95e498c939be8ec098fdda262952fc00f4012baa Mon Sep 17 00:00:00 2001 From: saadrahim <44449863+saadrahim@users.noreply.github.com> Date: Thu, 7 May 2020 12:29:07 -0600 Subject: [PATCH] Restarting CI (#6) --- .jenkins/common.groovy | 37 +++++++++++++ .jenkins/precheckin.groovy | 81 +++++++++++++++++++++++++++++ docker/dockerfile-build-centos | 41 +++++++++++++++ docker/dockerfile-build-ubuntu-rock | 43 +++++++++++++++ docker/dockerfile-install-centos | 8 +++ docker/dockerfile-install-ubuntu | 8 +++ 6 files changed, 218 insertions(+) create mode 100644 .jenkins/common.groovy create mode 100644 .jenkins/precheckin.groovy create mode 100644 docker/dockerfile-build-centos create mode 100644 docker/dockerfile-build-ubuntu-rock create mode 100644 docker/dockerfile-install-centos create mode 100644 docker/dockerfile-install-ubuntu diff --git a/.jenkins/common.groovy b/.jenkins/common.groovy new file mode 100644 index 0000000000..5bf86a4765 --- /dev/null +++ b/.jenkins/common.groovy @@ -0,0 +1,37 @@ +// This file is for internal AMD use. +// If you are interested in running your own Jenkins, please raise a github issue for assistance. + +def runCompileCommand(platform, project, jobName) +{ + project.paths.construct_build_prefix() + + String hipclangArgs = jobName.contains('hipclang') ? '--hip-clang' : '' + def getRCCL = auxiliary.getLibrary('rccl',platform.jenkinsLabel,'develop') + + def command = """#!/usr/bin/env bash + set -x + ${getRCCL} + ${auxiliary.exitIfNotSuccess()} + cd ${project.paths.project_build_prefix} + ${project.paths.build_command} + ${auxiliary.exitIfNotSuccess()} + """ + + platform.runCommand(this,command) +} + +def runTestCommand (platform, project) +{ + String sudo = auxiliary.sudo(platform.jenkinsLabel) + + def command = """#!/usr/bin/env bash + set -x + cd ${project.paths.project_build_prefix} + python3 -m pytest -k "not MPI" --verbose --junitxml=./testreport.xml + """ + + platform.runCommand(this, command) + junit "${project.paths.project_build_prefix}/build/release/test/*.xml" +} + +return this diff --git a/.jenkins/precheckin.groovy b/.jenkins/precheckin.groovy new file mode 100644 index 0000000000..aae81c922e --- /dev/null +++ b/.jenkins/precheckin.groovy @@ -0,0 +1,81 @@ +#!/usr/bin/env groovy +// This shared library is available at https://github.com/ROCmSoftwarePlatform/rocJENKINS/ +@Library('rocJenkins@pong') _ + +// This is file for internal AMD use. +// If you are interested in running your own Jenkins, please raise a github issue for assistance. + +import com.amd.project.* +import com.amd.docker.* +import java.nio.file.Path + +def runCI = +{ + nodeDetails, jobName-> + + def prj = new rocProject('rccl-tests', 'PreCheckin') + prj.paths.build_command = './install.sh' + + // Define test architectures, optional rocm version argument is available + def nodes = new dockerNodes(nodeDetails, jobName, prj) + + boolean formatCheck = false + + def commonGroovy + + def compileCommand = + { + platform, project-> + + commonGroovy = load "${project.paths.project_src_prefix}/.jenkins/common.groovy" + commonGroovy.runCompileCommand(platform, project, jobName) + } + + def testCommand = + { + platform, project-> + + commonGroovy.runTestCommand(platform, project) + } + + buildProject(prj, formatCheck, nodes.dockerArray, compileCommand, testCommand, null) +} + +ci: { + String urlJobName = auxiliary.getTopJobName(env.BUILD_URL) + + def propertyList = ["compute-rocm-dkms-no-npi":[pipelineTriggers([cron('0 1 * * 0')])], + "compute-rocm-dkms-no-npi-hipclang":[pipelineTriggers([cron('0 1 * * 0')])], + "rocm-docker":[]] + propertyList = auxiliary.appendPropertyList(propertyList) + + def jobNameList = ["compute-rocm-dkms-no-npi":([ubuntu16:['rccl906']]), + "rocm-docker":([ubuntu16:['rccl906']])] + jobNameList = auxiliary.appendJobNameList(jobNameList) + jobNameList['compute-rocm-dkms-no-npi-hipclang'] = [ubuntu16:['rccl906']] + + propertyList.each + { + jobName, property-> + if (urlJobName == jobName) + properties(auxiliary.addCommonProperties(property)) + } + + jobNameList.each + { + jobName, nodeDetails-> + if (urlJobName == jobName) + stage(jobName) { + runCI(nodeDetails, jobName) + } + } + + // For url job names that are not listed by the jobNameList i.e. compute-rocm-dkms-no-npi-1901 + if(!jobNameList.keySet().contains(urlJobName)) + { + properties(auxiliary.addCommonProperties([pipelineTriggers([cron('0 1 * * *')])])) + stage(urlJobName) { + runCI([ubuntu16:['rccl906']], urlJobName) + } + } +} \ No newline at end of file diff --git a/docker/dockerfile-build-centos b/docker/dockerfile-build-centos new file mode 100644 index 0000000000..6e48134bfa --- /dev/null +++ b/docker/dockerfile-build-centos @@ -0,0 +1,41 @@ +# Copyright (c) 2019-2020 Advanced Micro Devices, Inc. All rights reserved. +# This Dockerfile provides a starting point for a ROCm installation of rccl + +# Parameters related to building rccl +ARG base_image + +FROM ${base_image} +LABEL maintainer="rccl-maintainer@amd.com" + +USER root +ARG user_uid + +# Install dependent packages +RUN yum install -y --nogpgcheck \ + sudo \ + chrpath \ + rock-dkms \ + rocm-cmake \ + centos-release-scl \ + devtoolset-7 \ + ca-certificates \ + git \ + cmake3 \ + make \ + libgomp \ + clang \ + clang-devel \ + gcc-c++ \ + pkgconfig \ + numactl-libs + +RUN echo '#!/bin/bash' | tee /etc/profile.d/devtoolset7.sh && echo \ + 'source scl_source enable devtoolset-7' >>/etc/profile.d/devtoolset7.sh + +# docker pipeline runs containers with particular uid +# create a jenkins user with this specific uid so it can use sudo priviledges +# Grant any member of sudo group password-less sudo privileges +RUN useradd --create-home -u ${user_uid} -o -G video --shell /bin/bash jenkins && \ + echo '%video ALL=(ALL) NOPASSWD:ALL' | tee /etc/sudoers.d/sudo-nopasswd && \ + chmod 400 /etc/sudoers.d/sudo-nopasswd + diff --git a/docker/dockerfile-build-ubuntu-rock b/docker/dockerfile-build-ubuntu-rock new file mode 100644 index 0000000000..f7e17d500a --- /dev/null +++ b/docker/dockerfile-build-ubuntu-rock @@ -0,0 +1,43 @@ +# Copyright (c) 2019-2020 Advanced Micro Devices, Inc. All rights reserved. +# Parameters related to building rccl +ARG base_image + +FROM ${base_image} +LABEL maintainer="rccl-maintainer@amd.com" + +ARG user_uid + +# Install dependent packages +# Dependencies: +# * hcc-config.cmake: pkg-config +# * tensile: python2.7, python-yaml +# * rocblas-test: gfortran, googletest +# * rocblas-bench: libboost-program-options-dev +# * libhsakmt.so: libnuma1 +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + rock-dkms \ + sudo \ + ca-certificates \ + chrpath \ + git \ + make \ + cmake \ + pkg-config \ + python2.7 \ + python-yaml \ + python3-pytest \ + rocm-cmake \ + libboost-program-options-dev \ + libnuma1 \ + libomp-dev \ + && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# docker pipeline runs containers with particular uid +# create a jenkins user with this specific uid so it can use sudo priviledges +# Grant any member of sudo group password-less sudo privileges +RUN useradd --create-home -u ${user_uid} -o -G video --shell /bin/bash jenkins && \ + mkdir -p /etc/sudoers.d/ && \ + echo '%video ALL=(ALL) NOPASSWD:ALL' | tee /etc/sudoers.d/sudo-nopasswd + diff --git a/docker/dockerfile-install-centos b/docker/dockerfile-install-centos new file mode 100644 index 0000000000..2ccd6337f6 --- /dev/null +++ b/docker/dockerfile-install-centos @@ -0,0 +1,8 @@ +# Copyright (c) 2019-2020 Advanced Micro Devices, Inc. All rights reserved. +# Parameters related to building rccl +ARG base_image + +FROM ${base_image} +LABEL maintainer="rccl-maintainer@amd.com" + +#empty for now diff --git a/docker/dockerfile-install-ubuntu b/docker/dockerfile-install-ubuntu new file mode 100644 index 0000000000..d0b70e37c1 --- /dev/null +++ b/docker/dockerfile-install-ubuntu @@ -0,0 +1,8 @@ +# Copyright (c) 2019-2020 Advanced Micro Devices, Inc. All rights reserved. +# Parameters related to building rccl +ARG base_image + +FROM ${base_image} +LABEL maintainer="rccl-maintainer@amd.com" + +#empty for now