【问题标题】:Record warnings from a given stage in a jenkins pipeline在詹金斯管道中记录来自给定阶段的警告
【发布时间】:2021-08-03 13:44:28
【问题描述】:

我正在尝试使用 Warnings Next Generation Plugin 在 Jenkins 管道 中记录 GCC 警告。

我在矩阵部分中有多个阶段,我想记录出现在给定阶段上的警告,理想情况下作为奖励,能够区分每个轴值(产品)。

作为一个最小的例子,我编写了以下管道:

pipeline{
    agent { label 'master' }
    stages {
        stage('Create workspace') {
            steps {
                deleteDir()
                sh "echo 'main() { }' > build_1_file.c"
                sh "echo 'int main() { }' > build_2_file.c"
            }
        }
        stage('Main stage') {
            matrix {
                axes {
                    axis {
                        name 'PRODUCT'
                        values 'first_product', 'second_product'
                    }
                }
                stages {
                    stage('Build 1') {
                        steps {
                            echo "Build 1 for ${PRODUCT}"
                            sh "if [ ${PRODUCT} = first_product ]; then gcc build_1_file.c; fi"
                        }
                    }
                    stage('Build 2') { 
                        steps {
                            echo "Build 2 for ${PRODUCT}"
                            sh "gcc build_2_file.c -Wstrict-prototypes"
                            recordIssues tool: gcc(name: "${PRODUCT} GCC warnings")
                        }
                    }
                }
            }
        }
    }
}

第一个问题是,如果我将recordIssues 放在一个阶段,那么之前出现在一个阶段的警告将被记录,而它们不应该被记录。例如,在“Build 1”阶段的build_1_file.c 中检测到的警告将被记录下来。 其次,first_product GCC 警告 和 second_product GCC 警告 都会显示 2 个警告,而只有第二个应该显示(因为 if [ ${PRODUCT} = first_product ])。

有什么解决方案可以做我想做的事吗?

【问题讨论】:

    标签: jenkins jenkins-pipeline warnings-next-generation


    【解决方案1】:

    嗯,我想我终于找到了解决办法。关键是将编译日志重定向到一个文件,并使用该文件的路径作为 gcc 工具的模式。这给出了:

    pipeline{
        agent { label 'master' }
        stages {
            stage('Create workspace') {
                steps {
                    deleteDir()
                    sh "echo 'main() { }' > build_1_file.c"
                    sh "echo 'int main() { }' > build_2_file.c"
                }
            }
            stage('Main stage') {
                matrix {
                    axes {
                        axis {
                            name 'PRODUCT'
                            values 'first_product', 'second_product'
                        }
                    }
                    stages {
                        stage('Build 1') {
                            steps {
                                echo "Build 1 for ${PRODUCT}"
                                sh "gcc build_1_file.c"
                            }
                        }
                        stage('Build 2') { 
                            steps {
                                echo "Build 2 for ${PRODUCT}"
                                sh "if [ ${PRODUCT} = second_product ]; then gcc build_2_file.c -Wstrict-prototypes |& tee ${PRODUCT}.log; fi"
                                recordIssues tool: gcc(pattern: "${PRODUCT}.log", name: "${PRODUCT} GCC warnings", id: "${PRODUCT} GCC warnings")
                            }
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-11
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      相关资源
      最近更新 更多