使用Formbuilder测试和调试本机应用程序

在构建本地应用程序时,您会发现需要使用BaseSpace帐户的真实数据在本地测试应用程序。

可以通过使用Formbuilder开发人员门户中的工具。如果你不熟悉Formbuilder,详情请参阅Formbuilder文档

开始与一个新的本地应用程序和形式

设置本地开发环境

下面的步骤假设您已经为本地应用程序设置了本地开发环境。本指南不会介绍设置的步骤,但您可以参考这个文档引导你完成整个过程。

一旦本机应用虚拟机在本地运行,并打开了通过SSH登录到虚拟机的终端,就可以开始在本地测试应用程序了。

将BaseSpace指向本地虚拟机

  1. 访问开发人员门户并单击我的应用程序

  2. 单击现有的本机应用程序或创建一个新应用程序(确保应用程序类型设置为本地的

  3. 在应用程序的名称下,您将看到一系列选项卡,以细节

  4. 点击表单生成器选项卡

  5. 点击开始为你的应用程序创建和编辑自定义表单按钮

  6. 选择要打开的表单(或使用例子暂时填写),然后单击开放

  7. 配置表单以使其具有正确的输入,以便应用程序可以使用Formbuilder文档

  8. 点击当前的模板在顶部下拉并选择callbacks.js

  9. 修改launchSpeccallbacks.js文件将适当的命令行参数发送到Docker映像以执行应用程序。也可以传入应用程序所需的参数。

在Formbuilder中使用开发人员工具

您现在将看到开发人员工具部分在Formbuilder窗口的右侧窗格。

在本节中,您将看到示例命令行启动本地代理:.复制命令后的内容(例如:Sudo spacedock -a [agent_id] -m https://hoth-mission.basespace.illumina.com)登录到您通过SSH登录到虚拟机的终端并按enter,您应该会看到一条消息,内容如下Docker服务ping成功如果这是成功完成。

现在,您已经将BaseSpace指向本地虚拟机,以运行由BaseSpace中的应用程序通过发送给本地代理按钮。

这里列出了三个按钮:

  • 模拟发射:通过向开发人员显示一个页面来模拟应用程序的启动,该页面使用输入表单的Properties创建了一个模拟AppSession。

  • 创建AppSession:通过基于输入表单创建带有属性的AppSession来模拟启动应用程序

  • 发送给本地代理:创建一个由输入表单指定的新作业,并将该作业从BaseSpace发送到本地虚拟机以在本地运行,如果您遵循前面的步骤并运行须藤太空船坞…命令时,只要按下此按钮,就会看到作业提交到本地终端

模拟发射

模拟发射选项将开发人员带到另一个页面,该页面显示在提交表单和启动应用程序时创建的信息。

这些信息包括:

  • AppSession id在BaseSpace中为通常会生成的AppSession(这个选项实际上不会创建AppSession,参见上面截图顶部的消息)
  • 访问令牌这是为应用程序生成的,以便访问用户帐户中的适当数据
  • 范围访问令牌允许的权限(基于您配置的表单)的
  • 发布规范其中包括注册表中Docker Image的Id,以及启动时将提供给应用程序的命令行
  • 显示完整内容的区域AppSession包括属性。

创建AppSession

创建AppSession选项将开发人员带到另一个页面,该页面显示了在提交表单和启动应用程序时创建的信息模拟发射因为这个选项实际上创建了新的AppSession,而不仅仅是模拟将要创建的AppSession,所以如果需要的话,你可以通过BaseSpace的REST API访问那个AppSession。

否则,单击此按钮后,开发人员被带到的页面与用于的页面相同模拟发射除了顶部的消息是不同的,表明AppSession实际创建。

发送给本地代理

发送给本地代理选项与开发人员工具中的其他选项略有不同。点击发送给本地代理将从BaseSpace的作业调度程序发送作业到本地本地应用程序虚拟机,该虚拟机正在您的机器上运行。BaseSpace将此作业发送到您粘贴示例命令行启动本地代理来自开发人员工具的信息。

BaseSpace发送到本地虚拟机的作业将包括通过创建AppSession而且模拟发射选项。中的命令行参数callbacks.js函数被提供给Docker映像,一旦它被找到或下载到本地,然后执行。

使用发送给本地代理选项,您将需要遵循以下步骤:

  1. 本地运行本机应用程序虚拟机

  2. 从您的终端SSH到虚拟机并登录(用户名和密码都是basespace

  3. 去你的表格Formbuilder然后复制这一行示例命令行启动本地代理并将其粘贴到您通过SSH登录到虚拟机的终端

    Sudo太空船坞…- m https://hoth-mission.basespace.illumina.com

    一旦成功,您将在终端中看到一条消息,上面写着docker服务ping成功,这意味着您的本地虚拟机现在正在轮询BaseSpace作业调度器进行工作。每当从BaseSpace提交此应用程序的新作业时,如果发送给本地代理选项由开发人员选择,作业将在他们的本地虚拟机中执行,您可以实时看到这个过程!

    后面的值。——一个是您特定的代理Id,这是BaseSpace如何知道从这个应用程序发送作业到这个本地虚拟机。url是指向BaseSpace Job Scheduler的url。

  4. 确保你的callbacks.js文件为你的应用程序引用正确的Docker镜像,并且正在发送的命令行参数足以让你的应用程序运行

js函数可以通过打开一个表单,单击旁边的下拉菜单来编辑当前的模板,并选择callbacks.js.js函数专门用于本地应用程序,并确定从BaseSpace传递给Docker映像的信息。

本地应用程序可以在一个节点上运行,也可以优化该进程以在多个节点上运行。文档将介绍这两种场景。

单节点模板

function launchSpec(dataProvider){返回{commandLine: ["/ helloworld .sh"], containerImageId:"tliu1/helloworld"};}

这是一个单节点分析模板,这意味着应用程序将在一个节点上运行,该节点将拥有所有输入数据。

在上面的例子中,我们在callback .js文件中看到了以下动作:

  • 返回:这是返回语句,将被发送到正在运行应用程序的机器。
  • 命令行:指定将下列命令输入到Docker容器的命令行中以启动应用程序
    • [" / helloworld.sh”]:这将生成以下命令行参数python home/apps/fastqc/fastqc.py投影/ helloworld.sh意味着运行/ helloworld.shShell脚本位于文件夹中。如果在其他路径中,则在此命令中指定该路径。
  • containerImageId:此应用程序的Docker注册表中的Docker容器
    • “tliu1 / helloworld”:这是Docker注册表中的Docker容器。tliu1是用户名和helloworld是Docker映像的名称。该容器将输入上面的命令行脚本。

除了上面提到的,callback .js函数还可以用来指定跨多个节点运行分析。

基于多节点模板的单节点分析

函数launchSpec(dataProvider) {var retval = {nodes: []};var samples = dataProvider.GetProperty("Input.sample-id");retval.nodes。push({commandLine: ["/helloworld.sh"], containerImageId:"tliu1/helloworld ",属性:{"输入。: Samples [0]}});返回retval;}
  • var samples = dataProvider.GetProperty("Input.sample-id");:该命令正在设置变量样品作为属性的IdInput.samples-id如果选择多个Sample作为输入,该变量将是一个Sample id数组。
  • 返回:这是返回语句,将被发送到正在运行应用程序的机器。
  • 命令行:指定将下列命令输入到Docker容器的命令行中以启动应用程序
    • [" / helloworld.sh”]:这将生成以下命令行参数/ helloworld.sh这意味着运行/ helloworld.shShell脚本位于文件夹中。如果在其他路径中,则在此命令中指定该路径。
  • containerImageId:此应用程序的Docker注册表中的Docker容器
    • “tliu1 / helloworld”:这是Docker注册表中的Docker容器。tliu1是用户名和helloworld是Docker映像的名称。该容器将输入上面的命令行脚本。

多节点模板多节点分析

函数launchSpec(dataProvider) {var retval = {nodes: []};var samples = dataProvider.GetProperty("Input.sample-id");var project = dataProvider.GetProperty("Input.project-id");For (var I = 0;I < samples.length;i++) {retval.nodes。push({commandLine: ["/helloworld.sh"], containerImageId:"tliu1/helloworld",属性:{"输入。Samples ": [Samples [i]], "输入。project-id": project}});}返回返回;}

在上面的callback .js函数中样品variable是多个sample的数组。下面将遍历该数组循环,每个节点从样本(我)价值。

在将来,callback .js函数还将用于定义计费函数和指定应用程序的计算需求。

  1. 点击发送给本地代理

    的BaseSpace中的该作业的AppSession页面Formbuilder窗口。您可以看到应用程序输出的运行日志。

    如果你切换到你通过SSH登录到虚拟机的终端,你会看到应用程序执行,执行以下操作:

    • 下载Docker映像
    • 将输入数据从表单下载到数据/输入文件夹
    • 方法运行命令行参数callbacks.js
    • 在Docker容器中执行脚本
    • 将结果上传回BaseSpace数据输出
    • 将AppSession标记为Complete

    在上述过程中,应用程序将不断更新AppSession的状态和状态摘要。

启动按钮

发射选项将在BaseSpace基础设施而不是发送到本地虚拟机。作业被发送到BaseSpace作业调度器,然后它会找到或创建一个Amazon Machine Image (AMI)来运行应用程序。这个AMI的规范与我们提供的本机应用程序虚拟机的规范类似。AMI从作业调度器接收到作业后,它将Docker映像从Docker注册中心下载到AMI,并在callbacks.js

发射按钮的意思是测试启动应用程序作为一个用户将使用BaseSpace基础设施,而不是您的本地机器与虚拟机运行。

使用API来测试你的原生应用

该API现在可用于以编程方式启动原生应用程序API参考页面下职位:应用程序/ {id} / appsessions

有两种方法可以使用此API在BaseSpace基础设施中或在本地机器上启动本地应用程序。为了在BaseSpace基础架构中启动应用程序,您首先需要提交应用程序进行审查,并请求我们允许启动。如果您正在使用本地机器来启动应用程序,则使用AgentId可以通过此请求将作业发送到本地机器。的AgentId本机设置标签为您的应用程序在开发者门户。

你需要一个访问令牌和您希望启动的应用程序的Id。该访问令牌可以在凭证TAB在开发者门户中为你的任何应用程序,与任何这些访问令牌,你将能够启动任何应用程序,你有作为用户或开发人员访问。

API参考将提供关于以编程方式启动应用程序的过程的更详细信息。