Hi all,
I will need some help with the following extended code around curl and
the authentication. We switched to authenticated setup on the app
side. It seems now I cannot get past the authorization process as I
probably need more escapes.
I would be grateful for any pointers on how to improve the
authenticated curl calls by escapes or by using withCredentials and
escapes.
environment {
CREDS_USR = credentials('common-creds')
SEARCH_CSV_URL = "https://foo.com/search.csv"
VIEW = "baz"
}
script {
sh '''#!/usr/bin/env bash
TTL_PRJ="$(curl ${CURL_OPTS} --user
${CREDS_USR}:${CREDS_PSW} ${SEARCH_CSV_URL} | awk -F , 'NR > 1 {print
$2}'| wc -l)"
FIN_PRJ="$(curl ${CURL_OPTS} --user
${CREDS_USR}:${CREDS_PSW} ${SEARCH_CSV_URL} | awk -F , 'NR > 1 {print
$2}'| grep Finished | wc -l)"
SUCC_RATE="$(awk -v succ_prj="${FIN_PRJ}" -v
tl_prj="${TTL_PRJ}" 'BEGIN { print int(( succ_prj / tl_prj )*100) }')"
mail -s "build stats attached for "\${VIEW}""
[email protected] <<EOF
================Printing build stats:==================
Total projects for "\${VIEW}" is: ${TTL_PRJ}
Finished projects for "\${VIEW}" is: ${FIN_PRJ}
Success rate in percentage is: ${SUCC_RATE}
EOF
'''
}
}
}
}
}
На вт, 24.03.2020 г. в 17:43 Dimitar Vassilev
<[email protected]> написа:
>
> Thanks Paul.
> After switching to ''' and moving the EOF marker to the very beginning of the
> line ( yep I know I break the indent), but I don't like warnings like
> script.sh: line 16: warning: here-document at line 10 delimited by
> end-of-file (wanted `EOF')
> Next I will try using csv and https parser to do the stuff better.
> Thank you and the community!
> Regards,
> Dimitar
>
> На вт, 24.03.2020 г. в 15:43 Paul King <[email protected]> написа:
>>
>> $ in Groovy double quoted strings indicates the start of a placeholder, so
>> you are expecting Groovy to supply the values for things like ${CURL_OPTS}.
>> I suspect you want the shell environment to replace those. So you can either
>> use the triple single quoted string (exactly what it is intended for) or you
>> can escape each $, e.g. \$.
>> The error is for expressions like $2 which isn't a valid Groovy variable
>> name so not suitable for replacement.
>>
>> On Tue, Mar 24, 2020 at 11:27 PM Dimitar Vassilev
>> <[email protected]> wrote:
>>>
>>> Greetings all,
>>> Hope you are well and safe. I will need some pointers how to properly
>>> escape the following piece of code into double quoted multi line shell step
>>> ```
>>> #!/usr/bin/env bash
>>> CURR_BL="foo_200227_203942"
>>> HUB_URL="https://baz-baz.com:8045"
>>> SEARCH_CSV_URL="${HUB_URL}/project_search.csv?query="${CURR_BL}"&scope=all"
>>> CURL_OPTS="-s"
>>> TTL_PRJ="$(curl "${CURL_OPTS}" ${SEARCH_CSV_URL} | awk -F , '{print $2}'|
>>> wc -l)"
>>> FIN_PRJ="$(curl "${CURL_OPTS}" ${SEARCH_CSV_URL} | awk -F , '{print $2}'|
>>> grep Finished | wc -l)"
>>> SUCC_RATE="$(awk -v succ_prj="${FIN_PRJ}" -v tl_prj="${TTL_PRJ}" 'BEGIN {
>>> print int(( succ_prj / tl_prj )*100) }')"
>>> LOG_PLACE="/foo/baz"
>>> APPL_NAME="foobar"
>>> CURR_VIEW="foo_200227_203942_seafood_int"
>>>
>>> cd "${LOG_PLACE}/${APPL_NAME}/${CURR_VIEW}"/;
>>> cat "${LOG_PLACE}/${APPL_NAME}/${CURR_VIEW}"/.build_[0-9]*/*.err >>
>>> "${CURR_VIEW}_err.log"
>>> mail -a "${CURR_VIEW}_err.log" -s "Code quality build stats and error logs
>>> attached for ${CURR_VIEW}" [email protected] << EOF
>>> ================Printing Code quality build stats:==================
>>> Total projects for ${CURR_BL} is: ${TTL_PRJ}
>>> Finished projects for ${CURR_BL} is: ${FIN_PRJ}
>>> Success rate in percentage is: ${SUCC_RATE}
>>> EOF
>>> ```
>>> When running the above script as Jenkins shell step with """ I get the error
>>> illegal string body character after dollar sign;
>>> solution: either escape a literal dollar sign "\$5" or
>>> bracket the value expression "${5}" @ line 13, column 86.
>>> earch.csv?query="${CURR_BL}"&scope=a
>>>
>>> Sample code with the error trigger is included
>>> ```
>>> pipeline {
>>> agent {label 'baz'}
>>> stages {
>>> stage('Test') {
>>> steps {
>>> script{
>>> sh"""#!/usr/bin/env bash
>>> CURR_BL="foo_200227_203942"
>>> HUB_URL="https://baz-baz.com:8045"
>>>
>>> SEARCH_CSV_URL="${HUB_URL}/project_search.csv?query="${CURR_BL}"&scope=all"
>>> CURL_OPTS="-s"
>>> TTL_PRJ="$(curl "${CURL_OPTS}" ${SEARCH_CSV_URL} | awk
>>> -F , '{print $2}'| wc -l)"
>>> FIN_PRJ="$(curl "${CURL_OPTS}" ${SEARCH_CSV_URL} | awk
>>> -F , '{print $2}'| grep Finished | wc -l)"
>>> SUCC_RATE="$(awk -v succ_prj="${FIN_PRJ}" -v
>>> tl_prj="${TTL_PRJ}" 'BEGIN { print int(( succ_prj / tl_prj )*100) }')"
>>> LOG_PLACE="/foo/baz"
>>> APPL_NAME="foobar"
>>> CURR_VIEW="foo_200227_203942_seafood_int"
>>> cd "${LOG_PLACE}/${APPL_NAME}/${CURR_VIEW}"/;
>>> cat
>>> "${LOG_PLACE}/${APPL_NAME}/${CURR_VIEW}"/.build_[0-9]*/*.err >>
>>> "${CURR_VIEW}_err.log"
>>> mail -a "${CURR_VIEW}_err.log" -s "Code quality build
>>> stats and error logs attached for ${CURR_VIEW}" [email protected] << EOF
>>> ================Printing Code quality build
>>> stats:==================
>>> Total projects for ${CURR_BL} is: ${TTL_PRJ}
>>> Finished projects for ${CURR_BL} is: ${FIN_PRJ}
>>> Success rate in percentage is: ${SUCC_RATE}
>>> EOF
>>> """
>>> }
>>> }
>>> }
>>> }
>>> }
>>> ```
>>> So it seems I can't make groovy enough groovy using """. With ''' it works
>>> fine. However I prefer to educate myself if possible. Thanks for making
>>> this happen.