记录来自詹金斯管道中给定阶段的警告
Record warnings from a given stage in a jenkins pipeline
我正在尝试使用 Warnings Next Generation Plugin 在 Jenkins pipeline.
中记录 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 warnings 和 second_product GCC warnings 都会显示 2 个警告,而只有第二个应该(因为if [ ${PRODUCT} = first_product ]
).
是否有解决方案可以满足我的要求?
好吧,我想我终于找到了解决办法。关键是将编译日志重定向到一个文件,并使用该文件的路径作为 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")
}
}
}
}
}
}
}
我正在尝试使用 Warnings Next Generation Plugin 在 Jenkins pipeline.
中记录 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 warnings 和 second_product GCC warnings 都会显示 2 个警告,而只有第二个应该(因为if [ ${PRODUCT} = first_product ]
).
是否有解决方案可以满足我的要求?
好吧,我想我终于找到了解决办法。关键是将编译日志重定向到一个文件,并使用该文件的路径作为 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")
}
}
}
}
}
}
}