Jenkins Pipeline在环境变量部分中引用环境变量

时间:2019-05-02 14:25:10

标签: jenkins-pipeline

我正在Jenkins管道中创建两个环境变量,

environment{
base_ver=sh(script: 'grep FROM ${WORKSPACE}/Dockerfile | awk -F : \'{print $2}\'', returnStdout: true).trim()
git_hash=sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
}

现在,我想通过使用上面的两个变量在同一部分中创建另一个env变量,这将使我们像这样 图片='$ base_ver'-'$ git_hash' 我尝试了多种方法来执行此操作,但是它们似乎都不起作用,是否可以在env变量部分中访问env变量? 这是我尝试过的,

environment{
base_ver=sh(script: 'grep FROM ${WORKSPACE}/Dockerfile | awk -F : \'{print $2}\'', returnStdout: true).trim()
git_hash=sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
Image=sh(script: 'DockerImage=${base_ver}-${git_hash}', returnStdout: true).trim()

}

请告诉我这是否可行或正确的方法。 谢谢。

2 个答案:

答案 0 :(得分:0)

您当前正在做的是启动shell,在其中定义变量并退出。没有打印任何内容,因此返回的stdout为空。

可以通过groovy进行串联。无需为此启动外壳。
你的这个:

Image = base_ver + '-' + git_hash

如果出于任何原因需要在shell中执行此操作,只需添加echo(还要注意双引号,以便在调用shell之前使用常规的替换变量):

Image=sh(script: "echo -n '${base_ver}-${git_hash}'", returnStdout: true).trim()

答案 1 :(得分:0)

我尝试过这种方法,对我有用。谢谢大家的建议。

sh """
Image=${PROD_ECR_REPO}:${env.base_ver}-${env.git_hash}
echo \$Image
"""