未提供项目描述
项目描述
OpenSAFELY工作运行器
工作运行器是一种封装
- 检出OpenSAFELY研究仓库的任务的服务;
- 在通过作业队列请求时执行其在
project.yaml
配置文件中定义的操作;并将 - 其结果存储在特定位置。
快速参考
最终用户可以在OpenSAFELY文档中找到更多信息。
工作原理
在生产中,此软件在主数据提供者基础设施中的一个安全服务器上作为循环运行。它轮询OpenSAFELY作业服务器,寻找运行作业的请求。
作业属于一个工作区
。这描述了包含正在执行OpenSAFELY合规项目的git仓库;git分支,以及要使用的数据库类型。工作区还充当一种命名空间,用于对作业的输出进行分区。
符合OpenSAFELY规范的仓库必须提供一个project.yaml
文件,该文件描述了如何将请求的作业转换为可以在安全服务器上的子进程中运行的命令(& 参数)。它融合了依赖关系的概念,因此生成图表的操作可能依赖于提取数据库中为该图表数据的操作。有关更多信息,请参阅操作参考。
操作可以定义outputs
;这些在磁盘上持久化,并可供工作区中的后续操作以及有权登录服务器查看原始文件的用户使用。
运行者负责按顺序执行依赖项。默认情况下,它会跳过重新运行依赖项,如果之前的运行产生了在生产环境中仍然存在的输出。运行者还将状态信息报告回作业服务器,并删除可能敏感的信息。
运行者作为opensafely-cli工具的一部分打包,以便用户可以本地测试他们的操作。
作业结构
作业服务器以以下格式以JSON形式提供作业。首先,一个作业必须属于一个工作区
{
"workspace": {
"name": "my workspace",
"repo": "https://github.com/opensafely/job-integration-tests",
"branch": "master",
"db": "full"
}
}
"db"
的可能值为"full"、"slice"和"dummy"。
工作区是一种将属于给定分支、仓库和数据库组合的作业关联起来的方法。为了入队作业,客户端发送如下JSON:
{
"backend": "tpp",
"action_id": "do_thing",
"workspace_id": 1
}
消耗作业
作业运行者是一种安装在具有对给定后端访问权限的机器上的服务。它从服务器接收作业,并消耗那些backend
值与当前BACKEND
环境变量值匹配的作业。
它还必须定义三个环境变量,这些是RFC1838连接URL;这些对应于作业工作区定义中请求的db
,因此命名为FULL_DATABASE_URL
、SLICE_DATABASE_URL
和DUMMY_DATABASE_URL
。
当找到作业时,发生以下操作
- 获取相应的仓库。使用环境中的
PRIVATE_REPO_ACCESS_TOKEN
访问私有仓库。 - 解析其
project.yaml
- 从该文件中提取单独的
actions
- 为请求的操作计算依赖图;例如,一个操作可能在运行之前依赖于三个先前的操作
- 检查图中的每个操作,看是否需要运行
- 以下操作不需要运行:(a)已经从前一个运行生成输出;(b)正在运行;(c)上一次运行失败
- 如果依赖项失败,则请求的操作失败
- 如果依赖项需要运行,则将新的作业推送到队列,并将当前作业推迟
- 如果操作没有需要运行的依赖项,则执行其
docker run
- 完成后,将状态码和信息报告回作业服务器。在成功的情况下,还会发布输出文件位置的列表。在失败的情况下,信息中删除任何可能敏感的信息,并与一个唯一字符串相关联,以便具有必要权限的用户可以登录到生产环境并检查完整的docker日志。
- 从该文件中提取单独的
输出位置
每个操作都定义了一组输出
,这些输出被保存在永久存储位置。项目作者必须将这些输出分类为高度敏感
或中度敏感
。任何可能高度泄露的匿名数据(例如,没有低数量红action)应归类为高度敏感
;作者认为经审查后可能发布的数据应归类为中度敏感
。这种设计允许对协作者审查数据输出的分层权限级别。例如,研究作者通常会访问高度敏感
材料以进行调试;但其他协作者可以访问中度敏感
数据以准备发布(计划添加最小敏感
类别)。
输出因此根据以下环境变量持久化到文件系统路径
# A location where cohort CSVs (one row per patient) should be
# stored. This folder must exist.
HIGH_PRIVACY_STORAGE_BASE=/home/opensafely/high_security
# A location where script outputs (some for publication) should be
# stored
MEDIUM_PRIVACY_STORAGE_BASE=/tmp/outputs/medium_security
Project.yaml
一个有效的项目文件看起来像这样
version: "3.0"
expectations:
population_size: 1000
actions:
generate_study_population:
run: cohortextractor:latest generate_cohort --study-definition study_definition
outputs:
highly_sensitive:
cohort: output/input.csv
run_model:
run: stata-mp:latest analysis/model.do
needs: [generate_study_population]
outputs:
moderately_sensitive:
model: models/cox-model.txt
figure: figures/survival-plot.png
有关project.yaml设置的详细描述,请参阅项目管道文档。
本地操作开发
cohortextractor
命令行工具导入此库,并以一系列同步的docker命令的方式实现动作解析和运行功能,而不是通过作业队列异步实现。
对于开发者
请参阅附加信息。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
哈希值 for opensafely_jobrunner-2.52.4-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7d8aecca94102915366305cb7aa6a96bec44bca867070c83324664ad9ed3750d |
|
MD5 | 91754ca947f52734d422ed752d800a9e |
|
BLAKE2b-256 | 44020134dc59d53b5fd266f077f72656974d22214d0899bcae9685f9927f57e4 |