跳过主要内容

GitLab runner客户端的非官方实现,用于创建定制的CI runner

项目描述

CI Status Documentation Status PyPI Package Conda-forge Package

这是一个非官方的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)

注意:作业日志包含在持久化数据中,因此一旦持久化作业对象,就不能在不丢失日志消息的情况下多次加载。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

gitlab_runner_api-1.0.4.tar.gz (32.7 kB 查看哈希值)

上传时间

构建分发

gitlab_runner_api-1.0.4-py2.py3-none-any.whl (25.0 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持