diff --git a/.dockerignore b/.dockerignore index 9ce4213..44d841b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,6 @@ .git* .idea/ dist/ -Dockerfile +output/ +node_modules/ +Dockerfile* diff --git a/Dockerfile.jenkins b/Dockerfile.jenkins new file mode 100644 index 0000000..531b27e --- /dev/null +++ b/Dockerfile.jenkins @@ -0,0 +1,5 @@ +FROM node:13.10-alpine +WORKDIR /app +RUN apk add --no-cache chromium +ADD . /app +ENTRYPOINT npm install && /app/node_modules/.bin/ng test --watch=false --progress=false --browsers=ChomeHeadlessCI diff --git a/Jenkinsfile b/Jenkinsfile index 48c50a8..eccd957 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,20 +1,32 @@ pipeline { - agent { docker { image 'node:13.10-alpine' } } - stages { - stage('setup') { - steps { - sh 'npm install' - } - } - stage('build') { - steps { - sh 'node_modules/.bin/ng build --prod' - } - } - stage('lint') { - steps { - sh 'node_modules/.bin/ng lint' - } - } + agent { + dockerfile { + filename 'Dockerfile.jenkins' + dir '.' + args '-e CHROME_BIN=/bin/chromium -e NG_CLI_ANALYTICS="false"' } + } + stages { + stage('setup') { + steps { + sh 'npm install' + } + } + stage('build') { + steps { + sh 'node_modules/.bin/ng build --prod' + } + } + stage('lint') { + steps { + sh 'node_modules/.bin/ng lint' + } + } + stage('test') { + steps { + sh 'node_modules/.bin/ng test --watch=false --progress=false --browsers=ChomeHeadlessCI' + } + } + } } + diff --git a/package-lock.json b/package-lock.json index 5e12a1f..e81e08f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2690,6 +2690,16 @@ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", @@ -5050,6 +5060,13 @@ } } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -6843,6 +6860,24 @@ "karma-jasmine": "^1.0.2" } }, + "karma-junit-reporter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-2.0.1.tgz", + "integrity": "sha512-VtcGfE0JE4OE1wn0LK8xxDKaTP7slN8DO3I+4xg6gAi1IoAHAXOJ1V9G/y45Xg6sxdxPOR3THCFtDlAfBo9Afw==", + "dev": true, + "requires": { + "path-is-absolute": "^1.0.0", + "xmlbuilder": "12.0.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-12.0.0.tgz", + "integrity": "sha512-lMo8DJ8u6JRWp0/Y4XLa/atVDr75H9litKlb2E5j3V3MesoL50EBgZDWoLT3F/LztVnG67GjPXLZpqcky/UMnQ==", + "dev": true + } + } + }, "karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", @@ -7624,6 +7659,13 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -12075,6 +12117,8 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", "node-pre-gyp": "*" }, "dependencies": { @@ -12962,6 +13006,8 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", "node-pre-gyp": "*" }, "dependencies": { diff --git a/package.json b/package.json index bfd2650..5b28895 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "karma-coverage-istanbul-reporter": "^2.0.6", "karma-jasmine": "~1.1.2", "karma-jasmine-html-reporter": "^0.2.2", + "karma-junit-reporter": "^2.0.1", "protractor": "^5.4.3", "ts-node": "~7.0.0", "tslint": "~5.11.0", diff --git a/src/karma.conf.js b/src/karma.conf.js index b6e0042..d513820 100644 --- a/src/karma.conf.js +++ b/src/karma.conf.js @@ -10,6 +10,7 @@ module.exports = function (config) { require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), require('karma-coverage-istanbul-reporter'), + require('karma-junit-reporter'), require('@angular-devkit/build-angular/plugins/karma') ], client: { @@ -20,12 +21,16 @@ module.exports = function (config) { reports: ['html', 'lcovonly'], fixWebpackSourcePaths: true }, - reporters: ['progress', 'kjhtml'], + reporters: ['progress', 'kjhtml', 'junit'], port: 9876, colors: true, logLevel: config.LOG_INFO, autoWatch: true, browsers: ['Chrome'], - singleRun: false + singleRun: false, + junitReporter: { + outputDir: 'junit-report', + useBrowserName: true + } }); -}; \ No newline at end of file +};