首页 > 解决方案 > Jenkins 声明式管道:如何将文件(在不同节点中退出)数据获取到数组中

问题描述

通过 Jenkins 声明式管道脚本,是否可以从不同节点读取文件数据?

示例:
我有 3 个节点(A 到 C)。
From A,我需要从所有其他节点读取文件数据并需要存储在一个数组中,然后 From AI 需要对这些 Array 值进行一些操作。我已经尝试过以下代码。

pipeline{
    agent none
    stages{
        stage("Node-C"){
            agent {
                label "Node-C"
            }
            steps{
                sh '''
                   arr1=($(grep -i "docker" /opt/abc/Text1.txt))
                '''
            }
        }
        stage("Node-B"){
            agent {
                label "Node-B"
            }
            steps{
                sh '''
                   arr1+=($(grep -i "docker" /opt/abc/Text1.txt))
                '''
            }
        }
        stage("Node-A"){
            agent {
                label "Node-A"
            }
            steps{
                sh '''
                    arr1+=($(grep -i "docker" /opt/abc/Text1.txt))
                    for i in "${arr1[@]}"
                    do
                       echo "== $i =="
                    done
                '''
            }
        }
    }
}

上面的脚本只打印 Node-A 的文件数据。但是,我们如何打印 Node-B 和 Node-C 数据呢?

标签: jenkinsjenkins-pipeline

解决方案


定义一个全局变量并读取该变量的值。

def str=''
pipeline{
agent any
stages {
    stage('master'){
        agent {
            label 'master' 
        }
       steps{ 
           script { str +='am in node 1 ' }
       }
    }
    stage('agent'){
        agent {
            label 'agent01' 
        }
       steps{ 
          script{ str += 'and am in node 2' }
       }
    }

     stage('output'){
       steps{ 
           echo "${str}"
       }
    }  
  }
}

推荐阅读