Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
f06da91
Added job configuration for Jenkins pipelines
delvedor Jul 16, 2019
d5c2dfb
Added job name
delvedor Jul 17, 2019
9d1bc16
Merge branch 'master' into jenkins-pipelines
delvedor Jul 22, 2019
f9c236f
Added basic Jenkinsfile
delvedor Jul 22, 2019
bd32b66
Updated Jenkinsfile
delvedor Jul 22, 2019
8f59d7b
Updated Jenkinsfile
delvedor Jul 22, 2019
9baf56a
Updated Jenkinsfile
delvedor Jul 22, 2019
166ec82
[wip] Move from docker agent to labels (#924)
v1v Jul 26, 2019
f77a2d5
Updated Jenkinsfile
delvedor Jul 26, 2019
d6eeecb
Added env variables and stash dependencies
delvedor Jul 26, 2019
cdaab03
Debug ls
delvedor Jul 26, 2019
d42531c
Debug ls
delvedor Jul 26, 2019
ef1e4b1
Updated dir handling
delvedor Jul 26, 2019
b3ef2e0
Added unit test step
delvedor Jul 26, 2019
48527b4
Updated agent handling and moved environment settings
delvedor Jul 26, 2019
1973432
Updated es docker scripts
delvedor Jul 26, 2019
859d42e
Added oss integration step
delvedor Jul 26, 2019
0ac3d24
Refactor oss integration test step
delvedor Jul 26, 2019
c82418f
Debug logs
delvedor Jul 26, 2019
aeb6b0f
Moved stash outside of script block
delvedor Jul 26, 2019
86fb91d
Updated oss integration test script
delvedor Jul 26, 2019
4256f67
Merge branch 'master' into jenkins-pipelines
delvedor Jul 26, 2019
1114b04
Debug logs
delvedor Jul 26, 2019
dd22f27
Updated path
delvedor Jul 26, 2019
595ca63
Try with npm script
delvedor Jul 29, 2019
9874648
Use BASE_DIR
delvedor Jul 29, 2019
2bc6416
More debug checks
delvedor Jul 29, 2019
96a5395
Test
delvedor Jul 29, 2019
ba5e7ef
Fix
delvedor Jul 29, 2019
5a422a7
Updated elasticsearch script and Jenkinsfile
delvedor Jul 29, 2019
a46bac5
Use the correct context
delvedor Jul 29, 2019
affd927
Fixes
delvedor Jul 29, 2019
1898e34
Use elastic network
delvedor Jul 29, 2019
2b5f47b
Use root user
delvedor Jul 29, 2019
cc4e3cf
Add git
delvedor Jul 29, 2019
52032d1
Fix script
delvedor Jul 29, 2019
1efdc84
Comment stage
delvedor Jul 29, 2019
2a9e350
Reenable stage
delvedor Jul 29, 2019
7df6cbe
Run the script as root
delvedor Jul 29, 2019
d20297b
Merge branch 'master' into jenkins-pipelines
delvedor Jul 29, 2019
3755c7d
Added xpack stage
delvedor Jul 29, 2019
745a624
Use a custom Dockerfile
delvedor Jul 30, 2019
1597c3f
Use a folder
delvedor Jul 30, 2019
8037e19
Use alpine version
delvedor Jul 30, 2019
1e0296a
Fix host
delvedor Jul 30, 2019
653beb6
Updated elasticsearch docker scripts
delvedor Jul 30, 2019
8aa1251
Move nodejsversion to its own variable
delvedor Jul 30, 2019
868a54f
Run unit test in parallel
delvedor Jul 30, 2019
3f8f284
Use a custom agent for the parallel build
delvedor Jul 30, 2019
77cf228
Use env variable
delvedor Jul 31, 2019
46fecae
Fix string
delvedor Jul 31, 2019
7b016a9
Paralellize integration test
delvedor Jul 31, 2019
80ae2b0
Comment out integration test
delvedor Jul 31, 2019
3c5fcec
Added docker retry and reenabled integration test
delvedor Jul 31, 2019
43ebff7
Fix scope
delvedor Jul 31, 2019
c9905c6
Added retry also for es docker
delvedor Jul 31, 2019
2387a7f
Reorganized environment variables
delvedor Jul 31, 2019
0d7c7a4
Use a single function for building docker containers
delvedor Jul 31, 2019
1a27aaf
Use a function to define parallel jobs
delvedor Jul 31, 2019
c39c5b4
Refactored buildUnitTest
delvedor Jul 31, 2019
e388c0c
Added test reporting
delvedor Jul 31, 2019
aadfa15
Use xunit reporter
delvedor Jul 31, 2019
588a553
Use junit reporter
delvedor Jul 31, 2019
5f8eeb8
Merge branch 'master' into jenkins-pipelines
delvedor Aug 1, 2019
4bfd37b
Updated reporting
delvedor Aug 1, 2019
c181e02
Pull latest image from docker hub
delvedor Aug 1, 2019
a09dfce
Added withGithubNotify
delvedor Aug 1, 2019
761bf65
Randomize nodejs default version
delvedor Aug 7, 2019
4c3ab31
Fix definition
delvedor Aug 7, 2019
975797c
Moved Jenkinsfile
delvedor Aug 7, 2019
c2b9b69
Added daily trigger
delvedor Aug 7, 2019
eb09cb3
Use apm library
delvedor Aug 8, 2019
b332dc8
Added comment
delvedor Aug 9, 2019
b601c77
Added packer cache
delvedor Aug 9, 2019
f774243
Merge branch 'master' into jenkins-pipelines
delvedor Aug 9, 2019
2b88f79
Updated multiline script and github notify steps
delvedor Aug 9, 2019
76fbd29
Updated job definitions
delvedor Aug 9, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
224 changes: 224 additions & 0 deletions .ci/Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
#!/usr/bin/env groovy

@Library('apm@current') _

def NODE_JS_VERSIONS = [8,10,12]
def nodeJsVersion = NODE_JS_VERSIONS[randomNumber(min: 0, max:2)]

pipeline {
agent {
label 'docker && immutable'
}

environment {
REPO = 'elasticsearch-js'
BASE_DIR = "src/github.com/elastic/${env.REPO}"
NODE_JS_DEFAULT_VERSION = "${nodeJsVersion}"
NODE_JS_VERSIONS = "${NODE_JS_VERSIONS.join(',')}"
HOME = "${env.WORKSPACE}"
npm_config_cache = 'npm-cache'
}

options {
timeout(time: 1, unit: 'HOURS')
buildDiscarder(logRotator(numToKeepStr: '20', artifactNumToKeepStr: '20', daysToKeepStr: '30'))
timestamps()
ansiColor('xterm')
disableResume()
durabilityHint('PERFORMANCE_OPTIMIZED')
}

triggers {
issueCommentTrigger('(?i).*(?:jenkins\\W+)?run\\W+(?:the\\W+)?tests(?:\\W+please)?.*')
// changeRequest() will return true in case of a commit or a pr
// we will have a daily cron job only ofr branches that don't have an active pr
cron(changeRequest() ? '' : '@daily')
}

stages {
stage('Checkout') {
options { skipDefaultCheckout() }
steps {
deleteDir()
gitCheckout(basedir: "${BASE_DIR}", githubNotifyFirstTimeContributor: false)
stash allowEmpty: true, name: 'source', useDefaultExcludes: false
}
}

stage('Install dependencies') {
options { skipDefaultCheckout() }
steps {
deleteDir()
unstash 'source'
script {
buildDockerImage(image: "node:${env.NODE_JS_DEFAULT_VERSION}-alpine").inside(){
dir("${BASE_DIR}"){
sh(label: 'System info', script: 'node --version; npm --version')
sh(label: 'Install dependencies', script: 'npm install')
}
}
}
stash allowEmpty: true, name: 'source-dependencies', useDefaultExcludes: false
}
}

stage('License check') {
options { skipDefaultCheckout() }
steps {
withGithubNotify(context: 'License check') {
deleteDir()
unstash 'source-dependencies'
script {
buildDockerImage(image: "node:${env.NODE_JS_DEFAULT_VERSION}-alpine").inside(){
dir("${BASE_DIR}"){
sh(label: 'Check production dependencies licenses', script: 'npm run license-checker')
}
}
}
}
}
}

stage('Linter') {
options { skipDefaultCheckout() }
steps {
withGithubNotify(context: 'Linter') {
deleteDir()
unstash 'source-dependencies'
script {
buildDockerImage(image: "node:${env.NODE_JS_DEFAULT_VERSION}-alpine").inside(){
dir("${BASE_DIR}"){
sh(label: 'Lint code with standardjs', script: 'npm run lint')
}
}
}
}
}
}

stage('Unit test') {
failFast true
options { skipDefaultCheckout() }
steps {
withGithubNotify(context: 'Unit test') {
script {
def versions = env.NODE_JS_VERSIONS.split(',')
def parallelTasks = [:]
versions.each{ version ->
parallelTasks["Node.js v${version}"] = buildUnitTest(version: version)
}
parallel(parallelTasks)
}
}
}
}

stage('Integration test') {
failFast true
options { skipDefaultCheckout() }
parallel {
stage('OSS') {
agent { label 'docker && immutable' }
options { skipDefaultCheckout() }
environment {
TEST_ES_SERVER = 'http://elasticsearch:9200'
}
steps {
withGithubNotify(context: 'Integration test OSS') {
deleteDir()
unstash 'source-dependencies'
dir("${BASE_DIR}"){
// Sometimes the docker registry fails and has random timeouts
// this block will retry a doker image 3 times before to fail.
retry(3) {
sleep randomNumber(min: 5, max: 10)
sh(label: 'Start Elasticsearch', script: './scripts/es-docker.sh --detach')
}
}
script {
buildDockerImage(fromDockerfile: true).inside('--network=elastic'){
dir("${BASE_DIR}"){
sh(label: 'Integration test', script: 'npm run test:integration | tee test-integration.tap')
sh(label: 'Generating test reporting', script: './node_modules/.bin/tap-mocha-reporter xunit < test-integration.tap > junit-integration.xml')
}
}
}
sh(label: 'Stop Elasticsearch', script: 'docker kill $(docker ps -q)')
junit(allowEmptyResults: true, keepLongStdio: true, testResults: "${BASE_DIR}/**/junit-*.xml")
}
}
}

stage('xPack') {
agent { label 'docker && immutable' }
options { skipDefaultCheckout() }
environment {
TEST_ES_SERVER = 'https://elastic:changeme@elasticsearch:9200'
}
steps {
withGithubNotify(context: 'Integration test xPack') {
deleteDir()
unstash 'source-dependencies'
dir("${BASE_DIR}"){
// Sometimes the docker registry fails and has random timeouts
// this block will retry a doker image 3 times before to fail.
retry(3) {
sleep randomNumber(min: 5, max: 10)
sh(label: 'Start Elasticsearch', script: './scripts/es-docker-platinum.sh --detach')
}
}
script {
buildDockerImage(fromDockerfile: true).inside('--network=elastic'){
dir("${BASE_DIR}"){
sh(label: 'Integration test', script: 'npm run test:integration | tee test-integration.tap')
sh(label: 'Generating test reporting', script: './node_modules/.bin/tap-mocha-reporter xunit < test-integration.tap > junit-integration.xml')
}
}
}
sh(label: 'Stop Elasticsearch', script: 'docker kill $(docker ps -q)')
junit(allowEmptyResults: true, keepLongStdio: true, testResults: "${BASE_DIR}/**/junit-*.xml")
}
}
}
}
}
}
}

// Sometimes the docker registry fails and has random timeouts
// this function will retry a doker image 3 times before to fail.
def buildDockerImage(args) {
def image
retry(3) {
sleep randomNumber(min: 5, max: 10)
if (args.fromDockerfile == true) {
image = docker.build('nodejs-image', "--build-arg NODE_JS_VERSION=${env.NODE_JS_DEFAULT_VERSION} ${BASE_DIR}/.ci/docker")
} else {
image = docker.image(args.image)
// make sure we have the latest available from Docker Hub
image.pull()
}
}
return image
}

def buildUnitTest(args) {
return {
node('docker && immutable') {
deleteDir()
unstash 'source'
script {
buildDockerImage(image: "node:${args.version}-alpine").inside(){
dir("${BASE_DIR}"){
sh(label: 'Install dependencies', script: 'npm install')
sh(label: 'Run unit test', script: 'npm run test:unit | tee test-unit.tap')
sh(label: 'Run behavior test', script: 'npm run test:behavior | tee test-behavior.tap')
sh(label: 'Run types test', script: 'npm run test:types')
sh(label: 'Generating test reporting', script: './node_modules/.bin/tap-mocha-reporter xunit < test-unit.tap > junit-unit.xml; ./node_modules/.bin/tap-mocha-reporter xunit < test-behavior.tap > junit-behavior.xml')
}
}
}
junit(allowEmptyResults: true, keepLongStdio: true, testResults: "${BASE_DIR}/**/junit-*.xml")
}
}
}
7 changes: 7 additions & 0 deletions .ci/docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
ARG NODE_JS_VERSION=10
FROM node:${NODE_JS_VERSION}-alpine

RUN apk --no-cache add git
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❤️


# Create app directory
WORKDIR /usr/src/app
70 changes: 0 additions & 70 deletions .ci/jobs/defaults.yml

This file was deleted.

14 changes: 0 additions & 14 deletions .ci/jobs/elastic+elasticsearch-js+5.x.yml

This file was deleted.

14 changes: 0 additions & 14 deletions .ci/jobs/elastic+elasticsearch-js+6.x.yml

This file was deleted.

14 changes: 0 additions & 14 deletions .ci/jobs/elastic+elasticsearch-js+7.x.yml

This file was deleted.

14 changes: 0 additions & 14 deletions .ci/jobs/elastic+elasticsearch-js+master.yml

This file was deleted.

19 changes: 0 additions & 19 deletions .ci/jobs/elastic+elasticsearch-js+pull-request.yml

This file was deleted.

14 changes: 14 additions & 0 deletions .ci/packer_cache.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env bash

source /usr/local/bin/bash_standard_lib.sh

DOCKER_IMAGES="node:12-alpine
node:10-alpine
node:8-alpine
"

for di in ${DOCKER_IMAGES}
do
(retry 2 docker pull "${di}") || echo "Error pulling ${di} Docker image, we continue"
done

Loading