Skip to content

一、Jenkins Build User Vars 插件使用手册

1.1 插件简介

Build User Vars Plugin 是一个 Jenkins 插件,用于在构建过程中获取触发构建的用户信息。该插件可以提供构建用户的各种属性,如用户名、用户 ID、用户邮箱等,这些信息可以在构建过程中被引用,用于日志记录、邮件通知、构建描述等场景。

  • 提供多种构建用户相关变量,如用户 ID、用户全名、用户邮箱等
  • 支持在 Pipeline 脚本和自由风格项目中使用
  • 可与其他插件(如 Email Extension、Build Name Setter 等)结合使用,增强通知和记录功能
  • 适用于需要记录或通知构建触发者信息的场景

1.2 插件安装

1.3 可用变量

安装插件后,以下环境变量将在构建过程中可用:

变量名描述
BUILD_USER触发构建的用户的全名
BUILD_USER_FIRST_NAME触发构建的用户的名字
BUILD_USER_LAST_NAME触发构建的用户的姓氏
BUILD_USER_ID触发构建的用户的 ID(登录名)
BUILD_USER_EMAIL触发构建的用户的邮箱地址

1.4 使用方法

1.4.1 在 Pipeline 中使用

在 Pipeline 脚本中,需要使用 wrap 函数将需要访问用户变量的代码块包装起来:

groovy
pipeline {
    agent any
    
    stages {
        stage('显示构建用户信息') {
            steps {
                wrap([$class: 'BuildUser']) {
                    script {
                        echo "构建由以下用户触发:"
                        echo "用户全名: ${env.BUILD_USER}"
                        echo "用户 ID: ${env.BUILD_USER_ID}"
                        echo "用户邮箱: ${env.BUILD_USER_EMAIL}"
                        echo "用户名: ${env.BUILD_USER_FIRST_NAME}"
                        echo "用户姓: ${env.BUILD_USER_LAST_NAME}"
                    }
                }
            }
        }
    }
}

1.4.2 在 post 部分使用

通常在构建完成后的通知中,我们需要获取构建用户信息:

groovy
pipeline {
    agent any
    
    stages {
        stage('构建') {
            steps {
                echo "执行构建步骤..."
            }
        }
    }
    
    post {
        success {
            wrap([$class: 'BuildUser']) {
                script {
                    echo "构建成功!由 ${env.BUILD_USER} 触发的构建已完成。"
                }
            }
        }
        failure {
            wrap([$class: 'BuildUser']) {
                script {
                    echo "构建失败!请通知 ${env.BUILD_USER} (${env.BUILD_USER_EMAIL}) 检查构建日志。"
                }
            }
        }
    }
}

1.5 实际应用场景

1.5.1 与邮件通知结合

结合 Email Extension Plugin 发送包含构建用户信息的邮件通知:

groovy
pipeline {
    agent any
    
    stages {
        stage('构建') {
            steps {
                echo "执行构建步骤..."
            }
        }
    }
    
    post {
        always {
            wrap([$class: 'BuildUser']) {
                script {
                    def userInfo = "${env.BUILD_USER ?: '系统自动'} (${env.BUILD_USER_EMAIL ?: 'admin@srebro.cn'})"
                    
                    emailext (
                        subject: "构建 ${currentBuild.currentResult}: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                        body: """
                        <p>构建状态: ${currentBuild.currentResult}</p>
                        <p>构建触发者: ${userInfo}</p>
                        <p>构建链接: <a href="${env.BUILD_URL}">${env.BUILD_URL}</a></p>
                        <p>构建日志: <a href="${env.BUILD_URL}console">${env.BUILD_URL}console</a></p>
                        """,
                        to: "${env.BUILD_USER_EMAIL}",
                        mimeType: 'text/html'
                    )
                }
            }
        }
    }
}

1.5.2 与构建名称和描述结合

结合 Build Name and Description Setter 插件,在构建名称和描述中包含用户信息:

groovy
pipeline {
    agent any
    
    stages {
        stage('构建') {
            steps {
                echo "执行构建步骤..."
            }
        }
    }
    
    post {
        always {
            wrap([$class: 'BuildUser']) {
                script {
                    // 设置构建名称
                    buildName "#${BUILD_NUMBER} - ${env.BUILD_USER_ID}"
                    // 设置构建描述
                    buildDescription "构建触发者: ${env.BUILD_USER}<br/>  触发者邮箱: ${env.BUILD_USER_EMAIL} <br/> 构建状态: ${currentBuild.currentResult}  <br/> 构建时间: ${new Date().format("yyyy-MM-dd HH:mm:ss")}<br/>"
                }
            }
        }
    }
}

1.6 完整 Pipeline 示例

以下是一个完整的 Pipeline 示例,展示了如何在实际项目中使用 Build User Vars 插件:

groovy
pipeline {
    agent any
    
    stages {
        stage('构建') {
            steps {
                echo "执行构建步骤..."
            }
        }
    }
    
    post {
        always {
            wrap([$class: 'BuildUser']) {
                script {
					//获取构建者名称,邮箱,如果邮箱没有设置,就默认设置为admin@srebro.cn
                    def userInfo = "${env.BUILD_USER ?: '系统自动'} (${env.BUILD_USER_EMAIL ?: 'admin@srebro.cn'})"
                    //设置构建名称
                    buildName "#${BUILD_NUMBER} - ${env.BUILD_USER_ID}"
                    //设置构建描述
                    buildDescription "构建触发者: ${env.BUILD_USER}<br/>  触发者邮箱: ${env.BUILD_USER_EMAIL} <br/> 构建状态: ${currentBuild.currentResult}  <br/> 构建时间: ${new Date().format("yyyy-MM-dd HH:mm:ss")}<br/>"



                    emailext (
                        subject: "构建 ${currentBuild.currentResult}: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                        body: """
                        <p>构建状态: ${currentBuild.currentResult}</p>
                        <p>构建触发者: ${env.BUILD_USER}</p>
                        <p>构建链接: <a href="${env.BUILD_URL}">${env.BUILD_URL}</a></p>
                        <p>构建日志: <a href="${env.BUILD_URL}console">${env.BUILD_URL}console</a></p>
                        """,
                        to: "${env.BUILD_USER_EMAIL}",
                        mimeType: 'text/html'
                    )
                }
            }
        }
    }
}

1.7 注意事项

  1. 权限设置:确保 Jenkins 用户有足够的权限获取用户信息。

  2. 非用户触发的构建:对于由定时任务或上游项目触发的构建,用户变量可能为空。在使用这些变量时,应该添加适当的空值检查或默认值。

  3. 变量作用域:用户变量只在 wrap([$class: 'BuildUser']) 块内可用,超出此范围将无法访问。

  4. 与其他插件兼容性:该插件与大多数 Jenkins 插件兼容,但在某些特殊场景下可能需要额外配置。

  5. 安全考虑:用户信息属于敏感数据,在日志和通知中使用时应注意信息安全。

最近更新

采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 运维小弟