11 个版本
0.1.0 | 2024 年 5 月 17 日 |
---|---|
0.0.8 | 2023 年 1 月 13 日 |
0.0.7 | 2022 年 10 月 18 日 |
0.0.5 | 2022 年 5 月 16 日 |
0.0.1 | 2021 年 9 月 26 日 |
#168 在 构建工具
每月 <42 次下载
79KB
2K SLoC
gitlab-runner-rs
一个库,帮助构建自定义 gitlab 运行器实现。
自定义运行器的实现
总体思路是,这个库处理与 gitlab 服务器的所有交互并驱动执行,而运行器实现则专注于如何处理来自 gitlab 的作业。
对于自定义运行器的实现者来说,重点是实现异步的 JobHandler 特性,该特性在作业执行期间会被调用。一个绝对最小化的运行器可以这样实现
use gitlab_runner::{outputln, GitlabLayer, RunnerBuilder, JobHandler, JobResult, Phase};
use tracing_subscriber::prelude::*;
use std::path::PathBuf;
#[derive(Debug)]
struct Run {}
#[async_trait::async_trait]
impl JobHandler for Run {
async fn step(&mut self, script: &[String], phase: Phase) -> JobResult {
outputln!("Running script for phase {:?}", phase);
for s in script {
outputln!("Step: {}", s);
}
Ok(())
}
}
#[tokio::main]
async fn main() {
let (layer, jobs) = GitlabLayer::new();
// By default show logs from my_runner and warnings, the gitlab_runner::gitlab::job span which
// sets the gitlab.job field is always enabled regardless of the over all log level.
let env = std::env::var("RUNNER_LOG").unwrap_or_else(|_| "my_runner=info,warn".to_string());
let envfilter = tracing_subscriber::EnvFilter::builder()
.parse(&env)
.unwrap_or_else(|_| panic!("Failed to parse RUNNER_LOG env var: {env}"))
.add_directive("gitlab_runner::gitlab::job=error".parse().unwrap());
tracing_subscriber::Registry::default()
.with(
tracing_subscriber::fmt::Layer::new()
.pretty()
.with_filter(envfilter),
)
.with(layer)
.init();
let mut runner = RunnerBuilder::new(
"https://gitlab.example.com".try_into().expect("failed to parse url"),
"runner token",
"/tmp",
jobs
)
.build()
.await;
runner.run(move | _job | async move { Ok(Run{}) }, 16).await.unwrap();
}
在设置跟踪订阅者时,应仅使用每层过滤,以确保不会过滤掉旨在发送给 gitlab 的日志。对于其他日志输出,应始终启用 gitlab_runner::gitlab::job
目标,以获取包含 gitlab 作业 id 的 gitlab.job 字段。
创建 Gitlab 运行器
这个库不支持在 GitLab 服务器上创建新的运行器。这可以通过使用 运行器创建 API 或在 GitLab 的 运行器管理网页界面 中手动完成。请确保遵循带有身份验证令牌的运行器创建工作流程,因为注册令牌工作流程已被弃用。
创建运行器时提供的参数之一是 run_untagged=false
(或在网页界面中不选中 Run untagged jobs
复选框),这将使运行器 仅 选取与它的标签匹配的作业。这很重要,以防止运行器选取它无法处理的“常规”作业。
当创建运行器时,GitLab 会提供一个以 glrt-
开头的身份验证令牌。这个令牌应提供给运行器以用于其 GitLab 连接。
可以使用类似于以下 curl 命令来验证令牌
curl --request POST "https://GITLAB_URL/api/v4/runners/verify" \
--form "token=AUTHENTICATION_TOKEN"
此步骤是可选的。
依赖关系
~15-29MB
~470K SLoC