Jenkinsfile / recordIssues 从文件创建“过滤器”数组

问题描述 投票:0回答:1

我们正在使用“Warnings Next Generation Plugin”中的

recordIssues
来可视化 Trivy-Dockerimage-Scanner“aquasec/trivy”生成的结果。该工具可以针对多个 CVE 数据库扫描 docker 镜像。

结果由

生成
        recordIssues(enabledForFailure: true,
          aggregatingResults: true,
          qualityGates: [[threshold: 1, type: 'TOTAL_ERROR', unstable: true]],
          filters: [
            excludeType('CVE-2017-15095'),
            excludeType('CVE-2017-17485'),
          ],
          tools: [issues(pattern: '*-issues.json', reportEncoding: 'UTF-8')])

我有大约。 180 个 CVE 可以忽略,因为它们不会影响我们的软件。我想从外部文件动态生成数组,而不是添加 180 次

excludeType('CVE-2017-17485'),
等等...

更新

根据 Matts 的回答,脚本现在看起来像这样:

  stages {
    stage("Scan") {
      steps {
        sh """#!/bin/bash 
           echo "do some stuff"
        """
        script {
          List<String> cve = readYaml file: 'ignored_cves.yaml'
        }
        recordIssues(enabledForFailure: true,
          aggregatingResults: true,
          qualityGates: [[threshold: 1, type: 'TOTAL_ERROR', unstable: true]],
          filters: cve.collect {excludeType(it)},
          tools: [issues(pattern: '*-issues.json', reportEncoding: 'UTF-8')])
     }
    }
  }

但是当在 Jenkins 中运行时我收到:

groovy.lang.MissingPropertyException: No such property: cve for class: groovy.lang.Binding
    at groovy.lang.Binding.getVariable(Binding.java:63)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:271)

我想知道如何访问

cve
内的
recordIssue
Groovy 对象。可能我必须在 Jenkins 库内执行此操作。

jenkins jenkins-pipeline jenkins-groovy
1个回答
0
投票

我认为这是因为你的

cve
变量只存在于
script { ... }

要么拿出来:

List<String> cve = null // <--- out of script { ... } block

pipeline {
  ...
  stages {
    stage("Scan") {
      steps {
        ...
        script {
          cve = readYaml file: 'ignored_cves.yaml'
        }
        recordIssues(...,
          ...,
          ...,
          filters: cve.collect {excludeType(it)},
          ...)
     }
    }
  }
  ...
}

...或将

recordIssues
移至
script { ... }
块中:

  stages {
    stage("Scan") {
      steps {
        ...
        script {
          List<String> cve = readYaml file: 'ignored_cves.yaml'
          recordIssues(... // <--- within script { ... } block
            ...
            ...
            filters: cve.collect {excludeType(it)},
            ...)
        }
     }
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.