0

我们使用 Jenkins,将人工制品和构建信息发布到 Artifactory,然后进行 X 射线扫描。我们发现的问题是,我们似乎只获得了工件的某些内部版本号的 X 射线“组件”报告。没有错误,除了报告似乎不在 Xray 中(通过“组件”搜索并使用 Artefact 名称时)。

例如,如果人工制品是 hellofred::develop::55,那么我们可能会进行 X 射线扫描(如下所示),并且该人工制品的报告确实存在于 X 射线中。但是,当我们从 Jenkins 进行另一个构建时(没有更改代码,而是重新构建、部署和扫描),我们看到一切都成功了,并且没有看到任何错误。但是,我们在 Xray 中看不到 hellofred::develop::56。它仍然说最新的是55!解决问题的最佳方法是什么?

作为标准,我们使用 Jenkins JFrog 插件代码来进行 X 射线扫描。例如,我们的管道代码看起来像......

 def scanConfig = [
                        'buildName': script.artifactoryBuildInfo.name,
                        'buildNumber': script.artifactoryBuildInfo.number,
                        'failBuild'  : true
                    ]
                    def scanResult = artifactory.xrayScan scanConfig

该报告中的 Jenkins 控制台输出示例甚至向我们显示了指向 hellofred::develop::56 的链接的 URL,但是当我们单击它时,它会将我们带到最新的 hellofred::develop::55。(这是因为似乎没有 56 的报告) 例如。Jenkins 控制台输出的一些摘录是:

11:03:31  [Pipeline] }
11:03:31  [Pipeline] // stage
11:03:31  [Pipeline] stage (hide)
11:03:31  [Pipeline] { (Xray scan) (hide)
11:03:31  [Pipeline] echo (hide)
11:03:31  Xray scan: true
11:03:31  [Pipeline] xrayScanBuild (hide)
11:03:40  Build hellofred:: develop number 56 was scanned by Xray and passed with no Alerts
11:03:40  Xray scan details are available at: http://xray-1.blah.blah:8000/web/#/component/details/build:~2F~2Fhellofred%20::%20develop%2F56
11:03:40  [Pipeline] echo (hide)
11:03:40  XRAY failed: SUCCESS
11:03:40  [Pipeline] echo (hide)
11:03:40  {
11:03:40    "summary" : {
11:03:40      "message" : "Build hellofred :: develop number 56 was scanned by Xray and passed with no Alerts",
11:03:40      "total_alerts" : 0,
11:03:40      "fail_build" : false,
11:03:40      "more_details_url" : "http://xray-1.blah.blah:8000/web/#/component/details/build:~2F~2Fhellofred%20::%20develop%2F56”
11:03:40    },
11:03:40    "alerts" : [ ],
11:03:40    "licenses" : [ {
11:03:40      "name" : "Unknown",
11:03:40      "components" : [etc blah blah blah],
11:03:40      "full_name" : "Unknown license"
11:03:40    }, {
11:03:40      "name" : "Apache-2.0",
11:03:40      "components" : [ "gav://org.apache.logging.log4j:log4j-slf4j-impl:2.11.2", "gav://org.mongodb:mongodb-driver:3.8.2", 
4

2 回答 2

0

问题可能是您没有发布信息?让我分享一个执行非常相似的示例管道脚本。

node {
    def server = Artifactory.server SERVER_ID
    def rtGradle = Artifactory.newGradleBuild()
    //Clone example code from GitHub repository
    stage 'Build'
        git url: 'myGitServer', branch: 'myProjectBranch'
    //Configure Artifactory repository to pull/push artifacts
    stage 'Artifactory configuration'
        rtGradle.tool = 'gradle-3.5' // Tool name from Jenkins configuration
        rtGradle.deployer repo: 'gradle-release', server: server // This is where I deploy to
        rtGradle.resolver repo:'libs-release', server: server
        rtGradle.deployer.addProperty("unit-test", "pass").addProperty("qa-team", "platform", "ui")
        def buildInfo = Artifactory.newBuildInfo() // This is where the initial BuildInfo is created
        buildInfo.env.capture = true // This is where all environment data is captured
    //Run gradle build
    stage 'Exec Gradle'
        sh 'rm -rf ~/.gradle/caches'
        rtGradle.run rootDir: "gradle-examples/4/gradle-example-ci-server/", buildFile: 'build.gradle', tasks: 'clean artifactoryPublish', buildInfo: buildInfo
    //Publish artifacts to Artifactory along with build information and scan build artifacts in Xray
    stage 'Publish Build Information & Scan Artifacts'
        server.publishBuildInfo buildInfo // This is where BuildInfo is published
            def scanConfig = [
                'buildName'      : env.JOB_NAME,
                'buildNumber'    : env.BUILD_NUMBER,
                'failBuild'      : true
            ]
            def scanResult = server.xrayScan scanConfig
            echo scanResult as String
}
于 2019-07-05T15:04:33.357 回答
0

我已经确认我们确实将 buildInfo 发布到 Artifactory ,如上所述。这似乎是一个非常奇怪的问题,因为它是间歇性的。但是,我们始终注意到 X 射线组件的“修改日期”字段始终会针对报告进行更新,但不一定是“最新版本号”。例如。如果 Jenkins 在 8 月 1 日下午 3:55 为 hello-fred 执行构建号 88,我们将信息发布到 Artifactory,它确实存在于 hello-fred:构建号 88。但是 X 射线扫描触发,并且,当我们搜索对于组件“hello-fred”,我们有时可能会看到最新的构建报告,例如。“hello-fred:88”,最新版本号为 88,“DATE modified”为 8 月 1 日下午 3:55。但是,这是间歇性的,我们经常注意到 Xray 中似乎缺少此组件的报告。例如,它可能没有更新。最新版本是最后一个。例如,也许是“82”。因此,Xray 说最新版本是“82”(尽管它为我们提供了显然成功生成的报告“88”的链接)。但是,“修改日期”字段始终会正确更新。例如。8 月 1 日下午 3 点 55 分。我们正在使用“试用许可证”。所以。不知道如何最好地解决这个问题?有任何想法吗?Xray 中的某些东西似乎丢失了。例如,可能是 RabbitMq 队列上的消息?这是一个已知的错误?或者如何最好地排除故障?谢谢

于 2019-07-25T10:18:16.670 回答