#runner #workflow #docker #automation #ci

astro-run-remote-runner

AstroRun是一个高度可定制的流程编排器,允许用户定义自己的核心运行器。无论是Docker还是其他平台,AstroRun都让用户能够轻松灵活地运行工作流。

9个版本 (1个稳定版)

1.0.0 2024年7月20日
0.1.7 2024年3月15日
0.1.5 2024年2月25日
0.1.4 2023年10月1日
0.1.1 2023年8月23日

#1267 in 网络编程

Download history 2/week @ 2024-06-08 1/week @ 2024-06-15 27/week @ 2024-06-29 149/week @ 2024-07-20 51/week @ 2024-07-27

每月200次下载

MIT许可协议

190KB
5K SLoC

Astro Run Remote Runner

astro-run-remote-runnerastro-run的一个扩展,允许运行器作为远程服务,并让astro-run作为客户端通过gRPC请求连接。远程运行器使用流将运行时日志、事件等流式传输到客户端。

示例

在您的Cargo.toml中添加astro-runastro-run-remote-runner作为依赖项

[dependencies]
astro-run = "0.1"
astro-run-remote-runner = "0.1"

远程运行器服务器

use astro_run::{stream, Context, Result, RunResult};
use astro_run_remote_runner::AstroRunRemoteRunnerServer;

// Simulated implementation of a Runner
struct Runner {}

impl Runner {
  fn new() -> Self {
    Runner {}
  }
}

#[astro_run::async_trait]
impl astro_run::Runner for Runner {
  async fn run(&self, ctx: Context) -> astro_run::RunResponse {
    let (tx, rx) = stream();

    tx.log(ctx.command.run);
    tx.end(RunResult::Succeeded);

    Ok(rx)
  }
}

#[tokio::main]
async fn main() -> Result<()> {
  let runner = Runner::new();

  let runner_server = AstroRunRemoteRunnerServer::builder()
    .runner(runner)
    .build()
    .unwrap();

  runner_server.serve("127.0.0.1:5002").await.unwrap();

  Ok(())
}

Astro-Run客户端

use astro_run::{AstroRun, Result, Workflow};
use astro_run_remote_runner::AstroRunRemoteRunnerClient;

#[tokio::main]
async fn main() -> Result<()> {
  let client_runner = AstroRunRemoteRunnerClient::builder().build().unwrap();

  let handle = tokio::task::spawn({
    let mut client_runner = client_runner.clone();
    async move {
      // Run the client runner in background
      client_runner
        .start(vec!["http://127.0.0.1:5002"])
        .await
        .unwrap();
    }
  });

  let astro_run = AstroRun::builder().runner(client_runner).build();

  let workflow = r#"
    jobs:
      job-id:
        steps:
          - run: Hello World
      "#;

  let workflow = Workflow::builder()
    .config(workflow)
    .build(&astro_run)
    .await
    .unwrap();

  // Create a new execution context
  let ctx = astro_run.execution_context().build();

  // Run workflow
  let _res = workflow.run(ctx).await;

  // Wait for the client runner to finish
  handle.await.unwrap();

  Ok(())
}

在上面的示例中,您可以用astro-runner的特定实现替换运行器。

依赖项

~14–30MB
~505K SLoC