From 5e51056615852df9bd2179642096146b28d4303c Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Mon, 17 Jun 2019 15:23:39 +0200 Subject: [PATCH 01/10] add config for selenium grid & pipeline step --- karma-ci.conf.js | 21 ++++++++++++++++++++- package.json | 5 ++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/karma-ci.conf.js b/karma-ci.conf.js index 138c5ed0b..14ff3ebed 100644 --- a/karma-ci.conf.js +++ b/karma-ci.conf.js @@ -28,8 +28,27 @@ module.exports = function(config) { } } }, + // https://github.com/karma-runner/karma-junit-reporter#configuration + junitReporter: { + outputDir: "reports", + outputFile: "TEST-qunit.xml", + suite: "", + useBrowserName: true + }, + customLaunchers: { + "RemoteChrome": { + base: "WebDriver", + config: { + hostname: "localhost", + port: 4444 + }, + browserName: "chrome", + name: "Karma", + pseudoActivityInterval: 30000 + } + }, - reporters: ["progress", "coverage"], + reporters: ["progress", "coverage", "junit"], browsers: ["ChromeHeadless"], diff --git a/package.json b/package.json index e9719b7eb..c10cb0c68 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "start": "ui5 serve", "lint": "eslint webapp", - "karma": "karma start", + "karma": "karma start karma-ci.conf.js --browsers RemoteChrome", + "karma-local": "karma start", "karma-ci": "karma start karma-ci.conf.js", "watch": "npm run karma", "test": "npm run lint && rimraf coverage && npm run karma-ci", @@ -23,7 +24,9 @@ "karma": "^4.0.1", "karma-chrome-launcher": "^2.2.0", "karma-coverage": "^1.1.2", + "karma-junit-reporter": "^1.2.0", "karma-ui5": "^1.0.0", + "karma-webdriver-launcher": "^1.0.5", "rimraf": "^2.6.2" } } From 55b077d26332e089293133f54983a33353730216 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Mon, 17 Jun 2019 15:36:01 +0200 Subject: [PATCH 02/10] add pipeline definition --- Jenkinsfile | 16 ++++++++++++++++ jenkins.yml | 12 ++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 Jenkinsfile create mode 100644 jenkins.yml diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 000000000..5cd1e8ea3 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,16 @@ +@Library(['piper-lib-os']) _ + +pipeline { + agent any + stages { + stage('Init'){ + checkout scm + setupCommonPipelineEnvironment script: this + } + stage('Test'){ + karmaExecuteTests script: this + + archiveArtifacts '**/*' + } + } +} diff --git a/jenkins.yml b/jenkins.yml new file mode 100644 index 000000000..c5862cd1e --- /dev/null +++ b/jenkins.yml @@ -0,0 +1,12 @@ +jenkins: + numExecutors: 10 +unclassified: + globallibraries: + libraries: + - defaultVersion: "master" + name: "piper-lib-os" + retriever: + modernSCM: + scm: + git: + remote: "https://github.com/SAP/jenkins-library.git " From ed19093e3343622c599c9296eb64c2d77808106c Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 18 Jun 2019 10:57:12 +0200 Subject: [PATCH 03/10] provide docker compose for local test execution --- .editorconfig | 2 +- Jenkinsfile | 3 +-- docker-compose.yml | 22 ++++++++++++++++++++++ karma-ci.conf.js | 33 +++++++++++++++++++++++++++------ package.json | 3 +-- 5 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 docker-compose.yml diff --git a/.editorconfig b/.editorconfig index a06c1db68..102475698 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,7 +3,7 @@ root = true [*] -indent_style = tab +indent_style = space end_of_line = lf charset = utf-8 trim_trailing_whitespace = true diff --git a/Jenkinsfile b/Jenkinsfile index 5cd1e8ea3..5b44f2d0c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -8,8 +8,7 @@ pipeline { setupCommonPipelineEnvironment script: this } stage('Test'){ - karmaExecuteTests script: this - + karmaExecuteTests script: this, runCommand: 'npm run karma-ci' archiveArtifacts '**/*' } } diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..63ded1d88 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,22 @@ +version: '3' +services: + karma: + image: node:8-stretch + user: node + working_dir: /home/node/app + volumes: + - .:/home/node/app + command: + - /bin/sh + - -c + - | + /usr/local/bin/npm install + /usr/local/bin/npm run karma-ci + depends_on: + - "selenium" + selenium: + image: selenium/standalone-chrome + ports: + - "4444:4444" + healthcheck: + test: "curl -sSL 'http://localhost:4444/wd/hub/status' 2>&1 | jq -r '.value.ready' 2>&1 | grep 'true' >/dev/null" diff --git a/karma-ci.conf.js b/karma-ci.conf.js index 14ff3ebed..a205c5458 100644 --- a/karma-ci.conf.js +++ b/karma-ci.conf.js @@ -1,5 +1,5 @@ module.exports = function(config) { - "use strict"; + "use strict"; require("./karma.conf")(config); config.set({ @@ -34,12 +34,12 @@ module.exports = function(config) { outputFile: "TEST-qunit.xml", suite: "", useBrowserName: true - }, + }, customLaunchers: { - "RemoteChrome": { + "ChromeRemote": { base: "WebDriver", config: { - hostname: "localhost", + hostname: "localhost", port: 4444 }, browserName: "chrome", @@ -50,9 +50,30 @@ module.exports = function(config) { reporters: ["progress", "coverage", "junit"], - browsers: ["ChromeHeadless"], + browsers: ["ChromeRemote"], singleRun: true - }); + }); + + if (process.env.ON_K8S == true){ + console.log("Running with Kubernetes setup.") + } else { + console.log("Running with Docker setup.") + config.set({ + hostname: "karma", + customLaunchers: { + "ChromeRemote": { + base: "WebDriver", + config: { + hostname: "selenium", + port: 4444 + }, + browserName: "chrome", + name: "Karma", + pseudoActivityInterval: 30000 + }, + } + }); + } }; diff --git a/package.json b/package.json index c10cb0c68..4eab682f2 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,7 @@ "scripts": { "start": "ui5 serve", "lint": "eslint webapp", - "karma": "karma start karma-ci.conf.js --browsers RemoteChrome", - "karma-local": "karma start", + "karma": "karma start", "karma-ci": "karma start karma-ci.conf.js", "watch": "npm run karma", "test": "npm run lint && rimraf coverage && npm run karma-ci", From 488530caeff492d5fd99daee7126318d91c490a2 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 18 Jun 2019 12:37:57 +0200 Subject: [PATCH 04/10] simplify config --- karma-ci.conf.js | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/karma-ci.conf.js b/karma-ci.conf.js index a205c5458..7c437db35 100644 --- a/karma-ci.conf.js +++ b/karma-ci.conf.js @@ -60,20 +60,7 @@ module.exports = function(config) { console.log("Running with Kubernetes setup.") } else { console.log("Running with Docker setup.") - config.set({ - hostname: "karma", - customLaunchers: { - "ChromeRemote": { - base: "WebDriver", - config: { - hostname: "selenium", - port: 4444 - }, - browserName: "chrome", - name: "Karma", - pseudoActivityInterval: 30000 - }, - } - }); + config.hostname = 'karma' + config.customLaunchers.ChromeRemote.config.hostname = 'selenium' } }; From 6423bda8e881417e7e7c73a2ee98dee37ba0e3d6 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 18 Jun 2019 13:06:59 +0200 Subject: [PATCH 05/10] ignore test report files --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 45c11c5f7..667bb3e79 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,9 @@ lib-cov # Coverage directory used by tools like istanbul coverage +# Reports directory used for unit test reports +reports/ + # nyc test coverage .nyc_output From 1f7f2739cdcedba26140b2db56cd075254b12118 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 18 Jun 2019 13:20:24 +0200 Subject: [PATCH 06/10] move compose file to test folder --- package.json | 1 + docker-compose.yml => webapp/test/docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) rename docker-compose.yml => webapp/test/docker-compose.yml (94%) diff --git a/package.json b/package.json index 4eab682f2..2e12341d3 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "lint": "eslint webapp", "karma": "karma start", "karma-ci": "karma start karma-ci.conf.js", + "karma-compose": "docker-compose --file webapp/test/docker-compose.yml up", "watch": "npm run karma", "test": "npm run lint && rimraf coverage && npm run karma-ci", "build": "rimraf dist && ui5 build --a" diff --git a/docker-compose.yml b/webapp/test/docker-compose.yml similarity index 94% rename from docker-compose.yml rename to webapp/test/docker-compose.yml index 63ded1d88..ec9f2cb91 100644 --- a/docker-compose.yml +++ b/webapp/test/docker-compose.yml @@ -5,7 +5,7 @@ services: user: node working_dir: /home/node/app volumes: - - .:/home/node/app + - ../..:/home/node/app command: - /bin/sh - -c From cf195cb12b49293acd3d8979143462a6c11cf6b9 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 18 Jun 2019 13:27:28 +0200 Subject: [PATCH 07/10] stop cluster on completed test run --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2e12341d3..0736b6071 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "lint": "eslint webapp", "karma": "karma start", "karma-ci": "karma start karma-ci.conf.js", - "karma-compose": "docker-compose --file webapp/test/docker-compose.yml up", + "karma-compose": "docker-compose --file webapp/test/docker-compose.yml up --abort-on-container-exit", "watch": "npm run karma", "test": "npm run lint && rimraf coverage && npm run karma-ci", "build": "rimraf dist && ui5 build --a" From 4c3396017c9d7520ffefd5305e518e408887ad4e Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 18 Jun 2019 13:41:29 +0200 Subject: [PATCH 08/10] Update docker-compose.yml --- webapp/test/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/test/docker-compose.yml b/webapp/test/docker-compose.yml index ec9f2cb91..dac1e88be 100644 --- a/webapp/test/docker-compose.yml +++ b/webapp/test/docker-compose.yml @@ -13,7 +13,7 @@ services: /usr/local/bin/npm install /usr/local/bin/npm run karma-ci depends_on: - - "selenium" + - selenium selenium: image: selenium/standalone-chrome ports: From 5ff372b68544c81bd37c9268b7ebb95f5a204409 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 18 Jun 2019 16:27:49 +0200 Subject: [PATCH 09/10] correct library url Co-Authored-By: Oliver Feldmann --- jenkins.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jenkins.yml b/jenkins.yml index c5862cd1e..194afa238 100644 --- a/jenkins.yml +++ b/jenkins.yml @@ -9,4 +9,4 @@ unclassified: modernSCM: scm: git: - remote: "https://github.com/SAP/jenkins-library.git " + remote: "https://github.com/SAP/jenkins-library.git" From aaa8a70114ae274ed6bb0f4818c90e08aa4250cd Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 18 Jun 2019 17:14:46 +0200 Subject: [PATCH 10/10] fix Jenkinsfile --- .pipeline/config.yml | 6 ++++++ Jenkinsfile | 20 +++++++++----------- package.json | 3 ++- 3 files changed, 17 insertions(+), 12 deletions(-) create mode 100644 .pipeline/config.yml diff --git a/.pipeline/config.yml b/.pipeline/config.yml new file mode 100644 index 000000000..2006a1f51 --- /dev/null +++ b/.pipeline/config.yml @@ -0,0 +1,6 @@ +steps: + dockerExecute: + dockerPullImage: false + sidecarPullImage: false + karmaExecuteTests: + runCommand: 'npm run karma-ci' diff --git a/Jenkinsfile b/Jenkinsfile index 5b44f2d0c..75d1df88d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,15 +1,13 @@ @Library(['piper-lib-os']) _ pipeline { - agent any - stages { - stage('Init'){ - checkout scm - setupCommonPipelineEnvironment script: this - } - stage('Test'){ - karmaExecuteTests script: this, runCommand: 'npm run karma-ci' - archiveArtifacts '**/*' - } - } + agent any + stages { + stage('Test'){ + steps { + setupCommonPipelineEnvironment script: this + karmaExecuteTests script: this + } + } + } } diff --git a/package.json b/package.json index 0736b6071..c001accda 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "karma-compose": "docker-compose --file webapp/test/docker-compose.yml up --abort-on-container-exit", "watch": "npm run karma", "test": "npm run lint && rimraf coverage && npm run karma-ci", - "build": "rimraf dist && ui5 build --a" + "build": "rimraf dist && ui5 build --a", + "jenkinsfile": "docker run --rm -v /tmp -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):/workspace -e CASC_JENKINS_CONFIG=/workspace/jenkins.yml ppiper/jenkinsfile-runner" }, "dependencies": { "@openui5/sap.m": "^1.60.0",