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/heroku@1.2.6
workflows:
heroku_deploy:
jobs:
- heroku/deploy-via-git
在上面的配置中,我们引入了 Heroku orb circleci/heroku@1.2.6,它会自动让我们访问一组强大的 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