CircleCI¶
在本节中,我们将使用 CircleCI 作为我们的持续集成服务。用 几句话 来说,CircleCI 自动执行软件构建、测试和部署。它支持 不同的编程语言,对于我们的特定情况,它支持 Crystal 语言。
在本节中,我们将介绍一些配置示例,以了解 CircleCI 如何实现一些 持续集成概念。
CircleCI orbs¶
在展示一些示例之前,值得一提的是 CircleCI orbs。如官方文档中所定义的
Orbs 定义了可重用的命令、执行器和作业,以便可以将常用配置片段压缩成一行代码。
在我们的案例中,我们将使用 Crystal 的 Orb
构建和运行规范¶
使用 latest
的简单示例¶
让我们从一个简单的示例开始。我们将使用最新的 Crystal 版本运行测试
.circleci/config.yml
workflows:
version: 2
build:
jobs:
- crystal/test
orbs:
crystal: manastech/[email protected]
version: 2.1
是的!就这么简单!借助 Orbs,构建了一个抽象层,使配置文件更易于阅读和理解。
如果我们想知道作业 crystal/test 的作用,我们可以随时查看源代码。
使用 nightly
¶
使用 nightly 版本的 Crystal 发布版本就像这样
.circleci/config.yml
workflows:
version: 2
build:
jobs:
- crystal/test:
name: test-on-nightly
executor:
name: crystal/default
tag: nightly
orbs:
crystal: manastech/[email protected]
version: 2.1
使用特定 Crystal 版本¶
.circleci/config.yml
workflows:
version: 2
build:
jobs:
- crystal/test:
name: test-on-0.30
executor:
name: crystal/default
tag: 0.30.0
orbs:
crystal: manastech/[email protected]
version: 2.1
安装分片包¶
您不必担心,因为 crystal/test
作业运行 crystal/shard-install
orb 命令。
安装二进制依赖项¶
我们的应用程序或可能是一些分片可能需要库和包。这些二进制依赖项可以使用 Apt 命令进行安装。
以下是一个安装 libsqlite3
开发包的示例
.circleci/config.yml
workflows:
version: 2
build:
jobs:
- crystal/test:
pre-steps:
- run: apt-get update && apt-get install -y libsqlite3-dev
orbs:
crystal: manastech/[email protected]
version: 2.1
使用服务¶
现在,让我们使用外部服务(例如 MySQL)运行规范
.circleci/config.yml
executors:
crystal_mysql:
docker:
- image: 'crystallang/crystal:latest'
environment:
DATABASE_URL: 'mysql://root@localhost/db'
- image: 'mysql:5.7'
environment:
MYSQL_DATABASE: db
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
workflows:
version: 2
build:
jobs:
- crystal/test:
executor: crystal_mysql
pre-steps:
- run:
name: Waiting for service to start (check dockerize)
command: sleep 1m
- checkout
- run:
name: Install MySQL CLI; Import dummy data
command: |
apt-get update && apt-get install -y mysql-client
mysql -h 127.0.0.1 -u root --password="" db < test-data/setup.sql
orbs:
crystal: manastech/[email protected]
version: 2.1
注意
pre-steps
中的显式 checkout
是为了让 test-data/setup.sql
文件可用。
缓存¶
使用作业 crystal/test
时,默认情况下会启用缓存,因为内部使用命令 with-shards-cache