如何在Jenkins中获取触发任务的Gerrit变更关联审核人邮箱信息
获取Gerrit变更审核人邮箱并注入Jenkins变量的实现方案
前置准备
- Jenkins节点已安装
ssh客户端、jq解析工具 - 已将Jenkins服务的SSH公钥添加到Gerrit操作账号的密钥列表中,该账号需具备变更信息读取权限
- Jenkins已安装EnvInject插件(用于注入自定义环境变量)
实现步骤
- 添加构建执行脚本步骤
在Jenkins任务的构建环节新增Shell执行步骤,填入以下脚本,替换其中Gerrit服务相关的私有配置即可:
# Gerrit服务配置,根据实际场景修改 GERRIT_HOST="gerrit.example.com" GERRIT_PORT="29418" GERRIT_USER="jenkins_gerrit_admin" # 调用Gerrit SSH API拉取当前变更的所有审核人邮箱 ssh -p ${GERRIT_PORT} ${GERRIT_USER}@${GERRIT_HOST} gerrit query --current-patch-set --format=JSON ${GERRIT_CHANGE_ID} |\ jq -r '.reviewers[]?.email' | sort | uniq | tr '\n' ',' > temp_reviewers.txt # 生成可注入的环境变量文件,去除末尾多余逗号 echo "GERRIT_REVIEWERS_EMAIL=$(sed 's/,$//' temp_reviewers.txt)" > gerrit_env.properties
脚本用到的
GERRIT_CHANGE_ID是Gerrit Code Review插件默认注入的环境变量,无需额外配置。
注入自定义环境变量
新增「Inject environment variables」构建步骤,属性文件路径填写上一步生成的gerrit_env.properties,注入后GERRIT_REVIEWERS_EMAIL变量在整个任务生命周期内均可调用,值为所有审核人逗号分隔的邮箱列表。配置email-ext邮件通知
在email-ext插件的收件人配置中,直接填入$GERRIT_REVIEWERS_EMAIL,与内置的$GERRIT_CHANGE_OWNER_EMAIL、$BUILD_USER_EMAIL等变量拼接即可同时发送给变更所有者、审核人、任务所有者等所有目标对象。
可选优化
- 若Gerrit版本支持REST API,可替换SSH接口为HTTP请求,调用
/changes/${GERRIT_CHANGE_ID}/reviewers接口解析返回值即可,无需配置SSH密钥,使用Gerrit HTTP令牌做身份认证。 - 可在脚本中增加空值判断逻辑,若审核人列表为空则给变量赋默认值,避免邮件发送异常。
内容的提问来源于stack exchange,提问作者MArhEV
相关产品推荐
相关产品推荐

