Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins 如何访问groovy脚本中为特定构建创建的工件_Jenkins_Groovy_Jenkins Plugins_Jenkins Groovy - Fatal编程技术网

Jenkins 如何访问groovy脚本中为特定构建创建的工件

Jenkins 如何访问groovy脚本中为特定构建创建的工件,jenkins,groovy,jenkins-plugins,jenkins-groovy,Jenkins,Groovy,Jenkins Plugins,Jenkins Groovy,我的groovy脚本中有一个阶段,它使用getImageVulnsFromQualys函数()生成两个json文件 脚本完成后,我得到两个json文件,其中包含随机哈希作为工件的文件名。我不能静态地引用每个要解析的文件,因为每次构建完成时json文件的名称都是随机的。我希望能够读取两个json文件,并在同一阶段或在同一脚本的另一阶段中解析该文件。我希望Groovy有一个简单的函数,允许我检索特定构建的所有工件,并解析每个工件。对我来说,检索所有这些工件的最佳方法是什么?我有类似的方法来查找工件名

我的groovy脚本中有一个阶段,它使用
getImageVulnsFromQualys
函数()生成两个json文件
脚本完成后,我得到两个json文件,其中包含随机哈希作为工件的文件名。我不能静态地引用每个要解析的文件,因为每次构建完成时json文件的名称都是随机的。我希望能够读取两个json文件,并在同一阶段或在同一脚本的另一阶段中解析该文件。我希望Groovy有一个简单的函数,允许我检索特定构建的所有工件,并解析每个工件。对我来说,检索所有这些工件的最佳方法是什么?

我有类似的方法来查找工件名称。以下是查找文件及其内容的var步骤示例:

//getArtifactToConentMap.groovy 

def call(args) {
    def build = args.build
    def regex = args.regex
    def files = build.getArtifacts()
    Map<String, String> artifactNameToContent = [:]
    for (int i = 0; i < files.size(); i++) {
        def f = files[i]
        if (f.name ==~ regex) {
            String artifactName = f.relativePath
            String artifactVirtualFile = build.getArtifactManager().root().child(artifactName)
            String artifactContent = getVirtualFileConent(artifactVirtualFile)
            artifactNameToContent.put(artifactName, artifactContent)

        }
    }
    return artifactNameToContent
}

def getVirtualFileConent(def virtualFile){
    InputStream is = null
    try {
        is = a.open()
        return is.text
    } finally {
        is?.close()
    }
}
    
//getArtifactToConentMap.groovy
def呼叫(args){
def build=args.build
def regex=args.regex
def files=build.getArtifacts()
映射artifactNameToContent=[:]
对于(int i=0;i
然后您可以按如下方式使用:

Map<String, String> jsonArtifactsNameToContent = getArtifactToConentMap(build: currentBuild.rawBuild, regex: /.*\.json/))
Map jsonArtifactsNameToContent=getArtifactToConentMap(build:currentBuild.rawBuild,regex:/.*\.json/)