在Jenkinsfile中使用变量时,如何保留所有Shell命令

时间:2018-10-04 13:29:47

标签: jenkins groovy jenkins-pipeline

stage('build') {
      environment {
        WORKDIR="""${sh(
                returnStdout: true,
                script: 'pwd'
            )}"""
      }
      steps {
        timeout(time: 5, unit: 'MINUTES') {
          sh "usermod -d ${WORKDIR} jenkins"
        }
      }
    }

以上结果给出

  

usermod -d / var / lib / jenkins / workspace / -www_feature_ci-integration-GWZMSYY6XHJA7QDBD4KWGXZCOVUKOBI35JMKYOQV76QXZTCYE6CA

     

用法:usermod [选项]登录

我指定的用户jenkins发生了什么,似乎已经从命令中删除了。有办法保存它吗?

1 个答案:

答案 0 :(得分:1)

使用sh调用returnStdout: true方法时,通常会在输出中返回换行符。如果将此输出分配给变量,则结果字符串值还将包含换行符。这意味着您的sh "usermod -d ${WORKDIR} jenkins"将是usermod -d /var/lib/jenkins/workspace/-www_feature_ci-integration-GWZMSYY6XHJA7QDBD4KWGXZCOVUKOBI35JMKYOQV76QXZTCYE6CA\n jenkins"。然后,该命令将在没有jenkins用户参数的情况下执行。

要解决此问题,您可以使用.trim()方法删除换行符(和尾随空格)。

这可以通过以下任意一种方法轻松完成:

WORKDIR="""${sh(
             returnStdout: true,
             script: 'pwd'
           ).trim()}"""

在分配过程中,或:

sh "usermod -d ${WORKDIR.trim()} jenkins"

在字符串插值期间。