Somethings said are correctly … somethings said are wrong.
I’ll try to summarise pointing to the lines in your pipeline and explain what’s 
wrong and how to fix:

Single quoted string are literals. They never get interpolated and passed as 
they are.
So, in your case:

> sh '${JAVA_HOME}/bin/java -version' // single quotes - this works fine!

Work … not because ${JAVA_HOME} is interpolated by Jenkins … but because for an 
unfortunate coincidence … ${JAVA_HOME} is a correct bash syntax for reference 
an environment variable in bash and get expanded correctly.
DO NOT confuse Jenkins pipeline environment variable that exists only in the 
pipeline context with the BASH environment variable that exists in the shell 
when “sh” is executed.
Now, also take into account that Jenkins also creates a corresponding BASH 
environment variable for each pipeline environment variable.
So, what in Groovy double-quoted string like “${env.GEN_USR}” get expanded 
using the value of the Jenkins environment variable GEN_USR, but if you want to 
let bash expand the environment variable then you have to pass '${GEN_USR}’ … 
in single-quoted string … or … you need to escape “$” in double-quoted string 
to avoid that Groovy does the interpolation instead of bash.

Your multi-line command suffer from the fact somethings need to be expanded by 
Groovy and something else need to be expanded by BASH, so you need to split in 
different string and concatenate or escape $:

>  sh script: '''
>             ${mvnCommand(m2RepoIdentifier)}\
This is a Jenkins function … so need to be expanded by Groovy and it’s in the 
double-quoted string… so far so good
>              -f proj-reactor/pom.xml\
>              -P GenerateStorables -DdeployAtEnd=true\
>              -Dproj.build.generatefromdb.url=${jdbcUrlNoData()}\
That is the same … so it’s good
>              -Dproj.build.generatefromdb.user=${GEN_USR}\
That’s the problem. You are using “withCredentials” and that command only 
creates BASH environment variable … and you are letting Groovy do the expansion 
but GEN_USR doesn’t exist into Jenkins pipeline … and neither env.GEN_USR … the 
only one that exist is the BASH environment variable and you have to let bash 
expand … so you need to escape $ to pass as it is to BASH:

-Dproj.build.generatefromdb.user=\${GEN_USR}\

>              -Dproj.build.generatefromdb.password=${GEN_PASSWD}\
Same as above… it’s a BASH environment variable
>              clean ${mvnBuildGoal} pmd:pmd pmd:cpd\
That is probably a Groovy variable but I’m not entire sure.
>       '''


I hope that helps.

As suggestion, try to split and use a mix of double-quoted and single-quoted so 
you avoid escaping:

      sh script: 
            "${mvnCommand(m2RepoIdentifier)} “ +
             '-f proj-reactor/pom.xml ‘ +
             '-P GenerateStorables -DdeployAtEnd=true ‘ +
             "-Dproj.build.generatefromdb.url=${jdbcUrlNoData()}” +
             '-Dproj.build.generatefromdb.user=${GEN_USR} ‘ +
             '-Dproj.build.generatefromdb.password=${GEN_PASSWD} ‘ +
             'clean ${mvnBuildGoal} pmd:pmd pmd:cpd'


Cheers,
Gianluca.


> On 17 Nov 2020, at 20:45, JonathanRRogers <jonathanrrog...@gmail.com> wrote:
> 
> I don't think you've read the Jenkins pipeline documentation correctly. 
> String interpolation is performed by Groovy. Jenkins doesn't add any 
> interpolation behavior. Jenkins will always treat single-quoted strings as 
> simple literals. The "sh" step calls a shell which can do its own variable 
> expansion, which is the approach recommended for passing credentials to 
> external commands.
> 
> Your multi-line sh step includes calls to "mvnCommand()" and 
> "jdbcUrlNoData()". Unless those are shell functions, you're unlikely to get 
> the results you want.
> 
> On Tuesday, November 17, 2020 at 10:41:51 AM UTC-5 st.mail...@gmail.com wrote:
> Thanks Dirk, but that does not solve my problem, I'm still stuck.
> I think that my question boils down to why the multi-line sh command below 
> does not work?
> According to 
> https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#string-interpolation 
> <https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#string-interpolation>
> single-quoted strings should be interpolated by Jenkins (instead of using 
> Groovy string interpolation). I would assume this applies
> to both variables (e.g. GEN_USR below) and method calls returning a string 
> (e.g. jdbcUrlNoData() below)?
> 
> withCredentials([usernamePassword(credentialsId: 'credentialsGenerateFromDb',
>                            usernameVariable: 'GEN_USR',
>                            passwordVariable: 'GEN_PASSWD')]) {
>    String m2RepoIdentifier = "${env.BRANCH_NAME}_${env.BUILD_NUMBER}"
> 
>    withEnv(javaAndMavenEnvArray()) {
>       sh '${JAVA_HOME}/bin/java -version' // single quotes - this works fine!
> 
>       sh script: '''
>             ${mvnCommand(m2RepoIdentifier)}\
>              -f proj-reactor/pom.xml\
>              -P GenerateStorables -DdeployAtEnd=true\
>              -Dproj.build.generatefromdb.url=${jdbcUrlNoData()}\
>              -Dproj.build.generatefromdb.user=${GEN_USR}\
>              -Dproj.build.generatefromdb.password=${GEN_PASSWD}\
>              clean ${mvnBuildGoal} pmd:pmd pmd:cpd\
>       '''
>    }
> }
> 
> On Tue, Nov 17, 2020 at 2:06 PM 'Dirk Heinrichs' via Jenkins Users 
> <jenkins...@googlegroups.com 
> <applewebdata://5422D2F8-4029-4BD2-8207-2EF8E694647D>> wrote:
> Am Dienstag, den 17.11.2020, 13:45 +0100 schrieb ST:
> 
>>  
>> " '-Dproj.build.generatefromdb.user=${env.GEN_USR}'"
> 
> Try with ${GEN_USR} inside shell scripts, not ${env.GEN_USR}.
> 
> HTH...
> 
> Dirk
> -- 
> Dirk Heinrichs
> Senior Systems Engineer, Delivery Pipeline
> OpenText ™ Discovery | Recommind
> Phone: +49 2226 15966 18 <tel:+49%202226%201596618>
> Email: dhei...@opentext.com 
> <applewebdata://5422D2F8-4029-4BD2-8207-2EF8E694647D>
> Website: www.recommind.de <http://www.recommind.de/>
> Recommind GmbH, Von-Liebig-Straße 1, 53359 Rheinbach
> Vertretungsberechtigte Geschäftsführer Gordon Davies, Madhu Ranganathan, 
> Christian Waida, Registergericht Amtsgericht Bonn, Registernummer HRB 10646
> This e-mail may contain confidential and/or privileged information. If you 
> are not the intended recipient (or have received this e-mail in error) please 
> notify the sender immediately and destroy this e-mail. Any unauthorized 
> copying, disclosure or distribution of the material in this e-mail is 
> strictly forbidden
> Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte 
> Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail 
> irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und 
> vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte 
> Weitergabe dieser Mail sind nicht gestattet.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Jenkins Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to jenkinsci-use...@googlegroups.com 
> <applewebdata://5422D2F8-4029-4BD2-8207-2EF8E694647D>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/jenkinsci-users/4dd32ea372d43c9dde0800bed9a16253d45cb2e5.camel%40opentext.com
>  
> <https://groups.google.com/d/msgid/jenkinsci-users/4dd32ea372d43c9dde0800bed9a16253d45cb2e5.camel%40opentext.com?utm_medium=email&utm_source=footer>.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Jenkins Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to jenkinsci-users+unsubscr...@googlegroups.com 
> <mailto:jenkinsci-users+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/jenkinsci-users/bed31997-28f8-4e9b-b205-43f02d4348a5n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/jenkinsci-users/bed31997-28f8-4e9b-b205-43f02d4348a5n%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/EF752299-FA13-4668-97F9-723AB1A19173%40gmail.com.

Reply via email to