From 82fd27d6a3abbb090c52ad3a61abfbb4b91cebf4 Mon Sep 17 00:00:00 2001 From: Zakharov <maxim.m.zakharov@intel.com> Date: Sun, 19 Sep 2021 13:01:24 +0300 Subject: [PATCH] Added Jenkins example and doc section --- .reuse/dep5 | 4 +++ Jenkinsfile | 47 +++++++++++++++++++++++++++++++ README.rst | 38 ++++++++++++++++++++++++- img/jenkins_pipeline_example.png | Bin 0 -> 18475 bytes 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 Jenkinsfile create mode 100644 img/jenkins_pipeline_example.png diff --git a/.reuse/dep5 b/.reuse/dep5 index 05f6841..61959fd 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -6,3 +6,7 @@ Source: Files: doc/* Copyright: 2020 Intel Corporation License: CC-BY-4.0 + +Files: img/* +Copyright: 2021 Intel Corporation +License: CC-BY-4.0 diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..af8dd51 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,47 @@ +// SPDX-FileCopyrightText: 2021 Intel Corporation +// +// SPDX-License-Identifier: MIT + +def SAMPLES_REPO = "https://github.com/oneapi-src/oneAPI-samples.git" +def SAMPLES_TAG = "2021.3.0" + +pipeline { + agent { docker { image 'intel/oneapi-hpckit' } } + stages { + stage('checkout samples') { + steps { + dir("oneAPI-samples") { + checkout scm: [$class: 'GitSCM', + userRemoteConfigs: [[url: "${SAMPLES_REPO}"]], + branches: [[name: "${SAMPLES_TAG}"]]], + poll: false + } + } + } + stage ('build') { + parallel { + stage('build DPC++') { + steps { + dir ("oneAPI-samples/DirectProgramming/DPC++/DenseLinearAlgebra/vector-add") { + sh "make all && make run" + } + } + } + stage('build C++') { + steps { + dir ("oneAPI-samples/DirectProgramming/C++/CompilerInfrastructure/Intrinsics") { + sh "make && make run && make clean && make CC='icx -msse3' && make run" + } + } + } + stage('build Fortran') { + steps { + dir ("oneAPI-samples/DirectProgramming/Fortran/CombinationalLogic/openmp-primes") { + sh "make && make run && make clean && make FC=ifx && make run" + } + } + } + } + } + } +} diff --git a/README.rst b/README.rst index 2cedd3b..2af6245 100644 --- a/README.rst +++ b/README.rst @@ -23,7 +23,7 @@ Install methods Intel installer, apt, dnf, docker container, CI cache =============== =========================================== The config files are intended to be samples that demonstrate a wide -variety of use cases. For you own use, select the parts that you +variety of use cases. For your own use, select the parts that you need. You may also want to customize the set of compilers and libraries that are installed. See `component listings`_ for the component names to use in the scripts. @@ -56,6 +56,7 @@ Circle |c| |c| |c| |c| |c| |x| AppVeyor |c| |x| |x| |c| |c| |c| GitLab |c| |c| |x| |c| |c| |x| Azure |c| |c| |c| |c| |c| |c| +Jenkins |x| |x| |c| |x| |x| |x| ======== ========= ========= ============ ===== ======= =========== @@ -66,6 +67,36 @@ Some of the oneAPI components are large and can take a few minutes to download install. To accelerate install, we demonstrate the use of caching. + +Using oneAPI in Jenkins pipelines +================================= + +There are multiple ways to add oneAPI tools to a Jenkins pipeline: + +#. setup the tools on Jenkins agent directly, or create custom + container with the tools you need + + * refer to `IntelĀ® oneAPI Toolkits Installation Guides`_ for + details + * explore installation scripts in this repo for examples +#. use optimized containers from `Intel oneContainer Portal`_ + +The Jenkinsfile in this repo demonstrates building DPC++, C++ and +Fortran samples in intel/oneapi-hpckit container in Jenkins. + +To give it a try: + +#. Follow `Jenkins Install Guide`_ to setup Jenkins, or use your + existing setup. +#. Install Docker and Docker Pipeline plugins. +#. Create new pipeline for this repository using + New Item -> Pipeline. +#. Build the pipeline. +#. The result will look like this in Blue Ocean. + +|Jenkins Pipeline Example| + + See also ======== @@ -102,6 +133,9 @@ See `security guidelines`_. .. _contributing: CONTRIBUTING.rst .. _`security guidelines`: https://www.intel.com/content/www/us/en/security-center/default.html .. _`Enabling Performance Profiling in GitLab* CI`: https://software.intel.com/content/www/us/en/develop/documentation/vtune-cookbook/top/configuration-recipes/performance-profiling-in-gitlab-ci.html +.. _`IntelĀ® oneAPI Toolkits Installation Guides`: https://software.intel.com/content/www/us/en/develop/articles/installation-guide-for-intel-oneapi-toolkits.html +.. _`Jenkins Install Guide`: https://www.jenkins.io/doc/book/installing/ +.. _`Intel oneContainer Portal`: https://software.intel.com/content/www/us/en/develop/tools/containers/get-started.html .. _`.github/workflows/build_all.yml`: .github/workflows/build_all.yml .. _`.circleci/config.yml`: .circleci/config.yml @@ -127,6 +161,8 @@ See `security guidelines`_. .. |ListComponentsStatus| image:: https://github.com/oneapi-src/oneapi-ci/workflows/list_components/badge.svg :target: https://github.com/oneapi-src/oneapi-ci/actions?query=workflow%3Alist_components :alt: Build status +.. |Jenkins Pipeline Example| image:: img/jenkins_pipeline_example.png + :alt: Jenkins Pipeline Example .. |r| unicode:: U+000AE .. |c| unicode:: U+2714 diff --git a/img/jenkins_pipeline_example.png b/img/jenkins_pipeline_example.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f6bb59498cf67258e37422fb5daa6d02be5d6d GIT binary patch literal 18475 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 NgQu&X%Q~loCIH44#VY^+ literal 0 HcmV?d00001 -- GitLab