Jenkins钉钉插件使用自定义变量#
正好在给公司的一个 Electron 项目做自动化发布, 打包流程搞定了, 需要把构建完成的信息推送到公司钉钉群内.
Jenkins 内正好也有一个钉钉推送插件(DingTalk 机器人通知), 但是使用下来发现了一些问题, 我需要把构建的 Commit Message 和上传到 OSS 的构建完成的文件地址, 发到工作群内. 遇到了一些奇奇怪怪的问题

兼容问题#
我为了使用 minio
的插件, 将 Jenkins 升级到了 2.243
, 发现钉钉插件挂了, 具体表现就是 系统配置里面没有 钉钉的配置项.
解决办法
将 钉钉插件降级, 2.3.2
-> 2.3.1
我也不知道为什么就可以, 瞎整整对了
GIT_COMMIT 变量不存在#
这个查了一下 很迷, pipeline 内 git 调用之后环境变量没被赋值, 所以得换个办法
script {
def git_var = checkout([
$class: 'GitSCM',
branches: [[name: '*/master']],
userRemoteConfigs: [[
credentialsId: 'github-haozi23333',
url: 'https://github.com/xxxxxxx/xxxxxx'
]]])
env.GIT_COMMIT = git_var.GIT_COMMIT
}
用 script 去执行 checkout (git 命令不行), 会返回全部需要的环境变量. 这时候把它赋值回 env
, 这时候就可以在任何地方调用了
获取 COMMIT_MESSAGE#
获取指定的 CIT_COMMIT
hash 的提交信息, 写入到环境变量 COMMIT_MESSAGE
script {
env.COMMIT_MESSAGE = sh(script:"git --no-pager show -s -n 1 --format='%B' ${GIT_COMMIT}", returnStdout: true).trim()
}
加一个 trim 是因为 returnStdout 会多一个空格
钉钉支持自定义环境变量#
这一步我当时试了很久, 各种姿势都试过了. issue 里面作者说了支持, 反正我没试出来
把钉钉插件的 debug 模式开一下, 看一下构建的日志, 会发现插件在加载的时候, 会把全部的环境变量 log 出来. 根据测试. 插件在 pipeline 开始的时候就会把所有的环境变量保存在自己的插件内.即使你在后面修改了环境变量, 也不生效, 也不会加载任何自定义的变量
所以我把目光又双叒转向了 script
script {
def message = """构建 ID ${BUILD_DISPLAY_NAME}
当前 GIT 版本: ${env.GIT_COMMIT}
构建产物下载地址: https://oss.haozi.cool/haozi-static/xxxxx/${ARCHIVE_FILENAME}
构建说明: ${env.COMMIT_MESSAGE}"""
dingtalk (
robot: 'xxxxxxx-xxxx-xx-xxxx-xxxx',
type: 'TEXT',
text: [
message
]
)
}
对! 没错, 我们在 script
里面拼接好要发送的字符串, 再以变量的形式交给 dingtalk, 这时候就可以发送正常了
~#
第一次用 Jenkins 有点难顶, 幺蛾子有点多, minio 的插件还得自己 build, 各种东西都要配置
除另有声明外,本博客文章均采用 知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 进行许可。