请求协助:Jenkins与MATLAB集成——将构建号传入脚本生成对应文件
折腾10小时确实够闹心的,我前阵子帮同事解决过完全一样的需求,给你一套亲测可行的步骤,分分钟搞定:
核心思路
Jenkins的构建号是内置环境变量BUILD_NUMBER,我们只需要把它作为参数传给MATLAB脚本,在脚本里用这个参数命名文件,再把需要的输出写到一个文本文件,最后让Jenkins读取这个文件就能拿到变量值。
步骤1:在Jenkins中传递构建号给MATLAB
不管你是用自由风格任务还是Pipeline,都可以直接调用MATLAB的命令行模式传递参数:
自由风格任务配置
添加一个「Execute shell」(Linux/macOS)或「Execute Windows batch command」(Windows)构建步骤,输入命令:
# Linux/macOS matlab -batch "your_script_name('${BUILD_NUMBER}')" # Windows matlab.exe -batch "your_script_name('${BUILD_NUMBER}')"
your_script_name是你的MATLAB脚本文件名(不要加.m后缀)${BUILD_NUMBER}是Jenkins的内置变量,会自动替换成当前构建的编号-batch参数让MATLAB无界面运行脚本,执行完自动退出,适合CI环境
Pipeline脚本配置
如果用Jenkinsfile,写法更简洁:
stage('Run MATLAB Analysis') { steps { sh 'matlab -batch "your_script_name(\'${BUILD_NUMBER}\')"' } }
步骤2:MATLAB脚本接收参数并生成文件
修改你的MATLAB脚本,改成带参数的函数形式,示例如下:
function process_build(build_num) % 1. 生成以构建号命名的结果文件 result_filename = sprintf('analysis_result_build_%s.xlsx', build_num); % 这里替换成你的实际业务逻辑,比如计算、数据处理 sample_results = [1:10; rand(1,10)]; % 写入文件 writematrix(sample_results, result_filename); disp(['已生成结果文件: ', result_filename]); % 2. 输出需要传递回Jenkins的变量(比如处理状态、关键指标) output_variable = sprintf('构建%s处理完成,共生成10条数据', build_num); % 把变量写入文本文件,方便Jenkins读取 fid = fopen('jenkins_output.txt', 'w'); fprintf(fid, '%s', output_variable); fclose(fid); end
- 脚本必须是函数形式才能接收命令行传入的参数
- 用
sprintf或者字符串拼接生成带构建号的文件名,支持任意格式(.mat/.csv/.xlsx等) - 把需要传回Jenkins的变量写入一个文本文件,这里用
jenkins_output.txt作为示例
步骤3:将MATLAB输出传回Jenkins
在MATLAB执行步骤之后,添加一个构建步骤读取刚才生成的文本文件,把内容转为Jenkins环境变量:
自由风格任务
添加「Execute shell」步骤:
# 读取MATLAB输出的变量 BUILD_RESULT=$(cat jenkins_output.txt) # 把变量写入环境变量文件,方便后续步骤调用 echo "BUILD_RESULT=${BUILD_RESULT}" >> $WORKSPACE/build_env.properties
如果需要在后续步骤(比如邮件通知、归档)中使用这个变量,可以安装EnvInject Plugin,然后在「构建后操作」里添加「Inject environment variables」,选择刚才生成的build_env.properties文件即可。
Pipeline脚本
直接在Jenkinsfile里读取并设置变量:
stage('Get MATLAB Output') { steps { script { def buildResult = readFile('jenkins_output.txt').trim() env.BUILD_RESULT = buildResult } } } // 后续步骤可以直接用这个变量,比如发送通知 stage('Notify') { steps { echo "MATLAB处理结果: ${env.BUILD_RESULT}" // 这里可以加邮件通知、Slack通知等逻辑 } }
避坑小贴士
- 确保Jenkins运行用户对工作目录有读写权限,否则MATLAB无法生成文件
- 如果MATLAB脚本不在Jenkins工作目录,要在命令里指定绝对路径,比如
matlab -batch "/path/to/your/script/your_script_name('${BUILD_NUMBER}')" - 测试时可以先手动运行MATLAB命令,比如
matlab -batch "process_build('123')",确认文件能正常生成,再集成到Jenkins
内容的提问来源于stack exchange,提问作者parth000033




