动态生成buildkite管道

buildpipe的Python项目详细描述


Build StatusDocumentation StatusPyPI Version

buildpipe允许您动态生成buildkite管道,以便您可以:

  • 管理连续部署逻辑,例如仅在工作时间部署
  • 仅通过查看指定项目中的git更改来维护monorepos
  • 指定项目之间的依赖关系,以便它们的步骤是并发的

安装

pip install buildpipe

示例

注意:有关完整的工作示例,请参见Buildkite Monorepo Example

# trigger deploy steps on master during business hoursdeploy:branch:mastertimezone:US/Easternallowed_hours_regex:'9|1[0-7]'allowed_weekdays_regex:'[1-5]'blacklist_dates:-'01-01'-'12-31'# ignore certain files from triggering steps with fnmatchignore:-'*.md'-'pyproject/*.ini'stairs:-name:testscope:projectbuildkite:command:-cd $$BUILDPIPE_PROJECT_PATH-make test-name:buildscope:projectemoji:":docker:"tags:-docker-onlybuildkite:agents:-queue=buildbranches:mastercommand:-make build-make publish-image-name:tagscope:stairemoji:":github:"buildkite:branches:mastercommand:make tag-name:deploy-stagingscope:projectemoji:":shipit:"deploy:truebuildkite:branches:mastercommand:-cd $$BUILDPIPE_PROJECT_PATH-make deploy-staging-name:deploy-prodscope:projectemoji:":shipit:"deploy:truebuildkite:branches:mastercommand:-cd $$BUILDPIPE_PROJECT_PATH-make deploy-prodprojects:-name:pyprojectpath:pyprojectemoji:":python:"tags:-docker-onlydependencies:-jsproject-name:jsprojectpath:jsprojectemoji:":javascript:"skip:-deploy-staging

上面的buildpipe配置文件指定了以下内容:

  • repo中有两个项目需要跟踪:jsproject和pyproject。
  • 楼梯是一组台阶。它可以有一个“项目”或“楼梯”的范围。范围“项目”为每个更改的项目创建一个步骤,而范围“楼梯”仅创建一个步骤。
  • 也可以使用标记规则限制楼梯的范围。例如,pyproject有“docker only”标记,因此将包含构建步骤;但是jsproject没有该步骤。
  • 任何git文件更改都是项目路径的子路径,将触发每个项目的步骤。
  • 此外,pyproject将path jsproject作为依赖项:jsproject中的任何更改都将触发pyproject包含在管道中的步骤。注意依赖关系是路径而不是项目。
  • 带有“deploy:true”的楼梯只会在东部时间上午9点到下午5点之间的工作日(不是除夕或除夕)触发。
  • 项目jsproject永远不会创建step deploy staging。
  • PyProject下以.md或.ini文件结尾的文件在触发部署步骤时将被忽略。

在上面的配置中,如果只接触到pyproject下的文件,并且合并发生在工作时间内,那么buildpipe将创建以下步骤:

steps:-wait-command:-cd $$BUILDPIPE_PROJECT_PATH-make testenv:BUILDPIPE_PROJECT_NAME:pyprojectBUILDPIPE_PROJECT_PATH:pyprojectBUILDPIPE_STAIR_NAME:testBUILDPIPE_STAIR_SCOPE:projectlabel:'testpyproject:python:'-wait-agents:-queue=buildbranches:mastercommand:-cd $$BUILDPIPE_PROJECT_PATH-make build-make publish-imageenv:BUILDPIPE_PROJECT_NAME:pyprojectBUILDPIPE_PROJECT_PATH:pyprojectBUILDPIPE_STAIR_NAME:buildBUILDPIPE_STAIR_SCOPE:projectlabel:'buildpyproject:docker:'-wait-branches:mastercommand:make tagenv:BUILDPIPE_STAIR_NAME:tagBUILDPIPE_STAIR_SCOPE:stairlabel:'tag:github:'-wait-branches:mastercommand:-cd $$BUILDPIPE_PROJECT_PATH-make deploy-stagingconcurrency:1concurrency_group:deploy-staging-pyprojectenv:BUILDPIPE_PROJECT_NAME:pyprojectBUILDPIPE_PROJECT_PATH:pyprojectBUILDPIPE_STAIR_NAME:deploy-stagingBUILDPIPE_STAIR_SCOPE:projectlabel:'deploy-stagingpyproject:shipit:'-wait-branches:mastercommand:-cd $$BUILDPIPE_PROJECT_PATH-make deploy-prodconcurrency:1concurrency_group:deploy-prod-pyprojectenv:BUILDPIPE_PROJECT_NAME:pyprojectBUILDPIPE_PROJECT_PATH:pyprojectBUILDPIPE_STAIR_NAME:deploy-prodBUILDPIPE_STAIR_SCOPE:projectlabel:'deploy-prodpyproject:shipit:'

设置

在buildkite pipeline settings ui中,您只需在“commands to run”(要运行的命令)中添加以下内容即可:

buildpipe -i path/to/buildpipe.yml -o pipeline.yml
buildkite-agent pipeline upload pipeline.yml

测试

make test

许可证

麻省理工学院

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

推荐PyPI第三方库


热门话题
java动态地将圆添加到Arraylist   什么是好的“错误检查”模式(Java)?   java是我们可以在应用程序中使用的云服务,它需要存储最大大小为5MB的小文件   JavaGooglePhotosAPI是静态内容上传项目的永久url   java AES密钥存储   java文件正在下载,但没有任何内容   每次循环迭代和threadsleep的java日志记录都是不好的做法?   java不会切换到另一个。单击submit时使用jsp。春季mvc   java我很难从我的maclaurin系列中获得sin x的准确输出   java使用类似的<Object>?   需要java Hibernate映射吗?   java如何在https和客户端证书请求后面生成web服务代理   java如何通过注释有条件地使用自定义JsonSerializer   java如何在html页面和Restful WebResource方法之间实现JaxB?   读取文件Libgdx Android时发生java错误   java如何在处理主活动之前从另一个方法中获取值?   java在一个SQLquery中使用多个语句,还是使用批处理?