3 Commits

Author SHA1 Message Date
joel 5407119ebd Update Jenkinsfile 2024-10-27 17:44:44 +01:00
joel 2c3750458b Update Jenkinsfile 2024-10-27 17:00:36 +01:00
joel a99824213e Update Jenkinsfile 2024-10-27 16:44:23 +01:00
Vendored
+32 -115
View File
@@ -6,7 +6,7 @@ def buildxPushTags = ""
pipeline { pipeline {
agent { agent {
label 'master' label 'docker-multiarch'
} }
options { options {
buildDiscarder(logRotator(numToKeepStr: '5')) buildDiscarder(logRotator(numToKeepStr: '5'))
@@ -18,12 +18,7 @@ pipeline {
BUILD_VERSION = getVersion() BUILD_VERSION = getVersion()
MAJOR_VERSION = '2' MAJOR_VERSION = '2'
BRANCH_LOWER = 'proxyprotocol' BRANCH_LOWER = 'proxyprotocol'
COMPOSE_PROJECT_NAME = "npm_${BRANCH_LOWER}_${BUILD_NUMBER}"
COMPOSE_FILE = 'docker/docker-compose.ci.yml'
COMPOSE_INTERACTIVE_NO_CLI = 1 COMPOSE_INTERACTIVE_NO_CLI = 1
BUILDX_NAME = "${COMPOSE_PROJECT_NAME}"
DOCS_BUCKET = 'jc21-npm-site'
DOCS_CDN = 'EN1G6DEWZUTDT'
} }
stages { stages {
stage('Environment') { stage('Environment') {
@@ -39,128 +34,50 @@ pipeline {
} }
} }
} }
stage('Build and Test') { stage('Builds') {
steps { parallel {
script { stage('Project') {
// Frontend and Backend steps {
def shStatusCode = sh(label: 'Checking and Building', returnStatus: true, script: ''' script {
set -e // Frontend and Backend
./scripts/ci/frontend-build > ${WORKSPACE}/tmp-sh-build 2>&1 def shStatusCode = sh(label: 'Checking and Building', returnStatus: true, script: '''
./scripts/ci/test-and-build > ${WORKSPACE}/tmp-sh-build 2>&1 set -e
''') ./scripts/ci/frontend-build > ${WORKSPACE}/tmp-sh-build 2>&1
shOutput = readFile "${env.WORKSPACE}/tmp-sh-build" ./scripts/ci/test-and-build > ${WORKSPACE}/tmp-sh-build 2>&1
if (shStatusCode != 0) { ''')
error "${shOutput}" shOutput = readFile "${env.WORKSPACE}/tmp-sh-build"
if (shStatusCode != 0) {
error "${shOutput}"
}
}
}
post {
always {
sh 'rm -f ${WORKSPACE}/tmp-sh-build'
}
} }
} }
} stage('Docs') {
post { steps {
always { dir(path: 'docs') {
sh 'rm -f ${WORKSPACE}/tmp-sh-build' sh 'yarn install'
} sh 'yarn build'
//failure { }
//npmGithubPrComment("CI Error:\n\n```\n${shOutput}\n```", true)
//}
}
}
stage('Integration Tests Sqlite') {
steps {
// Bring up a stack
sh 'docker-compose up -d fullstack-sqlite'
sh './scripts/wait-healthy $(docker-compose ps --all -q fullstack-sqlite) 120'
// Stop and Start it, as this will test it's ability to restart with existing data
sh 'docker-compose stop fullstack-sqlite'
sh 'docker-compose start fullstack-sqlite'
sh './scripts/wait-healthy $(docker-compose ps --all -q fullstack-sqlite) 120'
// Run tests
sh 'rm -rf test/results'
sh 'docker-compose up cypress-sqlite'
// Get results
sh 'docker cp -L "$(docker-compose ps --all -q cypress-sqlite):/test/results" test/'
}
post {
always {
// Dumps to analyze later
sh 'mkdir -p debug'
sh 'docker-compose logs fullstack-sqlite > debug/docker_fullstack_sqlite.log'
sh 'docker-compose logs db > debug/docker_db.log'
// Cypress videos and screenshot artifacts
dir(path: 'test/results') {
archiveArtifacts allowEmptyArchive: true, artifacts: '**/*', excludes: '**/*.xml'
} }
junit 'test/results/junit/*'
}
}
}
stage('Integration Tests Mysql') {
steps {
// Bring up a stack
sh 'docker-compose up -d fullstack-mysql'
sh './scripts/wait-healthy $(docker-compose ps --all -q fullstack-mysql) 120'
// Run tests
sh 'rm -rf test/results'
sh 'docker-compose up cypress-mysql'
// Get results
sh 'docker cp -L "$(docker-compose ps --all -q cypress-mysql):/test/results" test/'
}
post {
always {
// Dumps to analyze later
sh 'mkdir -p debug'
sh 'docker-compose logs fullstack-mysql > debug/docker_fullstack_mysql.log'
sh 'docker-compose logs db > debug/docker_db.log'
// Cypress videos and screenshot artifacts
dir(path: 'test/results') {
archiveArtifacts allowEmptyArchive: true, artifacts: '**/*', excludes: '**/*.xml'
}
junit 'test/results/junit/*'
}
}
}
stage('Docs') {
when {
not {
equals expected: 'UNSTABLE', actual: currentBuild.result
}
}
steps {
dir(path: 'docs') {
sh 'yarn install'
sh 'yarn build'
}
dir(path: 'docs/.vuepress/dist') {
sh 'tar -czf ../../docs.tgz *'
}
archiveArtifacts(artifacts: 'docs/docs.tgz', allowEmptyArchive: false)
}
}
stage('MultiArch Build') {
steps {
// Buildx with push from cache
sh "./scripts/buildx"
} }
} }
} }
post { post {
always { always {
sh 'docker-compose down --remove-orphans --volumes -t 30'
sh 'echo Reverting ownership' sh 'echo Reverting ownership'
sh 'docker run --rm -v $(pwd):/data jc21/ci-tools chown -R $(id -u):$(id -g) /data' sh 'docker run --rm -v "$(pwd):/data" jc21/ci-tools chown -R "$(id -u):$(id -g)" /data'
} //printResult(true)
success {
sh 'figlet "SUCCESS"'
} }
failure { failure {
archiveArtifacts(artifacts: 'debug/**.*', allowEmptyArchive: true) archiveArtifacts(artifacts: 'debug/**/*.*', allowEmptyArchive: true)
sh 'figlet "FAILURE"'
} }
unstable { unstable {
archiveArtifacts(artifacts: 'debug/**.*', allowEmptyArchive: true) archiveArtifacts(artifacts: 'debug/**/*.*', allowEmptyArchive: true)
sh 'figlet "UNSTABLE"'
} }
} }
} }