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/crystal@1.0
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/crystal@1.0
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/crystal@1.0
version: 2.1
安裝 shard 套件¶
您無需擔心,因為 crystal/test
工作會執行 crystal/shard-install
orb 命令。
安裝二進制相依性¶
我們的應用程式或某些 shard 可能需要函式庫和套件。這些二進制相依性可以使用 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/crystal@1.0
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/crystal@1.0
version: 2.1
注意
pre-steps
中的明確 checkout
是為了讓 test-data/setup.sql
檔案可用。
快取¶
當使用工作 crystal/test
時,預設會啟用快取,因為它在內部使用 with-shards-cache 命令