用于定制CI运行程序的GitLab runner客户端的非正式实现

gitlab-runner-api的Python项目详细描述


CI StatusDocumentation StatusPyPI PackageConda-forge Package

用于创建定制GitLab CI运行程序的API的非官方Python实现。在

这个包提供了注册Runner的基本功能。 然后可以使用该对象请求Job,并将日志、状态和工件通信回GitLab。 没有提供任何功能来执行.gitlab-ci.yml中定义的有效负载。在

这个包最初是为了支持LHCb’s Analysis Productions,它提供了一个可以向lhcdirac提交作业的CI运行程序。 更多细节可以在TODO中找到。在

注册跑步者

注册新的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)

例如

^{pr2}$

其中参数可以通过导航到所需存储库设置的“CI/CD”页找到。在

找工作

注册运行程序后,可以从.json文件加载它并用于请求作业:

fromgitlab_runner_apiimportRunnerrunner=Runner.load("my-runner-data.json")runner.check_auth()ifjob:=runner.request_job():print("Received a new job, starting executor")my_job_executor(job)else:print("No jobs are currently available")

正在执行作业

最小CI执行器的运行方式如下:

fromgitlab_runner_apiimportfailure_reasonsjob.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)ifsuccess:job.log+="All tests ran successfully\n"job.set_success()else:# ANSI formatting codes can be used to enhance the CI logsjob.log+="\u001b[31mJob failed!!!\u001b[0m\n"job.set_failed(failure_reasons.ScriptFailure())

有关可用属性的完整列表,请参阅参考文档Job。在

持续工作

对于长时间运行的作业,可能需要在调用之间持久化作业对象。 这可以使用类似于Python标准库中的pickle模块的接口来完成:

job_data=job.dumps()fromgitlab_runner_apiimportJobjob=Job.loads(job_data)

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java嵌套循环打印一个数字,旁边有相同数量的星号   java JodReports替代方案   java如何将模型类parcelable对象从片段传递到活动?   java JCS缓存删除功能不删除特定元素   如何打开。Java的dll文件。   java在这种情况下如何选择聚合根?   java从CellEditorListener获取编辑的TreeNode   Java到web服务和mysql   从openssl ec在Java中创建公钥时出现加密无效密钥异常   Java数组:添加多个数组的元素时忽略空数组   java在初始化后向fragment发送数据   JButtons的java数组正在返回void   若联接列不包含特定值,则java JPA条件生成器仅返回实体   java ActionBar问题:NPE   java Portlet是被广泛使用还是非常罕见?