CircleCI 是一个由 DevOps 专业人员构建的 CI/CD 平台,可帮助您从头到尾优化整个开发过程。通过 CircleCI 仪表盘 UI 实时检查代码更改,它可以帮助工程团队构建、测试和部署软件。通过为每个项目构建 CI/CD 流程或配置工作流以决定何时以及如何运行作业,可以更好地控制流水线,此外还有优化持续交付的数据和镜像缓存选项。
CircleCI 支持多种不同的语言和各种各样的云托管计算类型,例如 Docker、Linux VM、macOS、Windows 等,从而简化了基础架构方法。借助 CircleCI 仪表盘,可以收集构建更改的见解,以持续优化流水线。
要进行部署,CircleCI 会从您的流水线中获取工件,并将它们发送到您需要部署的任何地方,无论是 Docker、Heroku、Kubernetes、云平台等等。
在 GitHub 或 Bitbucket 获得授权并添加为 cirlceci.com 上的项目后,每次代码更改都会触发 CircleCI 作业。测试完成后,CircleCI 会发送成功或失败的电子邮件通知。CircleCI 会找到并运行 config.yml,测试构建,运行安全扫描,经过批准步骤,然后进行部署。
作为 DevOps 工程师或开发者,您可以
SSH 到任何作业以调试构建问题。
设置并行运行的作业以减少时间。
使用两个简单的键配置 Redis 缓存,以在工作流中重用先前作业的数据。
配置自托管运行器以支持独特平台。
访问机器执行器的 Arm 资源。
使用可重用的配置包与第三方集成。
使用各种语言的预构建 Redis Docker 镜像。
使用 API 检索作业和工作流信息。
使用 CLI 在本地访问高级工具。
通过测试洞察获取不稳定测试检测。
CircleCI 账户
GitHub 账户
Heroku 账户
在此演示中,我们将使用使用 Python 和 Redis 构建的 Redis 速率限制应用。
速率限制是许多开发者在其职业生涯中可能不得不处理的一种机制。它可用于多种目的,例如共享有限资源的访问或限制对 API 端点的请求数量并返回 429 状态码。该项目的完整源代码托管在 GitHub 上。在此示例中,我们将配置 CircleCI 将速率限制应用直接部署到 Heroku 平台。
选择您偏好的登录方式。为了方便,本次演示选择“GitHub”。
本次演示将使用 Redis 速率限制项目。
由于我们尚未创建 config.yml 文件,请选择“快速”选项,基于可编辑的可用模板创建一个新的 config.yml。
version: 2.1
orbs:
heroku: circleci/[email protected]
workflows:
heroku_deploy:
jobs:
- heroku/deploy-via-git
在上面的配置中,我们引入了 Heroku Orb circleci/[email protected],它自动为我们提供了强大的 Heroku 作业和命令集。
其中一项作业是 heroku/deploy-via-git,它可以直接将您的应用程序从 GitHub 仓库部署到您的 Heroku 账户。
进行新更改后,它会要求您发起一个新的 PR。现在请继续合并这些更改。
在设置页面的侧边栏菜单中,点击“构建设置”下的环境变量。在环境变量页面上,创建两个名为HEROKU_APP_NAME和HEROKU_API_KEY的变量,并输入对应的值。
有了这些配置,我们的 CircleCI 配置将能够向 Heroku 平台进行经过认证的部署。
合并拉取请求后,工具将自动触发构建。
remote: Collecting attrs>=19.2.0
remote: Downloading attrs-21.4.0-py2.py3-none-any.whl (60 kB)
remote: Collecting wrapt<2,>=1.10
remote: Downloading wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (77 kB)
remote: Collecting pyparsing!=3.0.5,>=2.0.2
remote: Downloading pyparsing-3.0.7-py3-none-any.whl (98 kB)
remote: Installing collected packages: wrapt, pyparsing, typing-extensions, sqlparse, packaging, deprecated, async-timeout, asgiref, tomli, redis, py, pluggy, iniconfig, h11, Django, click, attrs, uvloop, uvicorn, urllib3, sniffio, rfc3986, pytz, python-dotenv, pytest, django-redis, django-ipware, django-cors-headers
remote: Successfully installed Django-4.0.3 asgiref-3.5.0 async-timeout-4.0.2 attrs-21.4.0 click-8.1.0 deprecated-1.2.13 django-cors-headers-3.11.0 django-ipware-4.0.2 django-redis-5.2.0 h11-0.13.0 iniconfig-1.1.1 packaging-21.3 pluggy-1.0.0 py-1.11.0 pyparsing-3.0.7 pytest-7.1.1 python-dotenv-0.20.0 pytz-2022.1 redis-4.2.0 rfc3986-2.0.0 sniffio-1.2.0 sqlparse-0.4.2 tomli-2.0.1 typing-extensions-4.1.1 urllib3-1.26.9 uvicorn-0.17.6 uvloop-0.16.0 wrapt-1.14.0
remote: -----> $ python server/manage.py collectstatic --noinput
remote: 133 static files copied to '/tmp/build_3850bcfb/server/static_root'.
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 75.3M
remote: -----> Launching...
remote: Released v11
remote: https://*****************.herokuapp.com/ deployed to Heroku