diff --git a/Jenkinsfile b/Jenkinsfile index ca09ef4..78e9968 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,3 +1,5 @@ +def buildArtifact = true + pipeline { agent { label 'ruby && freebsd' } @@ -18,7 +20,6 @@ pipeline { } stage('Build dependencies') { steps { - sh 'bundle config set --local path "vendor"' sh 'bundle install' sh 'sequel -m db/migrations sqlite://db/${DB_NAME}' } @@ -26,25 +27,57 @@ pipeline { stage('Audit Dependencies') { steps { catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { - sh 'bundle exec ruby-audit check' - sh 'bundle exec bundle-audit check >> audit.html' + script { + try { + sh 'bundle exec ruby-audit check' + sh 'bundle exec bundle-audit check >> audit.html' + } catch (e) { + script { + buildArtifact = false + } + } + } } } } stage('Code Linting') { steps { catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') { - sh 'bundle exec rubocop --format html --out rubocop.html' + script { + try { + sh 'bundle exec rubocop --format html --out rubocop.html' + } catch (e) { + script { + buildArtifact = false + } + } + } } } } stage('Run tests') { steps { catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') { - sh 'bundle exec cucumber features --format html --out cucumber.html' + script { + try { + sh 'bundle exec cucumber features --format html --out cucumber.html' + } catch (e) { + script { + buildArtifact = false + } + } + } } catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') { - sh 'bundle exec rspec spec --format html --out spec.html' + script { + try { + sh 'bundle exec rspec spec --format html --out spec.html' + } catch (e) { + script { + buildArtifact = false + } + } + } } } } @@ -61,13 +94,19 @@ pipeline { } } stage('Build production deliverable') { + when { + expression { + buildArtifact + } + } steps { catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { sh ''' #!/usr/local/bin/bash ZIP_FILE="url-shortener_${BRANCH_NAME}_$(date "+%Y-%m-%d_%H-%M-%S").tgz" CUR_DIR=$(pwd) bundle config set --local without 'test' - bundle clean + bundle config set --local path "vendor" + bundle install mkdir -p /tmp/url-shortener cp -R * /tmp/url-shortener cp .env.rb /tmp/url-shortener/ @@ -83,9 +122,13 @@ pipeline { } } stage('Clean up deliverable') { + when { + expression { + buildArtifact + } + } steps { sh 'rm -rf /tmp/url-shortener' - sh 'rm -rf *.tgz' } } }