Jenkins变量无法在管道中使用sed命令



Sed命令给我带来了合并$tag变量的问题,witch等于"最新的${GIT_COMMIT:0:7}";。这是Sed命令:

sh "sed -i 's/{BUILD_NUMBER}/$tag/' /var/lib/jenkins/workspace/${JOB_NAME}/em-api/dev-nics-emapi-svc-param.json"

很明显,我想把提交信息放在.json文件中,但它并没有提取实际的提交sha。当我查看.json文件时,它插入了变量的字面定义,即"最新的${GIT_COMMIT:0:4}"。我正试图在运行在linux上的jenkins服务器上的声明性管道上实现这一点。

我希望它插入";latestxxxx";。有什么建议可以帮我解决这个问题吗?

GIT_COMMIT是一个可供您使用的环境变量;tag是一个groovy变量,您已经将其设置为'latest${GIT_COMMIT:0:4}'。因此,由于sed命令使用",因此它将被替换。但是您将'用于sed表达式,它不会替换环境变量。所以你基本上有两个选择:

  • 如果您对内容感到安全,请使用"引用sed命令,该命令将被替换(您可以对整个命令使用"""三引号,而不必对groovy引用"(
  • 在groovy中自己解析环境中的变量(例如System.env['GIT_COMMIT].substring(0,4)(

最新更新