GitLab runner客户端的非官方实现,用于创建定制的CI runner
项目描述
这是一个非官方的Python实现,用于创建定制的GitLab CI runner的API。
此包提供了注册 Runner 的基本功能。然后可以使用此对象请求 Job 并将日志、状态和工件返回到GitLab。不提供执行在 .gitlab-ci.yml 中定义的有效负载的功能。
此包最初开发是为了支持 LHCb的Analysis Productions,通过提供可以向LHCbDIRAC提交作业的CI runner。更多详细信息可以在TODO中找到。
注册Runner
注册新的 Runner 的最简单方法是使用包含的命令行工具
$ register-runner --help
usage: register-runner [-h] [--locked] [--maximum-timeout MAXIMUM_TIMEOUT] api_url token output_fn
positional arguments:
api_url
token
output_fn
optional arguments:
-h, --help show this help message and exit
--locked Lock the runner the to the current project
--maximum-timeout MAXIMUM_TIMEOUT
Maximum timeout set when this Runner will handle the job (in seconds)
例如
$ register-runner "https://gitlab.cern.ch/" "MY_REGISTRATION_TOKEN" "my-runner-data.json " --locked
INFO:gitlab_runner_api:gitlab.cern.ch: Successfully registered runner 6602 (abcdefghij)
INFO:gitlab_runner_api:gitlab.cern.ch: Successfully initialised runner 6602
可以通过导航到所需存储库设置的“CI/CD”页面来找到参数。
获取作业
在注册了runner之后,可以从 .json 文件中加载它并用于请求作业
from gitlab_runner_api import Runner
runner = Runner.load("my-runner-data.json")
runner.check_auth()
if job := runner.request_job():
print("Received a new job, starting executor")
my_job_executor(job)
else:
print("No jobs are currently available")
执行作业
一个最小的CI执行器可能如下所示
from gitlab_runner_api import failure_reasons
job.log += f"Starting job with id {job.id} for branch {job.ref}\n"
do_clone_and_checkout(job.repo_url, job.commit_sha)
success = run_tests(job)
if success:
job.log += "All tests ran successfully\n"
job.set_success()
else:
# ANSI formatting codes can be used to enhance the CI logs
job.log += "\u001b[31mJob failed!!!\u001b[0m\n"
job.set_failed(failure_reasons.ScriptFailure())
请参阅参考 Job 文档以获取所有可用属性的完整列表。
持久化作业
对于长时间运行的作业,可能需要在调用之间持久化作业对象。这可以使用类似于Python标准库中的 pickle 模块的接口来完成
job_data = job.dumps()
from gitlab_runner_api import Job
job = Job.loads(job_data)
注意:作业日志包含在持久化数据中,因此一旦持久化作业对象,就不能在不丢失日志消息的情况下多次加载。