You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

请求协助: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

火山引擎 最新活动