try {
    node('docker_build') {

        stage('SCM') {
            checkout scm
        }
        docker.image("node:10").inside {

            stage("publish") {
                withCredentials([string(credentialsId: 'NPM_TOKEN', variable: 'NPM_TOKEN')]) {
                    sh "echo '//registry.npmjs.org/:_authToken=$NPM_TOKEN' > ~/.npmrc"
                    sh "npm publish"
                }
            }
        }
    }
} catch (e) {
    currentBuild.result = "FAILURE"
    notifyFailed()
    throw e
 }

def notifyFailed() {
    slackSend (color: '#FF0000', message: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
}
