'jenkins pipeline fails without some explanatory exception

I have a pipeline where among other parameters like machine name, client it is supposed to get latest ami from aws for that branch for example and then put it the clien.json which terraform would use to create the machine but als I want to enable the user to be able to provide a value for the parameter and when there is no value for that parameter to have the value picked from latest ami in develop for example:

#!/usr/bin/env groovy

pipeline { agent { label 'new' }

parameters {

    string(name: 'AMI_ID', defaultValue: '', description: '[Mandatory]')

}


stages {


    stage('Retrieve latest AMI.') {
        when {
            expression { ${AMI_ID} == '' }
        }
        steps {
            script {
               AMI_ID = sh(script: "aws ec2 describe-images --region region1 --owners 123456 --filters \"Name=tag:type,Values=develop\" --query 'sort_by(Images, &CreationDate)[-1].ImageId'  | jq -r '.'", returnStdout: true).trim()
                echo "AMI retrieved: " + $ { AMI_ID }

            }
        }
    }
    stage("Updating client data") {
        environment {
            TERRAHELP_KEY = credentials('some-key')
        }
        steps {

            dir("data/clients/") {


                clientJson = readJSON file: "${CLIENT}.json"

                clientJson.put("client_ec2_eda_ami_id", ${ AMI_ID })

                writeJSON file: "${CLIENT}.json", json: clientJson, pretty: 4

                echo "Following  data will be applied:"
                sh "cat ${CLIENT}.json"
            }
        }
    }
}

}



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source