Debian中Fortran项目如何持续集成
导读:Debian 上 Fortran 项目的持续集成实践 一、环境与工具选型 编译器与基础工具:安装 gfortran、构建工具(make 或 fpm)、版本控制 git。示例:sudo apt update && sudo...
Debian 上 Fortran 项目的持续集成实践
一、环境与工具选型
- 编译器与基础工具:安装 gfortran、构建工具(make 或 fpm)、版本控制 git。示例:sudo apt update & & sudo apt install -y gfortran make git。
- 常用依赖库:数值计算用 libblas-dev、liblapack-dev;并行计算用 libopenmpi-dev(Fortran 2008 接口常用 -lmpi_f08);FFT 用 libfftw3-dev;HDF5 用 hdf5-dev。
- 单元测试框架:选择 FRUIT 或 pFUnit,便于在 CI 中自动化运行测试并判定结果。
- CI 引擎:自建可用 Jenkins(Debian 上 apt 安装、配合 Webhook 触发);也可用 GitLab CI/CD 或 Travis CI 等托管服务,编写 Jenkinsfile 或 .gitlab-ci.yml 即可。
二、本地可复现的构建与测试
- 使用 gfortran 与 Make 的最小示例
- 编译:gfortran -O2 -c utils.f90 main.f90 -o app
- 运行:./app
- 使用 fpm 的最小示例
- 构建:fpm build
- 运行:fpm run
- 使用 FRUIT 的单元测试示例
- 安装:sudo apt install -y fruit
- 编译:gfortran -c my_module.f90 test_my_module.f90 -lfruit -o test_app
- 运行:./test_app(观察断言结果)
- 使用 pFUnit 的单元测试示例
- 安装:从源码构建并安装 pFUnit(遵循其官方构建流程)
- 编译与运行:使用 pFUnit 提供的构建/运行方式执行测试并输出结果
- 建议做法:在仓库根目录提供 Makefile 或 fpm.toml,并配套 run_tests.sh,保证“本地一键构建+测试”与 CI 脚本保持一致。
三、Jenkins 自建 CI 流水线
- 安装与插件
- 安装:sudo apt update & & sudo apt install -y jenkins
- 启动:sudo systemctl enable --now jenkins
- 必要插件:Pipeline、Git、Generic Webhook Trigger(用于代码推送触发)
- 代码源与触发器
- 在 Jenkins 任务中配置 Git 仓库 URL 与凭证
- 在“构建触发器”选择 Generic Webhook Trigger,可设置 Token;在代码托管侧(如 GitLab/Codeup)添加 Webhook:http://JENKINS_URL/generic-webhook-trigger/invoke?token=YOUR_TOKEN
- 示例 Jenkinsfile(多矩阵构建 + 测试)
- 说明:并行在不同 gfortran 版本与 OpenMPI 开关下构建与测试;测试阶段执行测试程序并根据退出码判定成功/失败
- 关键要点:使用 matrix 做编译器与特性的组合覆盖;测试阶段以脚本退出码作为质量门禁
- 参考片段:
pipeline { agent any tools { tool 'Default' } // 确保已配置好 gfortran 工具 stages { stage('Build and Test') { matrix { axes { axis { name 'GFORTRAN'; values '10', '11', '12' } axis { name 'MPI'; values 'no', 'yes' } } stages { stage('Install deps') { steps { sh 'sudo apt-get update & & sudo apt-get install -y gfortran-$GFORTRAN libblas-dev liblapack-dev' } when { expression { env.MPI == 'yes' } } steps { sh 'sudo apt-get install -y libopenmpi-dev' } } stage('Build') { steps { sh ''' if [ "$MPI" = "yes" ]; then FC=mpif90 FFLAGS="-O2 -fopenmp" make -f Makefile.mpi else FC=gfortran FFLAGS="-O2" make fi ''' } } stage('Test') { steps { sh './run_tests.sh' } } } } } } post { always { echo 'CI finished.' } failure { echo 'Build or tests failed.' } } }
四、GitLab CI 示例
- 在仓库根目录创建 .gitlab-ci.yml,利用官方 fortran 镜像或 Debian 镜像安装 gfortran 与依赖,执行构建与测试
- 示例:
image: fortran:latest # 或 debian:stable-slim before_script: - apt-get update -qq & & apt-get install -y -qq gfortran libblas-dev liblapack-dev make build: script: - make artifacts: paths: - app expire_in: 1 week test: script: - ./run_tests.sh - 说明:将 run_tests.sh 设计为以退出码表示测试结果;如需 MPI,在 before_script 中增加 libopenmpi-dev 并在构建阶段使用 mpif90。
五、质量门禁与交付建议
- 编译器矩阵:至少覆盖 gfortran 10/11/12,确保对现代语言特性与优化选项的兼容
- 依赖覆盖:同时跑 串行 与 OpenMPI 场景(链接 -lmpi_f08),验证并行接口与构建链路
- 测试规范:使用 FRUIT/pFUnit 编写可自动判定的单元测试;测试程序以 0 退出码表示通过,非 0 即失败
- 产物归档:保存可执行文件、测试日志与覆盖率报告(若有),便于回溯与发布
- 触发策略:代码 push/merge request 即触发;必要时对 master/main 分支增加额外门禁(如更严格的静态检查或性能基准)
- 渐进增强:在 CI 中加入 Valgrind(检查内存错误)、gprof/perf(性能回归基线)等步骤,提升稳定性与性能可观测性
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian中Fortran项目如何持续集成
本文地址: https://pptw.com/jishu/764669.html
