第2章 安装Cromwell与MiniWDL:搭建你的第一个运行环境

工欲善其事,必先利其器。写好了WDL脚本,总得有个地方跑起来看看效果吧?

这一章,我们就来把两个最常用的WDL执行引擎装上——Cromwell和MiniWDL。前者是生产环境的主力,后者是本地调试的利器。我个人建议,初学者两个都装,先用MiniWDL快速验证逻辑,再用Cromwell跑正式任务。

2.1 环境准备:先看看你的机器够不够格

别急着装,先确认三件事:Java、操作系统和网络。我踩过的最大的坑,就是Java版本不对。

依赖项 最低要求 推荐版本 备注
Java Java 8 Java 11 或 Java 17 Cromwell对Java 8支持已逐步减弱
操作系统 Linux / macOS / Windows Ubuntu 20.04+ 或 macOS 12+ Windows建议用WSL2
网络 可访问GitHub和Docker Hub 稳定的外网连接 下载JAR和拉取镜像需要
磁盘空间 5GB 20GB+ Cromwell运行时会生成中间文件
检查Java版本: 打开终端,输入 java -version。如果看到“openjdk version 11.0.x”或者“1.8.x”,基本就稳了。如果是Java 7或更老,请先升级。

2.2 安装Cromwell:下载一个JAR包就够了

Cromwell是一个Java应用,说白了就是一个可执行的JAR文件。不需要编译,不需要安装包,下载即用。

2.2.1 获取最新版JAR

我每次装新环境时,都直接去GitHub的Release页面。也可以命令行搞定:

# 下载最新稳定版(以86版本为例)
wget https://github.com/broadinstitute/cromwell/releases/download/86/cromwell-86.jar

# 或者用curl
curl -L -o cromwell-86.jar \
  https://github.com/broadinstitute/cromwell/releases/download/86/cromwell-86.jar
版本选择: 别总追最新版。我遇到过两次因为升级太激进,导致旧WDL脚本报兼容性错误。建议选“Latest release”标签下的版本,而不是“Pre-release”。

2.2.2 运行Cromwell服务器模式

下载完成后,用一行命令就能启动:

java -jar cromwell-86.jar server

你会看到一堆日志刷刷刷地往上翻。别慌,等到出现类似下面的信息,就说明启动成功了:

[info] Server: 启动完成
[info] Swagger UI: http://localhost:8000
[info] API 文档: http://localhost:8000/api

这时候打开浏览器,访问 http://localhost:8000,能看到Cromwell的Swagger交互界面。嗯,这里只是告诉你它活了,具体怎么用,我们下一章再聊。

2.2.3 单次运行模式(更适合测试)

如果只是跑一个WDL试试,可以不启动服务器,用单次模式:

java -jar cromwell-86.jar run my_workflow.wdl

这种模式跑完就退出,不需要手动停服务。我个人习惯在调试阶段用单次模式,省事。

2.3 安装MiniWDL:要的就是轻量

MiniWDL是Cromwell的“弟弟”,专为本地快速调试设计。它不需要Java,只用Python就能跑。说实话,我80%的WDL调试工作都是在MiniWDL上完成的,Cromwell只用来跑最终版本。

2.3.1 Python环境准备

MiniWDL基于Python 3,确保你装了Python 3.6或更高版本:

python3 --version

如果没装,别急。用系统包管理器或去python.org下载一个。

2.3.2 pip安装MiniWDL

这是我写过的最短的安装命令:

pip install miniwdl

或者指定版本:

pip install miniwdl==1.10.1
虚拟环境: 建议在虚拟环境里装,避免污染全局Python。我习惯用 python3 -m venv wdl_env 先创建一个独立环境。

2.3.3 验证安装

装好之后,试试看:

miniwdl --version

如果输出类似 miniwdl 1.10.1,就搞定了。

2.3.4 跑一个Hello World

我们来写个最简单的WDL,验证一下整个链条:

version 1.0

workflow hello {
    call hello_task
}

task hello_task {
    command {
        echo "Hello, WDL World!"
    }
    output {
        String out = read_string(stdout())
    }
}

保存为 hello.wdl,然后用MiniWDL执行:

miniwdl run hello.wdl

如果一切顺利,你会看到类似这样的输出:

...
[2025-01-15 10:23:45] outputs:
{
  "hello.hello_task.out": "Hello, WDL World!"
}

看到这个输出,就说明你的WDL环境已经配好了。是不是很简单?

2.4 安装后的验证清单

我曾碰到过一个同事,装完Cromwell后直接用,结果跑了一整天发现任务一直在排队——原来是服务器没启动。为了避免这种低级错误,建议每次装完后跑一遍下面的验证:

  1. Cromwell服务器模式: 启动后访问 http://localhost:8000,确认Swagger页面能打开。
  2. Cromwell单次模式: 用上面那个hello.wdl跑一次,看能否正常输出。
  3. MiniWDL: 同样的WDL,用 miniwdl run hello.wdl 跑一遍。
  4. Java版本确认: java -version 确认是11或17。
  5. Python版本确认: python3 --version 确认3.6+。

关键提醒: 如果Cromwell启动时报错“Java heap space”,说明你的内存不够。可以在启动命令里加参数:java -Xmx4g -jar cromwell-86.jar server,把堆内存上限提高到4GB。

2.5 知识结构一览

为了让你对整个安装体系有个直观印象,我画了张图。你想想看,这个安装过程其实就三块:环境检查、Cromwell安装、MiniWDL安装。

WDL执行环境安装流程图 准备工作 环境检查 Java 11+ 操作系统兼容 网络 & 磁盘 Cromwell 安装 下载JAR包 server / run 模式 MiniWDL 安装 pip install miniwdl miniwdl run 环境就绪 验证通过后才算安装完成

装好这两个工具,你已经搭建起了WDL开发的基本环境。后面的章节里,我们会在这两个引擎上反复练习。记住,MiniWDL是你的调试伙伴,Cromwell是正式工作的主力。两者配合,事半功倍。