Jenkins 管道如何正确使用字符串插值

Jenkins pipeline how to use string interpolation correctly

在我的 docker 运行 中,我想将一个秘密作为环境变量传递。这很好用。但是,我还有第二个变量“foo”,我想在我的容器中回显它。这是行不通的。如何让变量“foo”在三重单引号内展开?

 stages {
        stage('test') {
            steps {
                    script {
                        def foo = "bar"
                        sh '''
                        docker run \
                                --rm \
                                --env secret=$ENV_SECRET \
                                python:3.8.12 /bin/bash -c \
                                "echo $foo"
                        '''
                    
                }
                
            }
        }
    }

在 Groovy 中使用 Groovy 变量插入字符串的语法涉及 "。如果您的 ENV_SECRET 是从 withCredentials 块绑定的环境变量,那么您想在 shell 解释器中插入它。因此,我们可以将您的 shell 步骤方法更新为:

sh """
  docker run \
  --rm \
  --env secret=$ENV_SECRET \
  python:3.8.12 /bin/bash -c \
  'echo $foo'
"""

您的语法会插入 shell 个变量。请注意,两者都将插入环境变量,但使用不同的解释器。