通过环境工作失败后向下游工作分配变量

时间:2019-09-13 08:44:13

标签: jenkins environment-variables

我有一个詹金斯上游工作,一旦失败,它将触发下游工作,但是我需要传递相同的环境。下游作业中的上游作业变量。

我正在使用Powershell设置环境。像$env:tag=$(git describe)这样的变量,即生成我的git标签。如何发送此环境。下游作业中使用变量,而不在下游作业中使用git url。

下游作业仅应在上游作业失败时触发。

我通过存储环境使用了触发的参数化构建插件。 txt文件(echo "$env:tag=$(git describe)" > env.txt)中的变量,但这也不起作用。

我尝试了其他几个插件,但没有任何解决方法。

用例:JobA要传递其环境。在Powershell($ ENV:tag)中将变量设置为JobB。因此,在JobA的配置中,预定义的参数文本字段用于解析名称,但无法按预期工作。而是传递整个字符串“ $ ENV:tag”而不是“ env-value”。这是我的配置方式:

– JobA -------

预定义参数:gittag = $ ENV:tag =>将参数传递给JobB

– JobB --------

echo gittag =>输出:echo $ ENV:tag => $ ENV:tag

3 个答案:

答案 0 :(得分:0)

enter image description here,您可以使用参数化触发器插件。 这是更多详细信息的链接:https://wiki.jenkins.io/display/JENKINS/Parameterized+Trigger+Plugin

答案 1 :(得分:0)

此插件似乎是known issue

如果仅当上游作业失败时才触发下游作业,则不要将下游作业设为参数化作业。而是将上游作业所需的变量写入下游作业的工作空间中的属性文件。

echo Var1=value>../Downstream_Job_Folder/downstream.properties
echo Var2=value>>../Downstream_Job_Folder/downstream.properties

在下游作业中,使用EnvInject Plugin作为第一步,或编写脚本从文件中读取变量。

答案 2 :(得分:0)

通过环境。紧身裤中上游到下游工作的变量

。将上游作业所需的变量写入属性(在我们的情况下   env.properties文件)文件添加到下游作业的工作区中。

echo Var1=value>../Downstream_Job_Folder/downstream.properties
echo Var2=value>>../Downstream_Job_Folder/downstream.properties

---------- IN MY CASE -------------
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
$commit_id=$(git rev-parse --short HEAD)
$tag=$(git describe)
echo var1=$commit_id > "C:\Program Files 
                        (x86)\Jenkins\workspace\powershell_2\env.properties"
echo var2=$tag >> "C:\Program Files 
                   (x86)\Jenkins\workspace\powershell_2\env.properties" 
echo $commit_id
echo $tag       # TO CROSS-CHECK

。在下游作业中,将EnvInject插件用作第一步,然后AND

- give Properties File Path - env.properties

。然后选择第二个构建步骤作为Windows powershell,并为Windows powershell选择   读取env.properties文件,使用以下命令

- $AppProps = convertfrom-stringdata (get-content env.properties -raw)

  $AppProps.'var1'   # will print the var1 value

  $AppProps.'var2'   # will print the var2 value

  $env:commit_id=$AppProps.'var1'

  $env:tag=$AppProps.'var2'

  echo git:$env:tag      
  echo git:$env:commit_id   # this will print the desired output 

----------如果是Linux -------------------

。在上游工作中

- echo "name=@@" > /home/jenkins/jenkins/workspace/sh_tst_2/env.properties
- echo "age=22"  >> /home/jenkins/jenkins/workspace/sh_tst_2/env.properties

。在下游作业中,将EnvInject插件用作第一步,然后AND

- give Properties File Path - env.properties

。然后选择第二个构建步骤作为LINUX SHELL

  • 回显$ name
  • echo $ age#将提供环境的输出。来自UPSTREAM职位的VAR