Jenkins管道:在stage1中,从文件中读取数字,在stage2中,**在**节点名称中,使用该数字

时间:2016-11-27 09:25:32

标签: jenkins groovy jenkins-pipeline

继续这个: Jenkins pipeline stages - passing whole file

我现在不得不将号码设置为节点名称的一部分,其中此号码包含在另一个节点上的文件中。

例如,如果属性文件包含数字6,我必须在名为DEV-SME-6的节点上运行作业。

我有办法:在stage1中,从主节点上的文件中读取数字,如下所示:

Env_number = readFile 'file_containing_an_integer_between_2_and_7.txt'

然后在stage2中,节点名称中,使用该数字指定节点名称的一部分,如下所示:

node('DEV-SME-$Env_number')

...

这不能与unstash一起工作(在某个阶段指定节点名称之前尝试取消暂停会给我一个错误:FilePath.hudson缺失

我目前的代码,在尝试了一些东西后,是这样的:

stage "first stage"
   node ('master'){
      try{
         env.Env_number = sh ' echo DEV$(cat file_containing_an_integer_between_2_and_7.txt '
      catch(error)
         echo "failed to set variable Env_number "
            }}

stage "second stage"
   node('${Env_number}') {
      try{
         command1
         command2 
            }}

这给了我一个没有标签' null' "

2 个答案:

答案 0 :(得分:1)

你不能在节点之外使用存储,因为它意味着复制" stashed"从编排Master到运行代码的节点的文件。

对于这些事情,您应该使用将通过执行序列化的env变量。使用它来获取应该在不同节点之间存活的信息。

您在上面的代码中犯了一个错误。

stage "second stage"
   node("${Env_number}") {

应该是:"

stage "second stage"
   node("${env.Env_number}") {

答案 1 :(得分:0)

成功!没有sh脚本,有readFile:

$scope.showPopup=function(){
  alert('eee');
  alert($scope.MyData);
};