通过命令的评估来设置Jenkins环境变量的值



有人知道我如何在jenkins中使用inject变量或其他方式设置基于unix终端命令的环境变量值。例如CurrentBranch= ls /project/folder | grep my_name。这似乎行不通。我想要这个命令,ls/project/folder | grep my_name,被评估,结果应该设置为CurrentBranch。

由于某些原因,CurrentBranch变量值永远不会被求值,但它总是有这样一个值:ls /project/folder | grep my_name

有谁知道我做错了什么吗

谢谢。

我不认为你可以这样做,以便任何 Jenkins任务都可以使用。

你可以写你的Jenkins任务,让他们都在执行一个shell脚本,然后你的问题归结为采购一个合适的rc文件(我们使用例如zsh作为一个shell,并有一个特殊的rc文件只是为Jenkins),在这个文件中,你可以设置你的环境在通常的方式,即

export $(ls /project/folder | grep my_name)

(当然,以这种方式处理ls的输出不是最好的主意,但这是另一个主题)

你可以将CurrentBranch保存在一个名为env的文件中,并使用EnvFile Plugin将该文件注入到作业中

echo "CurrentBranch=`ls /project/folder | grep my_name`" > /tmp/env

在jenkins作业配置中,选中"Prepare an environment for the run"复选框。

选择下面的复选框Keep Jenkins环境变量
Keep Jenkins Build Variables

在"脚本内容"部分,运行下面的命令创建属性文件
echo "CurrentBranch=`ls /project/folder | grep my_name`" > /tmp/jenkins_job.prop

然后在"属性文件路径"部分,给出这个属性文件完整的路径名。

现在CurrentBranch变量将在整个构建过程中可用,并且可以使用${CurrentBranch}访问。

最新更新