动态生成buildkite管道
buildpipe的Python项目详细描述
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
许可证
麻省理工学院